@stigmer/runner-slim 3.1.9 → 3.1.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/main.js +5 -5
- package/package.json +6 -6
package/main.js
CHANGED
|
@@ -586,7 +586,7 @@ Base commit: ${metadata.baseCommit}`,gitMetadata:metadata,entryName:""}}async fu
|
|
|
586
586
|
**Workspace:** \`${entryName}\`
|
|
587
587
|
|
|
588
588
|
Each approved turn appends its commits to this pull request.
|
|
589
|
-
`,resp=await fetch(`${GITHUB_API}/repos/${entryState.githubOwner}/${entryState.githubRepo}/pulls`,{method:"POST",headers:this.githubHeaders(),body:JSON.stringify({title:`Stigmer agent changes (${shortSessionId})`,body:prBody,head:this.branchName,base:entry.baseBranch})});if(!resp.ok){let body=await resp.text();throw new Error(`GitHub API error (HTTP ${resp.status}): ${body}`)}let data=await resp.json();entryState.prCreated=!0,entryState.prUrl=data.html_url??"",entryState.prNumber=data.number??0,console.log(`[WriteBack] execution=${this.executionId} entry=${entryName} \u2014 PR #${entryState.prNumber} created: ${entryState.prUrl}`)}async findOpenPr(entryState){let head=`${entryState.githubOwner}:${this.branchName}`,resp=await fetch(`${GITHUB_API}/repos/${entryState.githubOwner}/${entryState.githubRepo}/pulls?head=${encodeURIComponent(head)}&state=open`,{headers:this.githubHeaders()});if(!resp.ok){let body=await resp.text();throw new Error(`GitHub API error listing PRs (HTTP ${resp.status}): ${body}`)}let pr=(await resp.json())[0];return pr?{url:pr.html_url??"",number:pr.number??0}:null}githubHeaders(){return{Authorization:`Bearer ${this.githubToken}`,Accept:"application/vnd.github+json","Content-Type":"application/json"}}async updateStatus(entryName,entryState,entry,exec2,prError){let summaryOutput=await exec2(`git diff --stat ${entry.baseBranch}...HEAD`).catch(()=>""),phase=entryState.prCreated?WorkspaceWriteBackPhase.WORKSPACE_WRITE_BACK_PR_CREATED:WorkspaceWriteBackPhase.WORKSPACE_WRITE_BACK_PUSHED,wb=create(WorkspaceWriteBackSchema,{workspaceEntryName:entryName,branchName:this.branchName,baseBranch:entry.baseBranch,commitSha:entryState.lastCommitSha,pullRequestUrl:entryState.prUrl,pullRequestNumber:entryState.prNumber,diffSummary:summaryOutput.trim(),phase,error:prError});this.statusWriter.addWriteBack(wb)}async withLock(entryName,fn){let next=(this.locks.get(entryName)??Promise.resolve()).then(fn,fn);this.locks.set(entryName,next),await next}}}});function statusProtoWriter(status){return{get currentStatus(){return status},forceNextUpdate:!1,clearForceFlag(){},addArtifact(artifact){status.artifacts.push(artifact)},addWriteBack(wb){let backs=status.workspaceWriteBacks,idx=backs.findIndex(b=>b.workspaceEntryName===wb.workspaceEntryName);idx>=0?backs[idx]=wb:backs.push(wb)}}}var init_execution_status_writer=__esm({"dist/shared/execution-status-writer.js"(){"use strict"}});function getApiUrl(){return process.env.STIGMER_CLOUD_API_URL??DEFAULT_API_URL}function getAuthToken(){return process.env.STIGMER_TOKEN??process.env.STIGMER_AUTH_TOKEN}function parsePricingTable(json5){if(!json5||typeof json5!="object")return[];let models=json5.models;return Array.isArray(models)?models.filter(m=>m.harness==="cursor"&&m.pricing!=null).map(m=>({model:m.id,displayName:m.displayName,costTier:m.costTier??"standard",inputPricePerMillion:m.pricing.inputPricePerMillion,outputPricePerMillion:m.pricing.outputPricePerMillion,cacheWritePricePerMillion:m.pricing.cacheWritePricePerMillion,cacheReadPricePerMillion:m.pricing.cacheReadPricePerMillion,speedVariants:parseVariants(m.pricingVariants)})):[]}function parseVariants(variants){if(!variants||typeof variants!="object")return;let out={};for(let[key,v]of Object.entries(variants))!v||typeof v!="object"||(out[key]={inputPricePerMillion:v.inputPricePerMillion,outputPricePerMillion:v.outputPricePerMillion,cacheWritePricePerMillion:v.cacheWritePricePerMillion,cacheReadPricePerMillion:v.cacheReadPricePerMillion});return Object.keys(out).length>0?out:void 0}async function fetchFromApi(){let url3=`${getApiUrl()}/v1/proxy/model-registry`,headers={},token=getAuthToken();token&&(headers.Authorization=`Bearer ${token}`);let res=await fetch(url3,{headers});if(!res.ok)throw new Error(`Model registry fetch failed: ${res.status}`);let data=await res.json(),table=parsePricingTable(data);if(table.length===0)throw new Error("Model registry returned no cursor-harness models");return table}async function getPricingTable(){return cache&&Date.now()<cache.expiresAt?cache.data:inflightFetch||(inflightFetch=fetchFromApi().then(data=>(cache={data,expiresAt:Date.now()+36e5},data)).catch(err=>{console.warn(`Failed to fetch model registry from API, using default pricing: ${err}`);let fallback=[DEFAULT_PRICING];return cache={data:fallback,expiresAt:Date.now()+36e5},fallback}).finally(()=>{inflightFetch=null}),inflightFetch)}var DEFAULT_API_URL,DEFAULT_PRICING,cache,inflightFetch,init_model_pricing_data=__esm({"dist/activities/execute-cursor/model-pricing-data.js"(){"use strict";DEFAULT_API_URL="https://api.stigmer.ai",DEFAULT_PRICING={model:"unknown",displayName:"Unknown",costTier:"standard",inputPricePerMillion:1.25,outputPricePerMillion:6,cacheWritePricePerMillion:1.25,cacheReadPricePerMillion:.25},cache=null,inflightFetch=null}});function normalizeModelId(model){return model.replace(/-\d{8}(?:v\d+)?$/,"")}function stripSpeedSuffix(model){for(let suffix of SPEED_SUFFIXES)if(model.endsWith(suffix))return model.slice(0,-suffix.length);return null}function applyFastVariant(base,wireModel){let fast=base.speedVariants?.fast;return fast?{...base,model:wireModel,inputPricePerMillion:fast.inputPricePerMillion,outputPricePerMillion:fast.outputPricePerMillion,cacheWritePricePerMillion:fast.cacheWritePricePerMillion,cacheReadPricePerMillion:fast.cacheReadPricePerMillion}:null}async function ensureLoaded(){return initPromise||(initPromise=getPricingTable().then(table=>{pricingByModel=new Map(table.map(entry=>[entry.model,entry]))}),initPromise)}function getMap(){return pricingByModel||(console.warn("Model pricing accessed before ensureLoaded() \u2014 returning empty map"),new Map)}function resolveModelId(requestedModel){if(!requestedModel||requestedModel==="default")return"default";let map4=getMap();if(map4.has(requestedModel))return requestedModel;let normalized=normalizeModelId(requestedModel);return normalized!==requestedModel&&map4.has(normalized)?normalized:(console.warn(`Model "${requestedModel}" (normalized: "${normalized}") not in pricing registry (${map4.size} models), falling back to "default"`),"default")}function getCursorModelPricing(model){let map4=getMap(),exact=map4.get(model);if(exact)return exact;let speedBase=stripSpeedSuffix(model);if(speedBase){let baseEntry=map4.get(speedBase)??map4.get(normalizeModelId(speedBase));if(baseEntry){let fast=applyFastVariant(baseEntry,model);if(fast)return fast}}let normalized=normalizeModelId(model);if(normalized!==model){let byNormalized=map4.get(normalized);if(byNormalized)return byNormalized}return console.warn(`Pricing lookup miss for "${model}" (normalized: "${normalized}"), using DEFAULT_PRICING`),{...DEFAULT_PRICING,model}}function computeTurnCost(pricing,inputTokens,outputTokens,cacheWriteTokens,cacheReadTokens){return(Math.max(0,inputTokens-cacheReadTokens-cacheWriteTokens)*pricing.inputPricePerMillion+outputTokens*pricing.outputPricePerMillion+cacheWriteTokens*pricing.cacheWritePricePerMillion+cacheReadTokens*pricing.cacheReadPricePerMillion)/1e6}var SPEED_SUFFIXES,pricingByModel,initPromise,init_model_pricing=__esm({"dist/activities/execute-cursor/model-pricing.js"(){"use strict";init_model_pricing_data();SPEED_SUFFIXES=["-high-fast","-medium-fast","-low-fast","-fast"];pricingByModel=null,initPromise=null}});var EMPTY_SNAPSHOT,UsageAccumulator,init_usage_accumulator=__esm({"dist/activities/execute-cursor/usage-accumulator.js"(){"use strict";init_model_pricing();EMPTY_SNAPSHOT={inputTokens:0n,outputTokens:0n,cacheReadTokens:0n,cacheWriteTokens:0n,totalTokens:0n,turnCount:0,estimatedCostUsd:0,model:"",observedAt:""},UsageAccumulator=class{model;inputTokens=0;outputTokens=0;cacheReadTokens=0;cacheWriteTokens=0;turnCount=0;estimatedCostUsd=0;observedAt="";turnRecords=[];constructor(model){this.model=model}addTurn(usage){let input=usage.inputTokens??0,output=usage.outputTokens??0,cacheRead=usage.cacheReadTokens??0,cacheWrite=usage.cacheWriteTokens??0;this.inputTokens+=input,this.outputTokens+=output,this.cacheReadTokens+=cacheRead,this.cacheWriteTokens+=cacheWrite,this.turnCount++,this.observedAt=new Date().toISOString(),this.turnRecords.push({sequence:this.turnCount,inputTokens:input,outputTokens:output,cacheReadTokens:cacheRead,cacheWriteTokens:cacheWrite});let pricing=getCursorModelPricing(this.model);this.estimatedCostUsd+=computeTurnCost(pricing,input,output,cacheWrite,cacheRead)}get hasTurns(){return this.turnCount>0}get modelName(){return this.model}turns(){return this.turnRecords}snapshot(){return this.turnCount===0?EMPTY_SNAPSHOT:{inputTokens:BigInt(this.inputTokens),outputTokens:BigInt(this.outputTokens),cacheReadTokens:BigInt(this.cacheReadTokens),cacheWriteTokens:BigInt(this.cacheWriteTokens),totalTokens:BigInt(this.inputTokens+this.outputTokens),turnCount:this.turnCount,estimatedCostUsd:this.estimatedCostUsd,model:this.model,observedAt:this.observedAt}}}}});function activityStarted(){activeCount++,lastActivityAt=Date.now()}function activityFinished(){activeCount=Math.max(0,activeCount-1),lastActivityAt=Date.now()}var lastActivityAt,activeCount,init_idle_watchdog=__esm({"dist/idle-watchdog.js"(){"use strict";lastActivityAt=Date.now(),activeCount=0}});function normalizeActivityInput(arg0,arg1){return arg0!==null&&typeof arg0=="object"?{executionId:arg0.execution_id??"",threadId:arg0.thread_id??"",turnSeq:arg0.turn_seq??0}:{executionId:arg0??"",threadId:arg1??"",turnSeq:0}}var init_activity_input=__esm({"dist/shared/activity-input.js"(){"use strict"}});function matchesAny(text,patterns){let lower=text.toLowerCase();return patterns.some(p=>lower.includes(p))}function classifyText(text){return matchesAny(text,AUTH_PATTERNS)?{category:"auth",retryable:!1}:matchesAny(text,RATE_LIMIT_PATTERNS)?{category:"rate-limit",retryable:!0}:matchesAny(text,NETWORK_PATTERNS)?{category:"network",retryable:!0}:matchesAny(text,MODEL_PATTERNS)?{category:"model",retryable:!1}:{category:"unknown",retryable:!1}}function synthesizeError(opts){console.log(`[error-classifier] synthesizeError diagnostic: sdkError=${JSON.stringify(opts.sdkError)}, sdkResultFields=${JSON.stringify(opts.sdkResultFields)}, streamErrorMessage=${JSON.stringify(opts.streamErrorMessage)}, hasCapturedRejection=${!!opts.capturedRejection}, conversationErrorText=${JSON.stringify(opts.conversationErrorText)}, isResumedHandle=${opts.isResumedHandle}, model=${opts.fallbackContext.model}, mode=${opts.fallbackContext.mode}`);let classified=classifyFromSources(opts);return classified.category==="unknown"&&opts.isResumedHandle?{...classified,category:"agent-stale",retryable:!0}:classified}function classifyFromSources(opts){if(opts.sdkError){let{code,status,message}=opts.sdkError,text=[code,status!=null?String(status):void 0,message].filter(v=>typeof v=="string"&&v.length>0).join(" ");if(text.trim().length>0){let{category,retryable}=classifyText(text);return{category,message:message??text,retryable,source:"sdk"}}}if(opts.sdkResultFields&&!(opts.sdkResultFields==="Cursor run failed")){let{category,retryable}=classifyText(opts.sdkResultFields);return{category,message:opts.sdkResultFields,retryable,source:"sdk"}}if(opts.streamErrorMessage){let{category,retryable}=classifyText(opts.streamErrorMessage);return{category,message:opts.streamErrorMessage,retryable,source:"stream"}}if(opts.capturedRejection){let{category}=classifyText(`${opts.capturedRejection.code} ${opts.capturedRejection.message}`);return{category:category==="unknown"?"network":category,message:`[${opts.capturedRejection.code}] ${opts.capturedRejection.message}`,retryable:category!=="auth",source:"rejection"}}if(opts.conversationErrorText){let{category,retryable}=classifyText(opts.conversationErrorText);return{category,message:opts.conversationErrorText,retryable,source:"conversation"}}if(opts.messageCount===0&&opts.durationMs!=null&&opts.durationMs>=25e3&&opts.durationMs<=35e3&&!opts.isResumedHandle){let{model:model2,mode:mode2,agentId:agentId2}=opts.fallbackContext;return{category:"network",message:`Transport timeout (${opts.durationMs}ms, 0 messages received). Model=${model2}, mode=${mode2}, agentId=${agentId2}`,retryable:!0,source:"fallback"}}if(opts.isResumedHandle)return{category:"agent-stale",message:"Cursor run failed (no detail from SDK, resumed agent handle may be stale)",retryable:!0,source:"fallback"};let{model,mode,agentId}=opts.fallbackContext;return{category:"unknown",message:`Cursor run failed (no detail from SDK). Model=${model}, mode=${mode}, agentId=${agentId}`,retryable:!1,source:"fallback"}}function formatClassifiedError(err){return`${err.message} [category=${err.category}, source=${err.source}, retryable=${err.retryable}]`}function shouldRetryWithFreshAgent(err){return err.category==="agent-stale"||err.category==="network"}var AUTH_PATTERNS,RATE_LIMIT_PATTERNS,NETWORK_PATTERNS,MODEL_PATTERNS,init_error_classifier=__esm({"dist/activities/execute-cursor/error-classifier.js"(){"use strict";AUTH_PATTERNS=["unauthenticated","unauthorized","401","forbidden","permission_denied","invalid api key","not logged in"],RATE_LIMIT_PATTERNS=["resource_exhausted","rate limit","429","too many","usage limit"],NETWORK_PATTERNS=["unavailable","deadline_exceeded","503","504","timeout","econnrefused","econnreset","enotfound","network error","fetch failed","refused_stream"],MODEL_PATTERNS=["invalid model","model not found","model.*not available","unsupported model"]}});function startHeartbeat(intervalMs,getDetails,options){let stopped=!1,wasCancelled=!1,wasWorkerShutdown=!1,timer=setInterval(()=>{if(!stopped)try{import_activity2.Context.current().heartbeat(getDetails?.())}catch(err){err instanceof import_activity2.CancelledFailure&&(options?.shutdownSignal?.aborted?wasWorkerShutdown=!0:wasCancelled=!0,stopped=!0,clearInterval(timer))}},intervalMs);return{stop(){stopped=!0,clearInterval(timer)},get cancelled(){return wasCancelled},get workerShutdown(){return wasWorkerShutdown}}}var import_activity2,init_heartbeat=__esm({"dist/shared/heartbeat.js"(){"use strict";import_activity2=__toESM(require_lib4(),1)}});function createRunnerTokenCoordinator(options){let log=options.log??console,proxyTokenIsMinted=!1,refreshTimer=null,clearTimer=()=>{refreshTimer&&(clearTimeout(refreshTimer),refreshTimer=null)},scheduleRefresh=expiresInSeconds=>{clearTimer();let ttlSeconds=expiresInSeconds&&expiresInSeconds>0?expiresInSeconds:3600,delayMs=Math.max(5e3,Math.floor(ttlSeconds*.8*1e3));refreshTimer=setTimeout(()=>{refresh()},delayMs),refreshTimer.unref?.()},refresh=async()=>{let refreshed=await options.reMint();refreshed?(options.applyProxyToken(refreshed.token),scheduleRefresh(refreshed.expiresInSeconds),log.log("[runner-token] Proxy token refreshed")):(scheduleRefresh(6e4/1e3),log.warn("[runner-token] Proxy token refresh failed; will retry"))};return{adoptMintedToken(token,expiresInSeconds){proxyTokenIsMinted=!0,options.applyProxyToken(token),scheduleRefresh(expiresInSeconds)},onControlPlaneTokenChanged(token){!proxyTokenIsMinted&&token&&options.applyProxyToken(token)},isProxyTokenMinted:()=>proxyTokenIsMinted,stop:clearTimer}}var init_runner_token_coordinator=__esm({"dist/runner-token-coordinator.js"(){"use strict"}});function activityStartedOnQueue(taskQueue){let entry=registry.get(taskQueue)??{count:0};entry.count++,registry.set(taskQueue,entry)}function activityFinishedOnQueue(taskQueue){let entry=registry.get(taskQueue);if(entry&&(entry.count=Math.max(0,entry.count-1),entry.count===0&&entry.onDrained)){let onDrained=entry.onDrained;entry.onDrained=void 0,onDrained()}}function inFlightCountForQueue(taskQueue){return registry.get(taskQueue)?.count??0}function setQueueDrainCallback(taskQueue,cb){let entry=registry.get(taskQueue);entry&&(entry.onDrained=cb)}function forgetQueue(taskQueue){registry.delete(taskQueue)}var registry,init_in_flight=__esm({"dist/in-flight.js"(){"use strict";registry=new Map}});var init_runtime=__esm({"node_modules/deepagents/node_modules/langchain/dist/_virtual/_rolldown/runtime.js"(){}});var __defProp2,__exportAll,init_runtime2=__esm({"node_modules/@langchain/core/dist/_virtual/_rolldown/runtime.js"(){__defProp2=Object.defineProperty,__exportAll=(all,no_symbols)=>{let target={};for(var name2 in all)__defProp2(target,name2,{get:all[name2],enumerable:!0});return no_symbols||__defProp2(target,Symbol.toStringTag,{value:"Module"}),target}}});function createNamespace(path6){let symbol5=Symbol.for(path6);return{brand(Base,marker){let brandSymbol=marker?Symbol.for(`${path6}.${marker}`):symbol5;class _Branded extends Base{[brandSymbol]=!0;constructor(...args){super(...args)}static isInstance(obj){return typeof obj=="object"&&obj!==null&&brandSymbol in obj&&obj[brandSymbol]===!0}}return Object.defineProperty(_Branded,"name",{value:Base.name}),_Branded},sub(childPath){return createNamespace(`${path6}.${childPath}`)},isInstance(obj){return typeof obj=="object"&&obj!==null&&symbol5 in obj&&obj[symbol5]===!0}}}var ns,init_namespace=__esm({"node_modules/@langchain/core/dist/utils/namespace.js"(){ns=createNamespace("langchain")}});function addLangChainErrorFields(error91,lc_error_code){return error91.lc_error_code=lc_error_code,error91.message=`${error91.message}
|
|
589
|
+
`,resp=await fetch(`${GITHUB_API}/repos/${entryState.githubOwner}/${entryState.githubRepo}/pulls`,{method:"POST",headers:this.githubHeaders(),body:JSON.stringify({title:`Stigmer agent changes (${shortSessionId})`,body:prBody,head:this.branchName,base:entry.baseBranch})});if(!resp.ok){let body=await resp.text();throw new Error(`GitHub API error (HTTP ${resp.status}): ${body}`)}let data=await resp.json();entryState.prCreated=!0,entryState.prUrl=data.html_url??"",entryState.prNumber=data.number??0,console.log(`[WriteBack] execution=${this.executionId} entry=${entryName} \u2014 PR #${entryState.prNumber} created: ${entryState.prUrl}`)}async findOpenPr(entryState){let head=`${entryState.githubOwner}:${this.branchName}`,resp=await fetch(`${GITHUB_API}/repos/${entryState.githubOwner}/${entryState.githubRepo}/pulls?head=${encodeURIComponent(head)}&state=open`,{headers:this.githubHeaders()});if(!resp.ok){let body=await resp.text();throw new Error(`GitHub API error listing PRs (HTTP ${resp.status}): ${body}`)}let pr=(await resp.json())[0];return pr?{url:pr.html_url??"",number:pr.number??0}:null}githubHeaders(){return{Authorization:`Bearer ${this.githubToken}`,Accept:"application/vnd.github+json","Content-Type":"application/json"}}async updateStatus(entryName,entryState,entry,exec2,prError){let summaryOutput=await exec2(`git diff --stat ${entry.baseBranch}...HEAD`).catch(()=>""),phase=entryState.prCreated?WorkspaceWriteBackPhase.WORKSPACE_WRITE_BACK_PR_CREATED:WorkspaceWriteBackPhase.WORKSPACE_WRITE_BACK_PUSHED,wb=create(WorkspaceWriteBackSchema,{workspaceEntryName:entryName,branchName:this.branchName,baseBranch:entry.baseBranch,commitSha:entryState.lastCommitSha,pullRequestUrl:entryState.prUrl,pullRequestNumber:entryState.prNumber,diffSummary:summaryOutput.trim(),phase,error:prError});this.statusWriter.addWriteBack(wb)}async withLock(entryName,fn){let next=(this.locks.get(entryName)??Promise.resolve()).then(fn,fn);this.locks.set(entryName,next),await next}}}});function statusProtoWriter(status){return{get currentStatus(){return status},forceNextUpdate:!1,clearForceFlag(){},addArtifact(artifact){status.artifacts.push(artifact)},addWriteBack(wb){let backs=status.workspaceWriteBacks,idx=backs.findIndex(b=>b.workspaceEntryName===wb.workspaceEntryName);idx>=0?backs[idx]=wb:backs.push(wb)}}}var init_execution_status_writer=__esm({"dist/shared/execution-status-writer.js"(){"use strict"}});function resolveRegistryBaseUrl(env=process.env){let override=env.STIGMER_CLOUD_API_URL;if(override)return normalizeEndpoint(override);let proxyEndpoint=env.STIGMER_PROXY_ENDPOINT;return proxyEndpoint?normalizeEndpoint(proxyEndpoint):normalizeEndpoint(env.STIGMER_BACKEND_ENDPOINT??DEFAULT_LOCAL_BACKEND)}function buildRegistryHeaders(env=process.env){let token=env.STIGMER_TOKEN??env.STIGMER_AUTH_TOKEN;return token?{Authorization:`Bearer ${token}`}:{}}function resolveModelRegistryUrl(env=process.env){return`${resolveRegistryBaseUrl(env)}/v1/proxy/model-registry`}var DEFAULT_LOCAL_BACKEND,init_registry_endpoint=__esm({"dist/shared/registry-endpoint.js"(){"use strict";init_config();DEFAULT_LOCAL_BACKEND="http://localhost:7234"}});function parsePricingTable(json5){if(!json5||typeof json5!="object")return[];let models=json5.models;return Array.isArray(models)?models.filter(m=>m.harness==="cursor"&&m.pricing!=null).map(m=>({model:m.id,displayName:m.displayName,costTier:m.costTier??"standard",inputPricePerMillion:m.pricing.inputPricePerMillion,outputPricePerMillion:m.pricing.outputPricePerMillion,cacheWritePricePerMillion:m.pricing.cacheWritePricePerMillion,cacheReadPricePerMillion:m.pricing.cacheReadPricePerMillion,speedVariants:parseVariants(m.pricingVariants)})):[]}function parseVariants(variants){if(!variants||typeof variants!="object")return;let out={};for(let[key,v]of Object.entries(variants))!v||typeof v!="object"||(out[key]={inputPricePerMillion:v.inputPricePerMillion,outputPricePerMillion:v.outputPricePerMillion,cacheWritePricePerMillion:v.cacheWritePricePerMillion,cacheReadPricePerMillion:v.cacheReadPricePerMillion});return Object.keys(out).length>0?out:void 0}async function fetchFromApi(){let res=await fetch(resolveModelRegistryUrl(),{headers:buildRegistryHeaders()});if(!res.ok)throw new Error(`Model registry fetch failed: ${res.status}`);let data=await res.json(),table=parsePricingTable(data);if(table.length===0)throw new Error("Model registry returned no cursor-harness models");return table}async function getPricingTable(){return cache&&Date.now()<cache.expiresAt?cache.data:inflightFetch||(inflightFetch=fetchFromApi().then(data=>(cache={data,expiresAt:Date.now()+CACHE_TTL_MS},data)).catch(err=>{console.warn(`Failed to fetch model registry from API, using default pricing: ${err}`);let fallback=[DEFAULT_PRICING];return cache={data:fallback,expiresAt:Date.now()+CACHE_TTL_MS},fallback}).finally(()=>{inflightFetch=null}),inflightFetch)}var CACHE_TTL_MS,DEFAULT_PRICING,cache,inflightFetch,init_model_pricing_data=__esm({"dist/activities/execute-cursor/model-pricing-data.js"(){"use strict";init_registry_endpoint();CACHE_TTL_MS=36e5,DEFAULT_PRICING={model:"unknown",displayName:"Unknown",costTier:"standard",inputPricePerMillion:1.25,outputPricePerMillion:6,cacheWritePricePerMillion:1.25,cacheReadPricePerMillion:.25},cache=null,inflightFetch=null}});function normalizeModelId(model){return model.replace(/-\d{8}(?:v\d+)?$/,"")}function stripSpeedSuffix(model){for(let suffix of SPEED_SUFFIXES)if(model.endsWith(suffix))return model.slice(0,-suffix.length);return null}function applyFastVariant(base,wireModel){let fast=base.speedVariants?.fast;return fast?{...base,model:wireModel,inputPricePerMillion:fast.inputPricePerMillion,outputPricePerMillion:fast.outputPricePerMillion,cacheWritePricePerMillion:fast.cacheWritePricePerMillion,cacheReadPricePerMillion:fast.cacheReadPricePerMillion}:null}async function ensureLoaded(){return initPromise||(initPromise=getPricingTable().then(table=>{pricingByModel=new Map(table.map(entry=>[entry.model,entry]))}),initPromise)}function getMap(){return pricingByModel||(console.warn("Model pricing accessed before ensureLoaded() \u2014 returning empty map"),new Map)}function resolveModelId(requestedModel){if(!requestedModel||requestedModel==="default")return"default";let map4=getMap();if(map4.has(requestedModel))return requestedModel;let normalized=normalizeModelId(requestedModel);return normalized!==requestedModel&&map4.has(normalized)?normalized:(console.warn(`Model "${requestedModel}" (normalized: "${normalized}") not in pricing registry (${map4.size} models), falling back to "default"`),"default")}function getCursorModelPricing(model){let map4=getMap(),exact=map4.get(model);if(exact)return exact;let speedBase=stripSpeedSuffix(model);if(speedBase){let baseEntry=map4.get(speedBase)??map4.get(normalizeModelId(speedBase));if(baseEntry){let fast=applyFastVariant(baseEntry,model);if(fast)return fast}}let normalized=normalizeModelId(model);if(normalized!==model){let byNormalized=map4.get(normalized);if(byNormalized)return byNormalized}return console.warn(`Pricing lookup miss for "${model}" (normalized: "${normalized}"), using DEFAULT_PRICING`),{...DEFAULT_PRICING,model}}function computeTurnCost(pricing,inputTokens,outputTokens,cacheWriteTokens,cacheReadTokens){return(Math.max(0,inputTokens-cacheReadTokens-cacheWriteTokens)*pricing.inputPricePerMillion+outputTokens*pricing.outputPricePerMillion+cacheWriteTokens*pricing.cacheWritePricePerMillion+cacheReadTokens*pricing.cacheReadPricePerMillion)/1e6}var SPEED_SUFFIXES,pricingByModel,initPromise,init_model_pricing=__esm({"dist/activities/execute-cursor/model-pricing.js"(){"use strict";init_model_pricing_data();SPEED_SUFFIXES=["-high-fast","-medium-fast","-low-fast","-fast"];pricingByModel=null,initPromise=null}});var EMPTY_SNAPSHOT,UsageAccumulator,init_usage_accumulator=__esm({"dist/activities/execute-cursor/usage-accumulator.js"(){"use strict";init_model_pricing();EMPTY_SNAPSHOT={inputTokens:0n,outputTokens:0n,cacheReadTokens:0n,cacheWriteTokens:0n,totalTokens:0n,turnCount:0,estimatedCostUsd:0,model:"",observedAt:""},UsageAccumulator=class{model;inputTokens=0;outputTokens=0;cacheReadTokens=0;cacheWriteTokens=0;turnCount=0;estimatedCostUsd=0;observedAt="";turnRecords=[];constructor(model){this.model=model}addTurn(usage){let input=usage.inputTokens??0,output=usage.outputTokens??0,cacheRead=usage.cacheReadTokens??0,cacheWrite=usage.cacheWriteTokens??0;this.inputTokens+=input,this.outputTokens+=output,this.cacheReadTokens+=cacheRead,this.cacheWriteTokens+=cacheWrite,this.turnCount++,this.observedAt=new Date().toISOString(),this.turnRecords.push({sequence:this.turnCount,inputTokens:input,outputTokens:output,cacheReadTokens:cacheRead,cacheWriteTokens:cacheWrite});let pricing=getCursorModelPricing(this.model);this.estimatedCostUsd+=computeTurnCost(pricing,input,output,cacheWrite,cacheRead)}get hasTurns(){return this.turnCount>0}get modelName(){return this.model}turns(){return this.turnRecords}snapshot(){return this.turnCount===0?EMPTY_SNAPSHOT:{inputTokens:BigInt(this.inputTokens),outputTokens:BigInt(this.outputTokens),cacheReadTokens:BigInt(this.cacheReadTokens),cacheWriteTokens:BigInt(this.cacheWriteTokens),totalTokens:BigInt(this.inputTokens+this.outputTokens),turnCount:this.turnCount,estimatedCostUsd:this.estimatedCostUsd,model:this.model,observedAt:this.observedAt}}}}});function activityStarted(){activeCount++,lastActivityAt=Date.now()}function activityFinished(){activeCount=Math.max(0,activeCount-1),lastActivityAt=Date.now()}var lastActivityAt,activeCount,init_idle_watchdog=__esm({"dist/idle-watchdog.js"(){"use strict";lastActivityAt=Date.now(),activeCount=0}});function normalizeActivityInput(arg0,arg1){return arg0!==null&&typeof arg0=="object"?{executionId:arg0.execution_id??"",threadId:arg0.thread_id??"",turnSeq:arg0.turn_seq??0}:{executionId:arg0??"",threadId:arg1??"",turnSeq:0}}var init_activity_input=__esm({"dist/shared/activity-input.js"(){"use strict"}});function matchesAny(text,patterns){let lower=text.toLowerCase();return patterns.some(p=>lower.includes(p))}function classifyText(text){return matchesAny(text,AUTH_PATTERNS)?{category:"auth",retryable:!1}:matchesAny(text,RATE_LIMIT_PATTERNS)?{category:"rate-limit",retryable:!0}:matchesAny(text,NETWORK_PATTERNS)?{category:"network",retryable:!0}:matchesAny(text,MODEL_PATTERNS)?{category:"model",retryable:!1}:{category:"unknown",retryable:!1}}function synthesizeError(opts){console.log(`[error-classifier] synthesizeError diagnostic: sdkError=${JSON.stringify(opts.sdkError)}, sdkResultFields=${JSON.stringify(opts.sdkResultFields)}, streamErrorMessage=${JSON.stringify(opts.streamErrorMessage)}, hasCapturedRejection=${!!opts.capturedRejection}, conversationErrorText=${JSON.stringify(opts.conversationErrorText)}, isResumedHandle=${opts.isResumedHandle}, model=${opts.fallbackContext.model}, mode=${opts.fallbackContext.mode}`);let classified=classifyFromSources(opts);return classified.category==="unknown"&&opts.isResumedHandle?{...classified,category:"agent-stale",retryable:!0}:classified}function classifyFromSources(opts){if(opts.sdkError){let{code,status,message}=opts.sdkError,text=[code,status!=null?String(status):void 0,message].filter(v=>typeof v=="string"&&v.length>0).join(" ");if(text.trim().length>0){let{category,retryable}=classifyText(text);return{category,message:message??text,retryable,source:"sdk"}}}if(opts.sdkResultFields&&!(opts.sdkResultFields==="Cursor run failed")){let{category,retryable}=classifyText(opts.sdkResultFields);return{category,message:opts.sdkResultFields,retryable,source:"sdk"}}if(opts.streamErrorMessage){let{category,retryable}=classifyText(opts.streamErrorMessage);return{category,message:opts.streamErrorMessage,retryable,source:"stream"}}if(opts.capturedRejection){let{category}=classifyText(`${opts.capturedRejection.code} ${opts.capturedRejection.message}`);return{category:category==="unknown"?"network":category,message:`[${opts.capturedRejection.code}] ${opts.capturedRejection.message}`,retryable:category!=="auth",source:"rejection"}}if(opts.conversationErrorText){let{category,retryable}=classifyText(opts.conversationErrorText);return{category,message:opts.conversationErrorText,retryable,source:"conversation"}}if(opts.messageCount===0&&opts.durationMs!=null&&opts.durationMs>=25e3&&opts.durationMs<=35e3&&!opts.isResumedHandle){let{model:model2,mode:mode2,agentId:agentId2}=opts.fallbackContext;return{category:"network",message:`Transport timeout (${opts.durationMs}ms, 0 messages received). Model=${model2}, mode=${mode2}, agentId=${agentId2}`,retryable:!0,source:"fallback"}}if(opts.isResumedHandle)return{category:"agent-stale",message:"Cursor run failed (no detail from SDK, resumed agent handle may be stale)",retryable:!0,source:"fallback"};let{model,mode,agentId}=opts.fallbackContext;return{category:"unknown",message:`Cursor run failed (no detail from SDK). Model=${model}, mode=${mode}, agentId=${agentId}`,retryable:!1,source:"fallback"}}function formatClassifiedError(err){return`${err.message} [category=${err.category}, source=${err.source}, retryable=${err.retryable}]`}function shouldRetryWithFreshAgent(err){return err.category==="agent-stale"||err.category==="network"}var AUTH_PATTERNS,RATE_LIMIT_PATTERNS,NETWORK_PATTERNS,MODEL_PATTERNS,init_error_classifier=__esm({"dist/activities/execute-cursor/error-classifier.js"(){"use strict";AUTH_PATTERNS=["unauthenticated","unauthorized","401","forbidden","permission_denied","invalid api key","not logged in"],RATE_LIMIT_PATTERNS=["resource_exhausted","rate limit","429","too many","usage limit"],NETWORK_PATTERNS=["unavailable","deadline_exceeded","503","504","timeout","econnrefused","econnreset","enotfound","network error","fetch failed","refused_stream"],MODEL_PATTERNS=["invalid model","model not found","model.*not available","unsupported model"]}});function startHeartbeat(intervalMs,getDetails,options){let stopped=!1,wasCancelled=!1,wasWorkerShutdown=!1,timer=setInterval(()=>{if(!stopped)try{import_activity2.Context.current().heartbeat(getDetails?.())}catch(err){err instanceof import_activity2.CancelledFailure&&(options?.shutdownSignal?.aborted?wasWorkerShutdown=!0:wasCancelled=!0,stopped=!0,clearInterval(timer))}},intervalMs);return{stop(){stopped=!0,clearInterval(timer)},get cancelled(){return wasCancelled},get workerShutdown(){return wasWorkerShutdown}}}var import_activity2,init_heartbeat=__esm({"dist/shared/heartbeat.js"(){"use strict";import_activity2=__toESM(require_lib4(),1)}});function createRunnerTokenCoordinator(options){let log=options.log??console,proxyTokenIsMinted=!1,refreshTimer=null,clearTimer=()=>{refreshTimer&&(clearTimeout(refreshTimer),refreshTimer=null)},scheduleRefresh=expiresInSeconds=>{clearTimer();let ttlSeconds=expiresInSeconds&&expiresInSeconds>0?expiresInSeconds:3600,delayMs=Math.max(5e3,Math.floor(ttlSeconds*.8*1e3));refreshTimer=setTimeout(()=>{refresh()},delayMs),refreshTimer.unref?.()},refresh=async()=>{let refreshed=await options.reMint();refreshed?(options.applyProxyToken(refreshed.token),scheduleRefresh(refreshed.expiresInSeconds),log.log("[runner-token] Proxy token refreshed")):(scheduleRefresh(6e4/1e3),log.warn("[runner-token] Proxy token refresh failed; will retry"))};return{adoptMintedToken(token,expiresInSeconds){proxyTokenIsMinted=!0,options.applyProxyToken(token),scheduleRefresh(expiresInSeconds)},onControlPlaneTokenChanged(token){!proxyTokenIsMinted&&token&&options.applyProxyToken(token)},isProxyTokenMinted:()=>proxyTokenIsMinted,stop:clearTimer}}var init_runner_token_coordinator=__esm({"dist/runner-token-coordinator.js"(){"use strict"}});function activityStartedOnQueue(taskQueue){let entry=registry.get(taskQueue)??{count:0};entry.count++,registry.set(taskQueue,entry)}function activityFinishedOnQueue(taskQueue){let entry=registry.get(taskQueue);if(entry&&(entry.count=Math.max(0,entry.count-1),entry.count===0&&entry.onDrained)){let onDrained=entry.onDrained;entry.onDrained=void 0,onDrained()}}function inFlightCountForQueue(taskQueue){return registry.get(taskQueue)?.count??0}function setQueueDrainCallback(taskQueue,cb){let entry=registry.get(taskQueue);entry&&(entry.onDrained=cb)}function forgetQueue(taskQueue){registry.delete(taskQueue)}var registry,init_in_flight=__esm({"dist/in-flight.js"(){"use strict";registry=new Map}});var init_runtime=__esm({"node_modules/deepagents/node_modules/langchain/dist/_virtual/_rolldown/runtime.js"(){}});var __defProp2,__exportAll,init_runtime2=__esm({"node_modules/@langchain/core/dist/_virtual/_rolldown/runtime.js"(){__defProp2=Object.defineProperty,__exportAll=(all,no_symbols)=>{let target={};for(var name2 in all)__defProp2(target,name2,{get:all[name2],enumerable:!0});return no_symbols||__defProp2(target,Symbol.toStringTag,{value:"Module"}),target}}});function createNamespace(path6){let symbol5=Symbol.for(path6);return{brand(Base,marker){let brandSymbol=marker?Symbol.for(`${path6}.${marker}`):symbol5;class _Branded extends Base{[brandSymbol]=!0;constructor(...args){super(...args)}static isInstance(obj){return typeof obj=="object"&&obj!==null&&brandSymbol in obj&&obj[brandSymbol]===!0}}return Object.defineProperty(_Branded,"name",{value:Base.name}),_Branded},sub(childPath){return createNamespace(`${path6}.${childPath}`)},isInstance(obj){return typeof obj=="object"&&obj!==null&&symbol5 in obj&&obj[symbol5]===!0}}}var ns,init_namespace=__esm({"node_modules/@langchain/core/dist/utils/namespace.js"(){ns=createNamespace("langchain")}});function addLangChainErrorFields(error91,lc_error_code){return error91.lc_error_code=lc_error_code,error91.message=`${error91.message}
|
|
590
590
|
|
|
591
591
|
Troubleshooting URL: https://docs.langchain.com/oss/javascript/langchain/errors/${lc_error_code}/
|
|
592
592
|
`,error91}var errors_exports,ns2,LangChainError,ModelAbortError,ContextOverflowError,init_errors=__esm({"node_modules/@langchain/core/dist/errors/index.js"(){init_runtime2();init_namespace();errors_exports=__exportAll({ContextOverflowError:()=>ContextOverflowError,LangChainError:()=>LangChainError,ModelAbortError:()=>ModelAbortError,addLangChainErrorFields:()=>addLangChainErrorFields,ns:()=>ns2});ns2=ns.sub("error"),LangChainError=class extends ns2.brand(Error){name="LangChainError";constructor(message){super(message),Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor)}},ModelAbortError=class extends ns2.brand(LangChainError,"model-abort"){name="ModelAbortError";partialOutput;constructor(message,partialOutput){super(message),this.partialOutput=partialOutput}},ContextOverflowError=class ContextOverflowError2 extends ns2.brand(LangChainError,"context-overflow"){name="ContextOverflowError";cause;constructor(message){super(message??"Input exceeded the model's context window.")}static fromError(obj){let error91=new ContextOverflowError2(obj.message);return error91.cause=obj,error91}}}});function isDataContentBlock(content_block){return typeof content_block=="object"&&content_block!==null&&"type"in content_block&&typeof content_block.type=="string"&&"source_type"in content_block&&(content_block.source_type==="url"||content_block.source_type==="base64"||content_block.source_type==="text"||content_block.source_type==="id")}function isURLContentBlock(content_block){return isDataContentBlock(content_block)&&content_block.source_type==="url"&&"url"in content_block&&typeof content_block.url=="string"}function isBase64ContentBlock(content_block){return isDataContentBlock(content_block)&&content_block.source_type==="base64"&&"data"in content_block&&typeof content_block.data=="string"}function isPlainTextContentBlock(content_block){return isDataContentBlock(content_block)&&content_block.source_type==="text"&&"text"in content_block&&typeof content_block.text=="string"}function isIDContentBlock(content_block){return isDataContentBlock(content_block)&&content_block.source_type==="id"&&"id"in content_block&&typeof content_block.id=="string"}function convertToOpenAIImageBlock(content_block){if(isDataContentBlock(content_block)){if(content_block.source_type==="url")return{type:"image_url",image_url:{url:content_block.url}};if(content_block.source_type==="base64"){if(!content_block.mime_type)throw new Error("mime_type key is required for base64 data.");return{type:"image_url",image_url:{url:`data:${content_block.mime_type};base64,${content_block.data}`}}}}throw new Error("Unsupported source type. Only 'url' and 'base64' are supported.")}function parseMimeType(mime_type){let parts=mime_type.split(";")[0].split("/");if(parts.length!==2)throw new Error(`Invalid mime type: "${mime_type}" - does not match type/subtype format.`);let type3=parts[0].trim(),subtype=parts[1].trim();if(type3===""||subtype==="")throw new Error(`Invalid mime type: "${mime_type}" - type or subtype is empty.`);let parameters={};for(let parameterKvp of mime_type.split(";").slice(1)){let parameterParts=parameterKvp.split("=");if(parameterParts.length!==2)throw new Error(`Invalid parameter syntax in mime type: "${mime_type}".`);let key=parameterParts[0].trim(),value=parameterParts[1].trim();if(key==="")throw new Error(`Invalid parameter syntax in mime type: "${mime_type}".`);parameters[key]=value}return{type:type3,subtype,parameters}}function parseBase64DataUrl({dataUrl:data_url,asTypedArray=!1}){let formatMatch=data_url.match(/^data:(\w+\/\w+);base64,([A-Za-z0-9+/]+=*)$/),mime_type;if(formatMatch){mime_type=formatMatch[1].toLowerCase();let data=asTypedArray?Uint8Array.from(atob(formatMatch[2]),c=>c.charCodeAt(0)):formatMatch[2];return{mime_type,data}}}function convertToProviderContentBlock(block,converter){if(block.type==="text"){if(!converter.fromStandardTextBlock)throw new Error(`Converter for ${converter.providerName} does not implement \`fromStandardTextBlock\` method.`);return converter.fromStandardTextBlock(block)}if(block.type==="image"){if(!converter.fromStandardImageBlock)throw new Error(`Converter for ${converter.providerName} does not implement \`fromStandardImageBlock\` method.`);return converter.fromStandardImageBlock(block)}if(block.type==="audio"){if(!converter.fromStandardAudioBlock)throw new Error(`Converter for ${converter.providerName} does not implement \`fromStandardAudioBlock\` method.`);return converter.fromStandardAudioBlock(block)}if(block.type==="file"){if(!converter.fromStandardFileBlock)throw new Error(`Converter for ${converter.providerName} does not implement \`fromStandardFileBlock\` method.`);return converter.fromStandardFileBlock(block)}throw new Error(`Unable to convert content block type '${block.type}' to provider-specific format: not recognized.`)}var init_data=__esm({"node_modules/@langchain/core/dist/messages/content/data.js"(){}});function snakeCase(key){return key.replace(UPPER_TO_WORD_BOUNDARY,"$1_$2").replace(LOWER_TO_UPPER_BOUNDARY,"$1_$2").replace(SEPARATORS,"_").toLowerCase()}function camelCase(key){let trimmed=key.trim();return/[-_\s]/.test(trimmed)?trimmed.replace(SEPARATORS,"_").toLowerCase().replace(/_+([a-z0-9])/g,(_,char)=>char.toUpperCase()):trimmed}function keyToJson(key,map4){return map4?.[key]||snakeCase(key)}function keyFromJson(key,map4){return map4?.[key]||camelCase(key)}function mapKeys(fields,mapper,map4){let mapped={};for(let key in fields)Object.hasOwn(fields,key)&&(mapped[mapper(key,map4)]=fields[key]);return mapped}var UPPER_TO_WORD_BOUNDARY,LOWER_TO_UPPER_BOUNDARY,SEPARATORS,init_map_keys=__esm({"node_modules/@langchain/core/dist/load/map_keys.js"(){UPPER_TO_WORD_BOUNDARY=/([A-Z]+)([A-Z][a-z0-9]+)/g,LOWER_TO_UPPER_BOUNDARY=/([a-z0-9])([A-Z])/g,SEPARATORS=/[-_\s]+/g}});function needsEscaping(obj){return"lc"in obj||Object.keys(obj).length===1&&"__lc_escaped__"in obj}function escapeObject(obj){return{[LC_ESCAPED_KEY]:obj}}function isEscapedObject(obj){return Object.keys(obj).length===1&&"__lc_escaped__"in obj}function isSerializableLike(obj){return obj!==null&&typeof obj=="object"&&"lc_serializable"in obj&&typeof obj.toJSON=="function"}function createNotImplemented(obj){let id;return obj!==null&&typeof obj=="object"?"lc_id"in obj&&Array.isArray(obj.lc_id)?id=obj.lc_id:id=[obj.constructor?.name??"Object"]:id=[typeof obj],{lc:1,type:"not_implemented",id}}function escapeIfNeeded(value,pathSet=new WeakSet){if(value!==null&&typeof value=="object"&&!Array.isArray(value)){if(pathSet.has(value))return createNotImplemented(value);if(isSerializableLike(value))return value;pathSet.add(value);let record3=value;if(needsEscaping(record3))return pathSet.delete(value),escapeObject(record3);let result={};for(let[key,val]of Object.entries(record3))result[key]=escapeIfNeeded(val,pathSet);return pathSet.delete(value),result}return Array.isArray(value)?value.map(item=>escapeIfNeeded(item,pathSet)):value}function unescapeValue(obj){if(obj!==null&&typeof obj=="object"&&!Array.isArray(obj)){let record3=obj;if(isEscapedObject(record3))return record3[LC_ESCAPED_KEY];let result={};for(let[key,value]of Object.entries(record3))result[key]=unescapeValue(value);return result}return Array.isArray(obj)?obj.map(item=>unescapeValue(item)):obj}var LC_ESCAPED_KEY,init_validation=__esm({"node_modules/@langchain/core/dist/load/validation.js"(){LC_ESCAPED_KEY="__lc_escaped__"}});function shallowCopy(obj){return Array.isArray(obj)?[...obj]:{...obj}}function replaceSecrets(root,secretsMap){let result=shallowCopy(root);for(let[path6,secretId]of Object.entries(secretsMap)){let[last,...partsReverse]=path6.split(".").reverse(),current=result;for(let part of partsReverse.reverse()){if(current[part]===void 0)break;current[part]=shallowCopy(current[part]),current=current[part]}current[last]!==void 0&&(current[last]={lc:1,type:"secret",id:[secretId]})}return result}function get_lc_unique_name(serializableClass){let parentClass=Object.getPrototypeOf(serializableClass);return typeof serializableClass.lc_name=="function"&&(typeof parentClass.lc_name!="function"||serializableClass.lc_name()!==parentClass.lc_name())?serializableClass.lc_name():serializableClass.name}var serializable_exports,Serializable,init_serializable=__esm({"node_modules/@langchain/core/dist/load/serializable.js"(){init_runtime2();init_map_keys();init_validation();serializable_exports=__exportAll({Serializable:()=>Serializable,get_lc_unique_name:()=>get_lc_unique_name});Serializable=class Serializable2{lc_serializable=!1;lc_kwargs;static lc_name(){return this.name}get lc_id(){return[...this.lc_namespace,get_lc_unique_name(this.constructor)]}get lc_secrets(){}get lc_attributes(){}get lc_aliases(){}get lc_serializable_keys(){}constructor(kwargs,..._args){this.lc_serializable_keys!==void 0?this.lc_kwargs=Object.fromEntries(Object.entries(kwargs||{}).filter(([key])=>this.lc_serializable_keys?.includes(key))):this.lc_kwargs=kwargs??{}}toJSON(){if(!this.lc_serializable)return this.toJSONNotImplemented();if(this.lc_kwargs instanceof Serializable2||typeof this.lc_kwargs!="object"||Array.isArray(this.lc_kwargs))return this.toJSONNotImplemented();let aliases={},secrets={},kwargs=Object.keys(this.lc_kwargs).reduce((acc,key)=>(acc[key]=key in this?this[key]:this.lc_kwargs[key],acc),{});for(let current=Object.getPrototypeOf(this);current;current=Object.getPrototypeOf(current))Object.assign(aliases,Reflect.get(current,"lc_aliases",this)),Object.assign(secrets,Reflect.get(current,"lc_secrets",this)),Object.assign(kwargs,Reflect.get(current,"lc_attributes",this));Object.keys(secrets).forEach(keyPath=>{let read=this,write=kwargs,[last,...partsReverse]=keyPath.split(".").reverse();for(let key of partsReverse.reverse()){if(!(key in read)||read[key]===void 0)return;(!(key in write)||write[key]===void 0)&&(typeof read[key]=="object"&&read[key]!=null?write[key]={}:Array.isArray(read[key])&&(write[key]=[])),read=read[key],write=write[key]}last in read&&read[last]!==void 0&&(write[last]=write[last]||read[last])});let escapedKwargs={},pathSet=new WeakSet;pathSet.add(this);for(let[key,value]of Object.entries(kwargs))escapedKwargs[key]=escapeIfNeeded(value,pathSet);let processedKwargs=mapKeys(Object.keys(secrets).length?replaceSecrets(escapedKwargs,secrets):escapedKwargs,keyToJson,aliases);return{lc:1,type:"constructor",id:this.lc_id,kwargs:processedKwargs}}toJSONNotImplemented(){return{lc:1,type:"not_implemented",id:this.lc_id}}}}});function _isContentBlock(block,type3){return _isObject(block)&&block.type===type3}function _isObject(value){return typeof value=="object"&&value!==null}function _isArray(value){return Array.isArray(value)}function _isString(value){return typeof value=="string"}function _isNumber(value){return typeof value=="number"}function _isBytesArray(value){return value instanceof Uint8Array}function safeParseJson(value){try{return JSON.parse(value)}catch{return}}var iife,init_utils5=__esm({"node_modules/@langchain/core/dist/messages/block_translators/utils.js"(){iife=fn=>fn()}});function convertAnthropicAnnotation(citation){if(citation.type==="char_location"&&_isString(citation.document_title)&&_isNumber(citation.start_char_index)&&_isNumber(citation.end_char_index)&&_isString(citation.cited_text)){let{document_title,start_char_index,end_char_index,cited_text,...rest}=citation;return{...rest,type:"citation",source:"char",title:document_title??void 0,startIndex:start_char_index,endIndex:end_char_index,citedText:cited_text}}if(citation.type==="page_location"&&_isString(citation.document_title)&&_isNumber(citation.start_page_number)&&_isNumber(citation.end_page_number)&&_isString(citation.cited_text)){let{document_title,start_page_number,end_page_number,cited_text,...rest}=citation;return{...rest,type:"citation",source:"page",title:document_title??void 0,startIndex:start_page_number,endIndex:end_page_number,citedText:cited_text}}if(citation.type==="content_block_location"&&_isString(citation.document_title)&&_isNumber(citation.start_block_index)&&_isNumber(citation.end_block_index)&&_isString(citation.cited_text)){let{document_title,start_block_index,end_block_index,cited_text,...rest}=citation;return{...rest,type:"citation",source:"block",title:document_title??void 0,startIndex:start_block_index,endIndex:end_block_index,citedText:cited_text}}if(citation.type==="web_search_result_location"&&_isString(citation.url)&&_isString(citation.title)&&_isString(citation.encrypted_index)&&_isString(citation.cited_text)){let{url:url3,title,encrypted_index,cited_text,...rest}=citation;return{...rest,type:"citation",source:"url",url:url3,title,startIndex:Number(encrypted_index),endIndex:Number(encrypted_index),citedText:cited_text}}if(citation.type==="search_result_location"&&_isString(citation.source)&&_isString(citation.title)&&_isNumber(citation.start_block_index)&&_isNumber(citation.end_block_index)&&_isString(citation.cited_text)){let{source,title,start_block_index,end_block_index,cited_text,...rest}=citation;return{...rest,type:"citation",source:"search",url:source,title:title??void 0,startIndex:start_block_index,endIndex:end_block_index,citedText:cited_text}}}function convertToV1FromAnthropicContentBlock(block){if(_isContentBlock(block,"document")&&_isObject(block.source)&&"type"in block.source){if(block.source.type==="base64"&&_isString(block.source.media_type)&&_isString(block.source.data))return{type:"file",mimeType:block.source.media_type,data:block.source.data};if(block.source.type==="url"&&_isString(block.source.url))return{type:"file",url:block.source.url};if(block.source.type==="file"&&_isString(block.source.file_id))return{type:"file",fileId:block.source.file_id};if(block.source.type==="text"&&_isString(block.source.data))return{type:"file",mimeType:String(block.source.media_type??"text/plain"),data:block.source.data}}else if(_isContentBlock(block,"image")&&_isObject(block.source)&&"type"in block.source){if(block.source.type==="base64"&&_isString(block.source.media_type)&&_isString(block.source.data))return{type:"image",mimeType:block.source.media_type,data:block.source.data};if(block.source.type==="url"&&_isString(block.source.url))return{type:"image",url:block.source.url};if(block.source.type==="file"&&_isString(block.source.file_id))return{type:"image",fileId:block.source.file_id}}}function convertToV1FromAnthropicInput(content){function*iterateContent(){for(let block of content){let stdBlock=convertToV1FromAnthropicContentBlock(block);stdBlock?yield stdBlock:yield block}}return Array.from(iterateContent())}function convertToV1FromAnthropicMessage(message){function*iterateContent(){let content=typeof message.content=="string"?[{type:"text",text:message.content}]:message.content;for(let block of content){if(_isContentBlock(block,"text")&&_isString(block.text)){let{text,citations,...rest}=block;if(_isArray(citations)&&citations.length){let _citations=citations.reduce((acc,item)=>{let citation=convertAnthropicAnnotation(item);return citation?[...acc,citation]:acc},[]);yield{...rest,type:"text",text,annotations:_citations};continue}else{yield{...rest,type:"text",text};continue}}else if(_isContentBlock(block,"thinking")&&_isString(block.thinking)){let{thinking,signature,...rest}=block;yield{...rest,type:"reasoning",reasoning:thinking,signature};continue}else if(_isContentBlock(block,"redacted_thinking")){yield{type:"non_standard",value:block};continue}else if(_isContentBlock(block,"tool_use")&&_isString(block.name)&&_isString(block.id)){yield{type:"tool_call",id:block.id,name:block.name,args:block.input};continue}else if(_isContentBlock(block,"input_json_delta")){if(_isAIMessageChunk(message)&&message.tool_call_chunks?.length){let tool_call_chunk=message.tool_call_chunks[0];yield{type:"tool_call_chunk",id:tool_call_chunk.id,name:tool_call_chunk.name,args:tool_call_chunk.args,index:tool_call_chunk.index};continue}}else if(_isContentBlock(block,"server_tool_use")&&_isString(block.name)&&_isString(block.id)){let{name:name2,id}=block;if(name2==="web_search"){yield{id,type:"server_tool_call",name:"web_search",args:{query:iife(()=>{if(typeof block.input=="string")return block.input;if(_isObject(block.input)&&_isString(block.input.query))return block.input.query;if(_isString(block.partial_json)){let json5=safeParseJson(block.partial_json);if(json5?.query)return json5.query}return""})}};continue}else if(block.name==="code_execution"){yield{id,type:"server_tool_call",name:"code_execution",args:{code:iife(()=>{if(typeof block.input=="string")return block.input;if(_isObject(block.input)&&_isString(block.input.code))return block.input.code;if(_isString(block.partial_json)){let json5=safeParseJson(block.partial_json);if(json5?.code)return json5.code}return""})}};continue}}else if(_isContentBlock(block,"web_search_tool_result")&&_isString(block.tool_use_id)&&_isArray(block.content)){let{content:content2,tool_use_id}=block;yield{type:"server_tool_call_result",name:"web_search",toolCallId:tool_use_id,status:"success",output:{urls:content2.reduce((acc,content3)=>_isContentBlock(content3,"web_search_result")?[...acc,content3.url]:acc,[])}};continue}else if(_isContentBlock(block,"code_execution_tool_result")&&_isString(block.tool_use_id)&&_isObject(block.content)){yield{type:"server_tool_call_result",name:"code_execution",toolCallId:block.tool_use_id,status:"success",output:block.content};continue}else if(_isContentBlock(block,"mcp_tool_use")){yield{id:block.id,type:"server_tool_call",name:"mcp_tool_use",args:block.input};continue}else if(_isContentBlock(block,"mcp_tool_result")&&_isString(block.tool_use_id)&&_isObject(block.content)){yield{type:"server_tool_call_result",name:"mcp_tool_use",toolCallId:block.tool_use_id,status:"success",output:block.content};continue}else if(_isContentBlock(block,"container_upload")){yield{type:"server_tool_call",name:"container_upload",args:block.input};continue}else if(_isContentBlock(block,"search_result")){yield{id:block.id,type:"non_standard",value:block};continue}else if(_isContentBlock(block,"tool_result")){yield{id:block.id,type:"non_standard",value:block};continue}else{let stdBlock=convertToV1FromAnthropicContentBlock(block);if(stdBlock){yield stdBlock;continue}}yield{type:"non_standard",value:block}}}return Array.from(iterateContent())}function _isAIMessageChunk(message){return typeof message?._getType=="function"&&typeof message.concat=="function"&&message._getType()==="ai"}var ChatAnthropicTranslator,init_anthropic=__esm({"node_modules/@langchain/core/dist/messages/block_translators/anthropic.js"(){init_utils5();ChatAnthropicTranslator={translateContent:convertToV1FromAnthropicMessage,translateContentChunk:convertToV1FromAnthropicMessage}}});function convertToV1FromDataContentBlock(block){return isURLContentBlock(block)?{type:block.type,mimeType:block.mime_type,url:block.url,metadata:block.metadata}:isBase64ContentBlock(block)?{type:block.type,mimeType:block.mime_type??"application/octet-stream",data:block.data,metadata:block.metadata}:isIDContentBlock(block)?{type:block.type,mimeType:block.mime_type,fileId:block.id,metadata:block.metadata}:block}function convertToV1FromDataContent(content){return content.map(convertToV1FromDataContentBlock)}function isOpenAIDataBlock(block){return!!(_isContentBlock(block,"image_url")&&_isObject(block.image_url)||_isContentBlock(block,"input_audio")&&_isObject(block.input_audio)||_isContentBlock(block,"file")&&_isObject(block.file))}function convertToV1FromOpenAIDataBlock(block){if(_isContentBlock(block,"image_url")&&_isObject(block.image_url)&&_isString(block.image_url.url)){let parsed=parseBase64DataUrl({dataUrl:block.image_url.url});return parsed?{type:"image",mimeType:parsed.mime_type,data:parsed.data}:{type:"image",url:block.image_url.url}}else{if(_isContentBlock(block,"input_audio")&&_isObject(block.input_audio)&&_isString(block.input_audio.data)&&_isString(block.input_audio.format))return{type:"audio",data:block.input_audio.data,mimeType:`audio/${block.input_audio.format}`};if(_isContentBlock(block,"file")&&_isObject(block.file)&&_isString(block.file.data)){let parsed=parseBase64DataUrl({dataUrl:block.file.data});if(parsed)return{type:"file",data:parsed.data,mimeType:parsed.mime_type};if(_isString(block.file.file_id))return{type:"file",fileId:block.file.file_id}}}return block}var init_data2=__esm({"node_modules/@langchain/core/dist/messages/block_translators/data.js"(){init_data();init_utils5()}});function convertToV1FromChatCompletions(message){let blocks2=[];typeof message.content=="string"?message.content.length>0&&blocks2.push({type:"text",text:message.content}):blocks2.push(...convertToV1FromChatCompletionsInput(message.content));for(let toolCall of message.tool_calls??[])blocks2.push({type:"tool_call",id:toolCall.id,name:toolCall.name,args:toolCall.args});return blocks2}function convertToV1FromChatCompletionsChunk(message){let blocks2=[];typeof message.content=="string"?message.content.length>0&&blocks2.push({type:"text",text:message.content}):blocks2.push(...convertToV1FromChatCompletionsInput(message.content));for(let toolCall of message.tool_calls??[])blocks2.push({type:"tool_call",id:toolCall.id,name:toolCall.name,args:toolCall.args});return blocks2}function convertToV1FromChatCompletionsInput(blocks2){let convertedBlocks=[];for(let block of blocks2)isOpenAIDataBlock(block)?convertedBlocks.push(convertToV1FromOpenAIDataBlock(block)):convertedBlocks.push(block);return convertedBlocks}function convertResponsesAnnotation(annotation){if(annotation.type==="url_citation"){let{url:url3,title,start_index,end_index}=annotation;return{type:"citation",url:url3,title,startIndex:start_index,endIndex:end_index}}if(annotation.type==="file_citation"){let{file_id,filename,index:index2}=annotation;return{type:"citation",title:filename,startIndex:index2,endIndex:index2,fileId:file_id}}return annotation}function convertToV1FromResponses(message){function*iterateContent(){_isObject(message.additional_kwargs?.reasoning)&&_isArray(message.additional_kwargs.reasoning.summary)&&(yield{type:"reasoning",reasoning:message.additional_kwargs.reasoning.summary.reduce((acc,item)=>_isObject(item)&&_isString(item.text)?`${acc}${item.text}`:acc,"")});let content=typeof message.content=="string"?[{type:"text",text:message.content}]:message.content;for(let block of content)if(_isContentBlock(block,"text")){let{text,annotations,phase,extras:existingExtras,...rest}=block,extras=_isObject(existingExtras)?{...existingExtras}:{};_isString(phase)&&(extras.phase=phase);let extrasSpread=Object.keys(extras).length>0?{extras}:{};Array.isArray(annotations)?yield{...rest,...extrasSpread,type:"text",text:String(text),annotations:annotations.map(convertResponsesAnnotation)}:yield{...rest,...extrasSpread,type:"text",text:String(text)}}for(let toolCall of message.tool_calls??[])yield{type:"tool_call",id:toolCall.id,name:toolCall.name,args:toolCall.args};if(_isObject(message.additional_kwargs)&&_isArray(message.additional_kwargs.tool_outputs))for(let toolOutput of message.additional_kwargs.tool_outputs){if(_isContentBlock(toolOutput,"web_search_call")){let webSearchArgs={};if(_isObject(toolOutput.action)&&_isString(toolOutput.action.query)&&(webSearchArgs.query=toolOutput.action.query),yield{id:toolOutput.id,type:"server_tool_call",name:"web_search",args:webSearchArgs},toolOutput.status==="completed"||toolOutput.status==="failed"){let output={};_isObject(toolOutput.action)&&(output.action=toolOutput.action),yield{type:"server_tool_call_result",toolCallId:_isString(toolOutput.id)?toolOutput.id:"",status:toolOutput.status==="completed"?"success":"error",output}}continue}else if(_isContentBlock(toolOutput,"file_search_call")){yield{id:toolOutput.id,type:"server_tool_call",name:"file_search",args:{queries:_isArray(toolOutput.queries)?toolOutput.queries:[]}},(toolOutput.status==="completed"||toolOutput.status==="failed")&&(yield{type:"server_tool_call_result",toolCallId:_isString(toolOutput.id)?toolOutput.id:"",status:toolOutput.status==="completed"?"success":"error",output:_isArray(toolOutput.results)?{results:toolOutput.results}:{}});continue}else if(_isContentBlock(toolOutput,"computer_call")){yield{type:"non_standard",value:toolOutput};continue}else if(_isContentBlock(toolOutput,"code_interpreter_call")){if(_isString(toolOutput.code)&&(yield{id:toolOutput.id,type:"server_tool_call",name:"code_interpreter",args:{code:toolOutput.code}}),_isArray(toolOutput.outputs)){let returnCode=iife(()=>{if(toolOutput.status!=="in_progress"){if(toolOutput.status==="completed")return 0;if(toolOutput.status==="incomplete")return 127;if(toolOutput.status!=="interpreting"&&toolOutput.status==="failed")return 1}});for(let output of toolOutput.outputs)if(_isContentBlock(output,"logs")){yield{type:"server_tool_call_result",toolCallId:toolOutput.id??"",status:"success",output:{type:"code_interpreter_output",returnCode:returnCode??0,stderr:[0,void 0].includes(returnCode)?void 0:String(output.logs),stdout:[0,void 0].includes(returnCode)?String(output.logs):void 0}};continue}}continue}else if(_isContentBlock(toolOutput,"mcp_call")){yield{id:toolOutput.id,type:"server_tool_call",name:"mcp_call",args:toolOutput.input};continue}else if(_isContentBlock(toolOutput,"mcp_list_tools")){yield{id:toolOutput.id,type:"server_tool_call",name:"mcp_list_tools",args:toolOutput.input};continue}else if(_isContentBlock(toolOutput,"mcp_approval_request")){yield{type:"non_standard",value:toolOutput};continue}else if(_isContentBlock(toolOutput,"tool_search_call")){let toolSearchArgs={};_isObject(toolOutput.arguments)&&Object.assign(toolSearchArgs,toolOutput.arguments);let toolSearchCallExtras={};_isString(toolOutput.execution)&&(toolSearchCallExtras.execution=toolOutput.execution),_isString(toolOutput.status)&&(toolSearchCallExtras.status=toolOutput.status),_isString(toolOutput.call_id)&&(toolSearchCallExtras.call_id=toolOutput.call_id),yield{id:_isString(toolOutput.id)?toolOutput.id:"",type:"server_tool_call",name:"tool_search",args:toolSearchArgs,...Object.keys(toolSearchCallExtras).length>0?{extras:toolSearchCallExtras}:{}};continue}else if(_isContentBlock(toolOutput,"tool_search_output")){let toolSearchOutputExtras={name:"tool_search"};_isString(toolOutput.execution)&&(toolSearchOutputExtras.execution=toolOutput.execution),yield{type:"server_tool_call_result",toolCallId:_isString(toolOutput.id)?toolOutput.id:"",status:toolOutput.status==="completed"?"success":toolOutput.status==="failed"?"error":"success",output:{tools:_isArray(toolOutput.tools)?toolOutput.tools:[]},extras:toolSearchOutputExtras};continue}else if(_isContentBlock(toolOutput,"image_generation_call")){_isString(toolOutput.result)&&(yield{type:"image",mimeType:"image/png",data:toolOutput.result,id:_isString(toolOutput.id)?toolOutput.id:void 0,metadata:{status:_isString(toolOutput.status)?toolOutput.status:void 0}}),yield{type:"non_standard",value:toolOutput};continue}_isObject(toolOutput)&&(yield{type:"non_standard",value:toolOutput})}}return Array.from(iterateContent())}function convertToV1FromResponsesChunk(message){function*iterateContent(){yield*convertToV1FromResponses(message);for(let toolCallChunk of message.tool_call_chunks??[])yield{type:"tool_call_chunk",id:toolCallChunk.id,name:toolCallChunk.name,args:toolCallChunk.args}}return Array.from(iterateContent())}var ChatOpenAITranslator,init_openai=__esm({"node_modules/@langchain/core/dist/messages/block_translators/openai.js"(){init_utils5();init_data2();ChatOpenAITranslator={translateContent:message=>typeof message.content=="string"?convertToV1FromChatCompletions(message):convertToV1FromResponses(message),translateContentChunk:message=>typeof message.content=="string"?convertToV1FromChatCompletionsChunk(message):convertToV1FromResponsesChunk(message)}}});function isMessage3(message){return typeof message=="object"&&message!==null&&"type"in message&&"content"in message&&(typeof message.content=="string"||Array.isArray(message.content))}var init_message4=__esm({"node_modules/@langchain/core/dist/messages/message.js"(){}});function convertToFormattedString(message,format2="pretty"){return format2==="pretty"?convertToPrettyString(message):JSON.stringify(message)}function convertToPrettyString(message){let lines=[],title=` ${message.type.charAt(0).toUpperCase()+message.type.slice(1)} Message `,sepLen=Math.floor((80-title.length)/2),sep="=".repeat(sepLen),secondSep=title.length%2===0?sep:`${sep}=`;if(lines.push(`${sep}${title}${secondSep}`),message.type==="ai"){let aiMessage=message;if(aiMessage.tool_calls&&aiMessage.tool_calls.length>0){lines.push("Tool Calls:");for(let tc of aiMessage.tool_calls){lines.push(` ${tc.name} (${tc.id})`),lines.push(` Call ID: ${tc.id}`),lines.push(" Args:");for(let[key,value]of Object.entries(tc.args))lines.push(` ${key}: ${typeof value=="object"?JSON.stringify(value):value}`)}}}if(message.type==="tool"){let toolMessage=message;toolMessage.name&&lines.push(`Name: ${toolMessage.name}`)}return typeof message.content=="string"&&message.content.trim()&&(lines.length>1&&lines.push(""),lines.push(message.content)),lines.join(`
|
|
@@ -606,7 +606,7 @@ Please upgrade your packages to versions that set`,"message tool calls. e.g., `p
|
|
|
606
606
|
- "prompt-name" (for private prompts)
|
|
607
607
|
- "owner/prompt-name" (for prompts with explicit owner)
|
|
608
608
|
- "prompt-name:commit-hash" (with commit reference)
|
|
609
|
-
- "owner/prompt-name:commit-hash" (with owner and commit)`}function isLangSmithNotFoundError(error91){return error91!=null&&typeof error91=="object"&&"name"in error91&&error91?.name==="LangSmithNotFoundError"}function isLangSmithConflictError(error91){return error91!=null&&typeof error91=="object"&&"name"in error91&&error91?.name==="LangSmithConflictError"}async function raiseForStatus(response,context3,consumeOnSuccess){let errorBody;if(response.ok){consumeOnSuccess&&(errorBody=await response.text());return}if(response.status===403)try{(await response.json())?.error==="org_scoped_key_requires_workspace"&&(errorBody="This API key is org-scoped and requires workspace specification. Please provide 'workspaceId' parameter, or set LANGSMITH_WORKSPACE_ID environment variable.")}catch{let errorWithStatus=new Error(`${response.status} ${response.statusText}`);throw errorWithStatus.status=response?.status,errorWithStatus}if(errorBody===void 0)try{errorBody=await response.text()}catch{errorBody=""}let fullMessage=`Failed to ${context3}. Received status [${response.status}]: ${response.statusText}. Message: ${errorBody}`;if(response.status===404)throw new LangSmithNotFoundError(fullMessage);if(response.status===409)throw new LangSmithConflictError(fullMessage);let err=new Error(fullMessage);throw err.status=response.status,err}function isConflictingEndpointsError(err){return typeof err=="object"&&err!==null&&err.code===ERR_CONFLICTING_ENDPOINTS}var LangSmithConflictError,LangSmithNotFoundError,ERR_CONFLICTING_ENDPOINTS,ConflictingEndpointsError,init_error3=__esm({"node_modules/langsmith/dist/utils/error.js"(){LangSmithConflictError=class extends Error{constructor(message){super(message),Object.defineProperty(this,"status",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.name="LangSmithConflictError",this.status=409}},LangSmithNotFoundError=class extends Error{constructor(message){super(message),Object.defineProperty(this,"status",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.name="LangSmithNotFoundError",this.status=404}};ERR_CONFLICTING_ENDPOINTS="ERR_CONFLICTING_ENDPOINTS",ConflictingEndpointsError=class extends Error{constructor(){super("You cannot provide both LANGSMITH_ENDPOINT / LANGCHAIN_ENDPOINT and LANGSMITH_RUNS_ENDPOINTS."),Object.defineProperty(this,"code",{enumerable:!0,configurable:!0,writable:!0,value:ERR_CONFLICTING_ENDPOINTS}),this.name="ConflictingEndpointsError"}}}});function parseHubIdentifier(identifier){if(!identifier||identifier.split("/").length>2||identifier.startsWith("/")||identifier.endsWith("/")||identifier.split(":").length>2)throw new Error(getInvalidPromptIdentifierMsg(identifier));let[ownerNamePart,commitPart]=identifier.split(":"),commit=commitPart||"latest";if(ownerNamePart.includes("/")){let[owner,name2]=ownerNamePart.split("/",2);if(!owner||!name2)throw new Error(getInvalidPromptIdentifierMsg(identifier));return[owner,name2,commit]}else{if(!ownerNamePart)throw new Error(getInvalidPromptIdentifierMsg(identifier));return["-",ownerNamePart,commit]}}var init_prompts=__esm({"node_modules/langsmith/dist/utils/prompts.js"(){init_error3()}});function isBrowserLikeRuntime(){let env=getEnv2();return env==="browser"||env==="webworker"}function getProfileConfigPath(){let explicitPath=getEnvironmentVariable2("LANGSMITH_CONFIG_FILE");if(explicitPath)return explicitPath;let home=getEnvironmentVariable2("HOME")??getEnvironmentVariable2("USERPROFILE");if(home)return path2.join(home,".langsmith","config.json")}function resolveProfileName(config4){let envProfile=getEnvironmentVariable2("LANGSMITH_PROFILE");if(envProfile)return envProfile;if(config4.current_profile)return config4.current_profile;if(config4.profiles?.default)return"default"}function loadProfileState(){if(isBrowserLikeRuntime())return;let configPath=getProfileConfigPath();if(!(!configPath||!existsSync4(configPath)))try{let config4=JSON.parse(readFileSync3(configPath)),profileName=resolveProfileName(config4),profile=profileName?config4.profiles?.[profileName]:void 0;return!profileName||!profile?void 0:{configPath,config:config4,profileName,profile}}catch{return}}function hasValue(value){return value!=null&&value.trim()!==""}function trimConfigValue(value){return value?.trim().replace(/^["']|["']$/g,"")}function shouldRefreshProfileToken(profile){let oauth=profile.oauth;if(!oauth?.refresh_token)return!1;if(!oauth.access_token)return!0;if(!oauth.expires_at)return!1;let expiresAt=Date.parse(oauth.expires_at);return Number.isNaN(expiresAt)?!1:expiresAt<=Date.now()+TOKEN_REFRESH_LEEWAY_MS}function normalizeConfigUrl(apiUrl){let normalized=apiUrl;for(;normalized.endsWith("/");)normalized=normalized.slice(0,-1);let apiV1Suffix="/api/v1";return normalized.endsWith(apiV1Suffix)?normalized.slice(0,-apiV1Suffix.length):normalized}function applyTokenResponse(profile,token){profile.oauth??={},token.access_token&&(profile.oauth.access_token=token.access_token),token.refresh_token&&(profile.oauth.refresh_token=token.refresh_token),typeof token.expires_in=="number"&&token.expires_in>0&&(profile.oauth.expires_at=new Date(Date.now()+token.expires_in*1e3).toISOString())}function getAbortReason(signal){return signal.reason??new Error("The operation was aborted.")}async function waitForAbortSignal(promise3,signal){if(!signal)return promise3;if(signal.aborted)throw getAbortReason(signal);let cleanup2,abortPromise=new Promise((_,reject)=>{let onAbort=()=>{reject(getAbortReason(signal))};signal.addEventListener("abort",onAbort,{once:!0}),cleanup2=()=>{signal.removeEventListener("abort",onAbort)}});try{return await Promise.race([promise3,abortPromise])}finally{cleanup2?.()}}function loadProfileClientConfig(){let state=loadProfileState(),profile=state?.profile;if(!state||!profile)return{};let apiKey=trimConfigValue(profile.api_key),oauthAccessToken=trimConfigValue(profile.oauth?.access_token),oauthRefreshToken=trimConfigValue(profile.oauth?.refresh_token);return{apiUrl:profile.api_url,apiKey,workspaceId:profile.workspace_id,oauthAccessToken,oauthRefreshToken,profileAuth:apiKey||oauthAccessToken||oauthRefreshToken?new ProfileAuth(state):void 0}}function currentAuthHeaderFromProfile(profile){let oauthAccessToken=trimConfigValue(profile.oauth?.access_token);if(oauthAccessToken)return{name:"Authorization",value:`Bearer ${oauthAccessToken}`};if(!trimConfigValue(profile.oauth?.refresh_token))return authHeaderFromProfile(profile)}function authHeaderFromProfile(profile){let oauthAccessToken=trimConfigValue(profile.oauth?.access_token);if(oauthAccessToken)return{name:"Authorization",value:`Bearer ${oauthAccessToken}`};let apiKey=trimConfigValue(profile.api_key);if(apiKey)return{name:"x-api-key",value:apiKey}}var
|
|
609
|
+
- "owner/prompt-name:commit-hash" (with owner and commit)`}function isLangSmithNotFoundError(error91){return error91!=null&&typeof error91=="object"&&"name"in error91&&error91?.name==="LangSmithNotFoundError"}function isLangSmithConflictError(error91){return error91!=null&&typeof error91=="object"&&"name"in error91&&error91?.name==="LangSmithConflictError"}async function raiseForStatus(response,context3,consumeOnSuccess){let errorBody;if(response.ok){consumeOnSuccess&&(errorBody=await response.text());return}if(response.status===403)try{(await response.json())?.error==="org_scoped_key_requires_workspace"&&(errorBody="This API key is org-scoped and requires workspace specification. Please provide 'workspaceId' parameter, or set LANGSMITH_WORKSPACE_ID environment variable.")}catch{let errorWithStatus=new Error(`${response.status} ${response.statusText}`);throw errorWithStatus.status=response?.status,errorWithStatus}if(errorBody===void 0)try{errorBody=await response.text()}catch{errorBody=""}let fullMessage=`Failed to ${context3}. Received status [${response.status}]: ${response.statusText}. Message: ${errorBody}`;if(response.status===404)throw new LangSmithNotFoundError(fullMessage);if(response.status===409)throw new LangSmithConflictError(fullMessage);let err=new Error(fullMessage);throw err.status=response.status,err}function isConflictingEndpointsError(err){return typeof err=="object"&&err!==null&&err.code===ERR_CONFLICTING_ENDPOINTS}var LangSmithConflictError,LangSmithNotFoundError,ERR_CONFLICTING_ENDPOINTS,ConflictingEndpointsError,init_error3=__esm({"node_modules/langsmith/dist/utils/error.js"(){LangSmithConflictError=class extends Error{constructor(message){super(message),Object.defineProperty(this,"status",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.name="LangSmithConflictError",this.status=409}},LangSmithNotFoundError=class extends Error{constructor(message){super(message),Object.defineProperty(this,"status",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.name="LangSmithNotFoundError",this.status=404}};ERR_CONFLICTING_ENDPOINTS="ERR_CONFLICTING_ENDPOINTS",ConflictingEndpointsError=class extends Error{constructor(){super("You cannot provide both LANGSMITH_ENDPOINT / LANGCHAIN_ENDPOINT and LANGSMITH_RUNS_ENDPOINTS."),Object.defineProperty(this,"code",{enumerable:!0,configurable:!0,writable:!0,value:ERR_CONFLICTING_ENDPOINTS}),this.name="ConflictingEndpointsError"}}}});function parseHubIdentifier(identifier){if(!identifier||identifier.split("/").length>2||identifier.startsWith("/")||identifier.endsWith("/")||identifier.split(":").length>2)throw new Error(getInvalidPromptIdentifierMsg(identifier));let[ownerNamePart,commitPart]=identifier.split(":"),commit=commitPart||"latest";if(ownerNamePart.includes("/")){let[owner,name2]=ownerNamePart.split("/",2);if(!owner||!name2)throw new Error(getInvalidPromptIdentifierMsg(identifier));return[owner,name2,commit]}else{if(!ownerNamePart)throw new Error(getInvalidPromptIdentifierMsg(identifier));return["-",ownerNamePart,commit]}}var init_prompts=__esm({"node_modules/langsmith/dist/utils/prompts.js"(){init_error3()}});function isBrowserLikeRuntime(){let env=getEnv2();return env==="browser"||env==="webworker"}function getProfileConfigPath(){let explicitPath=getEnvironmentVariable2("LANGSMITH_CONFIG_FILE");if(explicitPath)return explicitPath;let home=getEnvironmentVariable2("HOME")??getEnvironmentVariable2("USERPROFILE");if(home)return path2.join(home,".langsmith","config.json")}function resolveProfileName(config4){let envProfile=getEnvironmentVariable2("LANGSMITH_PROFILE");if(envProfile)return envProfile;if(config4.current_profile)return config4.current_profile;if(config4.profiles?.default)return"default"}function loadProfileState(){if(isBrowserLikeRuntime())return;let configPath=getProfileConfigPath();if(!(!configPath||!existsSync4(configPath)))try{let config4=JSON.parse(readFileSync3(configPath)),profileName=resolveProfileName(config4),profile=profileName?config4.profiles?.[profileName]:void 0;return!profileName||!profile?void 0:{configPath,config:config4,profileName,profile}}catch{return}}function hasValue(value){return value!=null&&value.trim()!==""}function trimConfigValue(value){return value?.trim().replace(/^["']|["']$/g,"")}function shouldRefreshProfileToken(profile){let oauth=profile.oauth;if(!oauth?.refresh_token)return!1;if(!oauth.access_token)return!0;if(!oauth.expires_at)return!1;let expiresAt=Date.parse(oauth.expires_at);return Number.isNaN(expiresAt)?!1:expiresAt<=Date.now()+TOKEN_REFRESH_LEEWAY_MS}function normalizeConfigUrl(apiUrl){let normalized=apiUrl;for(;normalized.endsWith("/");)normalized=normalized.slice(0,-1);let apiV1Suffix="/api/v1";return normalized.endsWith(apiV1Suffix)?normalized.slice(0,-apiV1Suffix.length):normalized}function applyTokenResponse(profile,token){profile.oauth??={},token.access_token&&(profile.oauth.access_token=token.access_token),token.refresh_token&&(profile.oauth.refresh_token=token.refresh_token),typeof token.expires_in=="number"&&token.expires_in>0&&(profile.oauth.expires_at=new Date(Date.now()+token.expires_in*1e3).toISOString())}function getAbortReason(signal){return signal.reason??new Error("The operation was aborted.")}async function waitForAbortSignal(promise3,signal){if(!signal)return promise3;if(signal.aborted)throw getAbortReason(signal);let cleanup2,abortPromise=new Promise((_,reject)=>{let onAbort=()=>{reject(getAbortReason(signal))};signal.addEventListener("abort",onAbort,{once:!0}),cleanup2=()=>{signal.removeEventListener("abort",onAbort)}});try{return await Promise.race([promise3,abortPromise])}finally{cleanup2?.()}}function loadProfileClientConfig(){let state=loadProfileState(),profile=state?.profile;if(!state||!profile)return{};let apiKey=trimConfigValue(profile.api_key),oauthAccessToken=trimConfigValue(profile.oauth?.access_token),oauthRefreshToken=trimConfigValue(profile.oauth?.refresh_token);return{apiUrl:profile.api_url,apiKey,workspaceId:profile.workspace_id,oauthAccessToken,oauthRefreshToken,profileAuth:apiKey||oauthAccessToken||oauthRefreshToken?new ProfileAuth(state):void 0}}function currentAuthHeaderFromProfile(profile){let oauthAccessToken=trimConfigValue(profile.oauth?.access_token);if(oauthAccessToken)return{name:"Authorization",value:`Bearer ${oauthAccessToken}`};if(!trimConfigValue(profile.oauth?.refresh_token))return authHeaderFromProfile(profile)}function authHeaderFromProfile(profile){let oauthAccessToken=trimConfigValue(profile.oauth?.access_token);if(oauthAccessToken)return{name:"Authorization",value:`Bearer ${oauthAccessToken}`};let apiKey=trimConfigValue(profile.api_key);if(apiKey)return{name:"x-api-key",value:apiKey}}var DEFAULT_API_URL,OAUTH_CLIENT_ID,TOKEN_REFRESH_LEEWAY_MS,TOKEN_REFRESH_TIMEOUT_MS,ProfileAuth,init_profiles=__esm({"node_modules/langsmith/dist/utils/profiles.js"(){init_env2();init_fs();DEFAULT_API_URL="https://api.smith.langchain.com",OAUTH_CLIENT_ID="langsmith-cli",TOKEN_REFRESH_LEEWAY_MS=6e4,TOKEN_REFRESH_TIMEOUT_MS=1e4;ProfileAuth=class{constructor(state){Object.defineProperty(this,"state",{enumerable:!0,configurable:!0,writable:!0,value:state}),Object.defineProperty(this,"refreshPromise",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"managedAuthorizationValue",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.rememberProfileAuthHeader(this.currentAuthHeader())}currentAuthHeader(){let header=currentAuthHeaderFromProfile(this.state.profile);return this.rememberProfileAuthHeader(header),header}async getAuthHeader(fetchImplementation,signal){shouldRefreshProfileToken(this.state.profile)&&(this.refreshPromise||(this.refreshPromise=this.refreshOAuthToken(fetchImplementation).finally(()=>{this.refreshPromise=void 0})),await waitForAbortSignal(this.refreshPromise,signal));let header=authHeaderFromProfile(this.state.profile);return this.rememberProfileAuthHeader(header),header}isProfileAuthorizationHeader(value){return value===this.managedAuthorizationValue}async refreshOAuthToken(fetchImplementation){let refreshToken=this.state.profile.oauth?.refresh_token;if(!refreshToken)return;let refreshApiUrl=trimConfigValue(this.state.profile.api_url)??DEFAULT_API_URL;try{let body=new URLSearchParams({grant_type:"refresh_token",client_id:OAUTH_CLIENT_ID,refresh_token:refreshToken}),response=await fetchImplementation(`${normalizeConfigUrl(refreshApiUrl)}/oauth/token`,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:body.toString(),signal:AbortSignal.timeout(TOKEN_REFRESH_TIMEOUT_MS)});if(!response.ok)return;let token=await response.json();if(!token.access_token)return;applyTokenResponse(this.state.profile,token),this.state.config.profiles??={},this.state.config.profiles[this.state.profileName]=this.state.profile,await writeFileAtomic(this.state.configPath,`${JSON.stringify(this.state.config,null,2)}
|
|
610
610
|
`)}catch{return}}rememberProfileAuthHeader(header){this.managedAuthorizationValue=header?.name==="Authorization"?header.value:void 0}}}});function defaultOptions(){return{depthLimit:Number.MAX_SAFE_INTEGER,edgesLimit:Number.MAX_SAFE_INTEGER}}function encodeString(str3){return encoder.encode(str3)}function serializeWellKnownTypes(val){if(val&&typeof val=="object"&&val!==null){if(val instanceof Map)return Object.fromEntries(val);if(val instanceof Set)return Array.from(val);if(val instanceof Date)return val.toISOString();if(val instanceof RegExp)return val.toString();if(val instanceof Error)return{name:val.name,message:val.message}}else if(typeof val=="bigint")return val.toString();return val}function createDefaultReplacer(userReplacer){return function(key,val){if(userReplacer){let userResult=userReplacer.call(this,key,val);if(userResult!==void 0)return userResult}return serializeWellKnownTypes(val)}}function estimateSerializedSize(value){try{let estimateString=function(s){let n3=byteLen2(s);return n3>maxStringLen&&(maxStringLen=n3),n3+2},estimateByteArrayJson=function(byteLength){return byteLength===0?2:2+byteLength*4},isDropped=function(v){return v===void 0||typeof v=="function"||typeof v=="symbol"},estimateInArray=function(v){return v===void 0||typeof v=="function"||typeof v=="symbol"?4:estimate(v)},estimate=function(val){if(val===null)return 4;if(val===void 0)return 0;let t=typeof val;if(t==="boolean")return 5;if(t==="number")return Number.isFinite(val)?val.toString().length:4;if(t==="bigint")return val.toString().length+2;if(t==="string")return estimateString(val);if(t==="function"||t==="symbol")return 0;let obj=val;if(obj instanceof Date)return 26;if(obj instanceof RegExp)return byteLen2(obj.toString())+2;if(obj instanceof Error){let name2=obj.name??"",message=obj.message??"";return 22+byteLen2(name2)+byteLen2(message)}if(typeof Buffer<"u"&&obj instanceof Buffer)return 28+estimateByteArrayJson(obj.byteLength);if(ArrayBuffer.isView(obj)){if(obj instanceof DataView)return 2;let len=obj.length??0,perElement=obj instanceof Float32Array||obj instanceof Float64Array?30:12;return 2+len*perElement}if(obj instanceof ArrayBuffer)return 2;if(ancestors.has(obj))return 24;if(typeof obj.toJSON=="function"){let projected;try{projected=obj.toJSON("")}catch{return 16}ancestors.add(obj);let size3=estimate(projected);return ancestors.delete(obj),size3}ancestors.add(obj);let size2;if(Array.isArray(obj)){size2=2;let len=obj.length;for(let i2=0;i2<len;i2++)size2+=estimateInArray(obj[i2]),i2<len-1&&(size2+=1)}else if(obj instanceof Map){size2=2;let emitted=0;for(let[k,v]of obj){if(isDropped(v))continue;emitted>0&&(size2+=1);let keyStr=typeof k=="string"?k:String(k);size2+=byteLen2(keyStr)+3,size2+=estimate(v),emitted++}}else if(obj instanceof Set){size2=2;let emitted=0;for(let v of obj)emitted>0&&(size2+=1),size2+=estimateInArray(v),emitted++}else{size2=2;let emitted=0,keys=Object.keys(obj);for(let i2=0;i2<keys.length;i2++){let key=keys[i2],v=obj[key];isDropped(v)||(emitted>0&&(size2+=1),size2+=byteLen2(key)+3,size2+=estimate(v),emitted++)}}return ancestors.delete(obj),size2},ancestors=new Set,maxStringLen=0,byteLen2=typeof Buffer<"u"&&typeof Buffer.byteLength=="function"?s=>Buffer.byteLength(s,"utf8"):s=>s.length;return{size:estimate(value),maxStringLen}}catch{return{size:serialize2(value).length,maxStringLen:0}}}function serialize2(obj,errorContext,replacer,spacer,options){try{let str3=JSON.stringify(obj,createDefaultReplacer(replacer),spacer);return encodeString(str3)}catch(e){if(!e.message?.includes("Converting circular structure to JSON"))return console.warn(`[WARNING]: LangSmith received unserializable value.${errorContext?`
|
|
611
611
|
Context: ${errorContext}`:""}`),encodeString("[Unserializable]");getLangSmithEnvironmentVariable("SUPPRESS_CIRCULAR_JSON_WARNINGS")!=="true"&&console.warn(`[WARNING]: LangSmith received circular JSON. This will decrease tracer performance. ${errorContext?`
|
|
612
612
|
Context: ${errorContext}`:""}`),typeof options>"u"&&(options=defaultOptions()),decirc(obj,"",0,[],void 0,0,options);let res;try{replacerStack.length===0?res=JSON.stringify(obj,replacer,spacer):res=JSON.stringify(obj,replaceGetterValues(replacer),spacer)}catch{return encodeString("[unable to serialize, circular reference is too complex to analyze]")}finally{for(;arr.length!==0;){let part=arr.pop();part.length===4?Object.defineProperty(part[0],part[1],part[3]):part[0][part[1]]=part[2]}}return encodeString(res)}}function setReplace(replace,val,k,parent){var propertyDescriptor=Object.getOwnPropertyDescriptor(parent,k);propertyDescriptor.get!==void 0?propertyDescriptor.configurable?(Object.defineProperty(parent,k,{value:replace}),arr.push([parent,k,val,propertyDescriptor])):replacerStack.push([val,k,replace]):(parent[k]=replace,arr.push([parent,k,val]))}function decirc(val,k,edgeIndex,stack,parent,depth,options){depth+=1;var i2;if(typeof val=="object"&&val!==null){for(i2=0;i2<stack.length;i2++)if(stack[i2]===val){setReplace(CIRCULAR_REPLACE_NODE,val,k,parent);return}if(typeof options.depthLimit<"u"&&depth>options.depthLimit){setReplace(LIMIT_REPLACE_NODE,val,k,parent);return}if(typeof options.edgesLimit<"u"&&edgeIndex+1>options.edgesLimit){setReplace(LIMIT_REPLACE_NODE,val,k,parent);return}if(stack.push(val),Array.isArray(val))for(i2=0;i2<val.length;i2++)decirc(val[i2],i2,i2,stack,val,depth,options);else{val=serializeWellKnownTypes(val);var keys=Object.keys(val);for(i2=0;i2<keys.length;i2++){var key=keys[i2];decirc(val[key],key,i2,stack,val,depth,options)}}stack.pop()}}function replaceGetterValues(replacer){return replacer=typeof replacer<"u"?replacer:function(k,v){return v},function(key,val){if(replacerStack.length>0)for(var i2=0;i2<replacerStack.length;i2++){var part=replacerStack[i2];if(part[1]===key&&part[0]===val){val=part[2],replacerStack.splice(i2,1);break}}return replacer.call(this,key,val)}}var LIMIT_REPLACE_NODE,CIRCULAR_REPLACE_NODE,arr,replacerStack,encoder,init_fast_safe_stringify=__esm({"node_modules/langsmith/dist/utils/fast-safe-stringify/index.js"(){init_env2();LIMIT_REPLACE_NODE="[...]",CIRCULAR_REPLACE_NODE={result:"[Circular]"},arr=[],replacerStack=[],encoder=new TextEncoder}});var import_node_worker_threads,Worker2,WORKER_THREADS_AVAILABLE,init_worker_threads=__esm({"node_modules/langsmith/dist/utils/worker_threads.js"(){import_node_worker_threads=require("node:worker_threads"),Worker2=import_node_worker_threads.Worker,WORKER_THREADS_AVAILABLE=!0}});function getSharedSerializeWorker(){return sharedWorker===null&&(sharedWorker=new SerializeWorker),sharedWorker}function hasLargeString(value,threshold=LARGE_STRING_THRESHOLD,nodeBudget=NODE_BUDGET){if(value===null||typeof value!="object")return typeof value=="string"&&value.length>=threshold;let stack=[value],seen=new Set,visited=0;for(;stack.length>0;){if(visited++>=nodeBudget)return!1;let cur=stack.pop();if(cur==null)continue;let t=typeof cur;if(t==="string"){if(cur.length>=threshold)return!0;continue}if(t!=="object")continue;let obj=cur;if(seen.has(obj)||(seen.add(obj),obj instanceof Date||obj instanceof RegExp||obj instanceof Error||obj instanceof ArrayBuffer||ArrayBuffer.isView(obj)))continue;if(Array.isArray(obj)){for(let i2=obj.length-1;i2>=0;i2--)stack.push(obj[i2]);continue}if(obj instanceof Map){for(let[,v]of obj)stack.push(v);continue}if(obj instanceof Set){for(let v of obj)stack.push(v);continue}let keys=Object.keys(obj);for(let i2=keys.length-1;i2>=0;i2--)stack.push(obj[keys[i2]])}return!1}var WORKER_SOURCE,SerializeWorker,sharedWorker,LARGE_STRING_THRESHOLD,NODE_BUDGET,init_serialize_worker=__esm({"node_modules/langsmith/dist/utils/serialize_worker.js"(){init_worker_threads();WORKER_SOURCE=`
|
|
@@ -700,7 +700,7 @@ parentPort.on("message", (msg) => {
|
|
|
700
700
|
parentPort.postMessage({ id, error: String((e && e.message) || e) });
|
|
701
701
|
}
|
|
702
702
|
});
|
|
703
|
-
`,SerializeWorker=class{constructor(){Object.defineProperty(this,"worker",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"nextId",{enumerable:!0,configurable:!0,writable:!0,value:1}),Object.defineProperty(this,"pending",{enumerable:!0,configurable:!0,writable:!0,value:new Map}),Object.defineProperty(this,"disabled",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,"startPromise",{enumerable:!0,configurable:!0,writable:!0,value:null})}async ensureStarted(){if(this.disabled)return!1;if(this.worker!==null)return!0;if(this.startPromise!==null)return this.startPromise;this.startPromise=this._start();try{return await this.startPromise}finally{this.startPromise=null}}async _start(){if(!WORKER_THREADS_AVAILABLE||Worker2===null)return this.disabled=!0,!1;try{let worker=new Worker2(WORKER_SOURCE,{eval:!0});return worker.on("message",msg=>{let p=this.pending.get(msg.id);p&&(this.pending.delete(msg.id),msg.error?p.reject(new Error(msg.error)):msg.bytes&&typeof msg.length=="number"?p.resolve(new Uint8Array(msg.bytes,0,msg.length)):p.reject(new Error("worker returned malformed message")))}),worker.on("error",err=>{for(let[,p]of this.pending)p.reject(err);this.pending.clear(),this.disabled=!0,this.worker=null}),worker.on("exit",code=>{for(let[,p]of this.pending)p.reject(new Error(`worker exited with code ${code}`));this.pending.clear(),this.worker=null}),worker.unref(),this.worker=worker,!0}catch{return this.disabled=!0,!1}}async serialize(payload){if(!await this.ensureStarted())return null;let id=this.nextId++;return new Promise((resolve7,reject)=>{this.pending.set(id,{resolve:resolve7,reject});try{this.worker.postMessage({id,op:"serialize",payload})}catch(e){this.pending.delete(id),reject(e)}})}async terminate(){this.worker&&(await this.worker.terminate(),this.worker=null);for(let[,p]of this.pending)p.reject(new Error("worker terminated"));this.pending.clear()}},sharedWorker=null;LARGE_STRING_THRESHOLD=64*1024,NODE_BUDGET=2048}});function assertPullPublicPromptAllowed(promptIdentifier,dangerouslyPullPublicPrompt){let[owner]=parseHubIdentifier(promptIdentifier);if(owner!=="-"&&!dangerouslyPullPublicPrompt)throw new Error("Pulling a public prompt by owner/name is disabled by default because prompts may contain untrusted serialized LangChain objects. If you trust this prompt, set `dangerouslyPullPublicPrompt: true` to acknowledge the risk.")}function _ensureUTCTimestamp(ts){return typeof ts=="string"&&ts.length>0&&!ts.includes("Z")&&!ts.includes("+")&&!ts.includes("-",10)?ts+"Z":ts}function _normalizeRunTimestamps(run){return{...run,start_time:_ensureUTCTimestamp(run.start_time),end_time:_ensureUTCTimestamp(run.end_time)}}function mergeRuntimeEnvIntoRun(run,cachedEnvVars,omitTracedRuntimeInfo){if(omitTracedRuntimeInfo)return run;let runtimeEnv=getRuntimeEnvironment2(),envVars=cachedEnvVars??getLangSmithEnvVarsMetadata(),extra=run.extra??{},metadata=extra.metadata;return run.extra={...extra,runtime:{...runtimeEnv,...extra?.runtime},metadata:{...envVars,...envVars.revision_id||"revision_id"in run&&run.revision_id?{revision_id:("revision_id"in run?run.revision_id:void 0)??envVars.revision_id}:{},...metadata}},run}async function toArray(iterable){let result=[];for await(let item of iterable)result.push(item);return result}function trimQuotes(str3){if(str3!==void 0)return str3.trim().replace(/^"(.*)"$/,"$1").replace(/^'(.*)'$/,"$1")}function _formatFeedbackScore(score){return typeof score=="number"?Number(score.toFixed(4)):score}function isExampleCreate(input){return"dataset_id"in input||"dataset_name"in input}var getTracingSamplingRate,isLocalhost,handle429,DEFAULT_UNCOMPRESSED_BATCH_SIZE_LIMIT_BYTES,DEFAULT_MAX_SIZE_BYTES,SERVER_INFO_REQUEST_TIMEOUT_MS,DEFAULT_BATCH_SIZE_LIMIT,AutoBatchQueue,Client,init_client=__esm({"node_modules/langsmith/dist/client.js"(){init_src();init_translator();init_otel2();init_async_caller();init_messages();init_env2();init_dist();init_uuid2();init_warn();init_prompts();init_error3();init_prompt_cache();init_fs();init_fetch();init_profiles();init_fast_safe_stringify();init_serialize_worker();getTracingSamplingRate=configRate=>{let samplingRateStr=configRate?.toString()??getLangSmithEnvironmentVariable("TRACING_SAMPLING_RATE");if(samplingRateStr===void 0)return;let samplingRate=parseFloat(samplingRateStr);if(samplingRate<0||samplingRate>1)throw new Error(`LANGSMITH_TRACING_SAMPLING_RATE must be between 0 and 1 if set. Got: ${samplingRate}`);return samplingRate},isLocalhost=url3=>{let hostname4=url3.replace("http://","").replace("https://","").split("/")[0].split(":")[0];return hostname4==="localhost"||hostname4==="127.0.0.1"||hostname4==="::1"};handle429=async response=>{if(response?.status===429){let retryAfter=parseInt(response.headers.get("retry-after")??"10",10)*1e3;if(retryAfter>0)return await new Promise(resolve7=>setTimeout(resolve7,retryAfter)),!0}return!1};DEFAULT_UNCOMPRESSED_BATCH_SIZE_LIMIT_BYTES=24*1024*1024,DEFAULT_MAX_SIZE_BYTES=1024*1024*1024,SERVER_INFO_REQUEST_TIMEOUT_MS=1e4,DEFAULT_BATCH_SIZE_LIMIT=100,AutoBatchQueue=class{constructor(maxSizeBytes){Object.defineProperty(this,"items",{enumerable:!0,configurable:!0,writable:!0,value:[]}),Object.defineProperty(this,"sizeBytes",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"maxSizeBytes",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.maxSizeBytes=maxSizeBytes??DEFAULT_MAX_SIZE_BYTES}peek(){return this.items[0]}push(item){let itemPromiseResolve,itemPromise=new Promise(resolve7=>{itemPromiseResolve=resolve7}),size=estimateSerializedSize(item.item).size;return this.sizeBytes+size>this.maxSizeBytes&&this.items.length>0?(console.warn(`AutoBatchQueue size limit (${this.maxSizeBytes} bytes) exceeded. Dropping run with id: ${item.item.id}. Current queue size: ${this.sizeBytes} bytes, attempted addition: ${size} bytes.`),itemPromiseResolve(),itemPromise):(this.items.push({action:item.action,payload:item.item,otelContext:item.otelContext,apiKey:item.apiKey,apiUrl:item.apiUrl,itemPromiseResolve,itemPromise,size}),this.sizeBytes+=size,itemPromise)}pop({upToSizeBytes,upToSize}){if(upToSizeBytes<1)throw new Error("Number of bytes to pop off may not be less than 1.");let popped=[],poppedSizeBytes=0;for(;poppedSizeBytes+(this.peek()?.size??0)<upToSizeBytes&&this.items.length>0&&popped.length<upToSize;){let item=this.items.shift();item&&(popped.push(item),poppedSizeBytes+=item.size,this.sizeBytes-=item.size)}if(popped.length===0&&this.items.length>0){let item=this.items.shift();popped.push(item),poppedSizeBytes+=item.size,this.sizeBytes-=item.size}return[popped.map(it=>({action:it.action,item:it.payload,otelContext:it.otelContext,apiKey:it.apiKey,apiUrl:it.apiUrl,size:it.size})),()=>popped.forEach(it=>it.itemPromiseResolve())]}},Client=class _Client{get tracingMode(){return this._tracingMode}get _fetch(){let fetchImplementation=this.fetchImplementation||_getFetchImplementation(this.debug);return(async(input,init)=>{let authHeader,profileManagedAuthorization=this.getProfileManagedAuthorizationHeader(init);return this.apiKey!==void 0?authHeader={name:"x-api-key",value:`${this.apiKey}`}:this.hasExplicitAuthHeader(init,profileManagedAuthorization)||(authHeader=await this.profileAuth?.getAuthHeader(fetchImplementation,init?.signal)),fetchImplementation(input,this.applyCurrentAuthHeaders(init,authHeader,profileManagedAuthorization))})}getProfileManagedAuthorizationHeader(init){if(!init?.headers||!this.profileAuth)return;let authorization=new Headers(init.headers).get("Authorization");if(hasValue(authorization))return this.profileAuth.isProfileAuthorizationHeader(authorization??"")?authorization??void 0:void 0}isProfileManagedAuthorizationHeader(value,profileManagedAuthorization){return value===profileManagedAuthorization||this.profileAuth?.isProfileAuthorizationHeader(value)===!0}hasExplicitAuthHeader(init,profileManagedAuthorization){if(!init?.headers)return!1;let headers=new Headers(init.headers);if(hasValue(headers.get("x-api-key")))return!0;let authorization=headers.get("Authorization");return hasValue(authorization)?!this.isProfileManagedAuthorizationHeader(authorization??"",profileManagedAuthorization):!1}applyCurrentAuthHeaders(init,authHeader,profileManagedAuthorization){if(!authHeader)return init;let applyAuth=headers2=>{if(this.apiKey!==void 0&&authHeader.name==="x-api-key")return headers2.delete("Authorization"),headers2.has("x-api-key")||headers2.set("x-api-key",authHeader.value),headers2;if(authHeader.name==="Authorization"){if(hasValue(headers2.get("x-api-key")))return headers2;let authorization3=headers2.get("Authorization");return hasValue(authorization3)&&!this.isProfileManagedAuthorizationHeader(authorization3??"",profileManagedAuthorization)||headers2.set("Authorization",authHeader.value),headers2}let authorization2=headers2.get("Authorization");return hasValue(authorization2)&&!this.isProfileManagedAuthorizationHeader(authorization2??"",profileManagedAuthorization)||(hasValue(authorization2)&&headers2.delete("Authorization"),headers2.has("x-api-key")||headers2.set("x-api-key",authHeader.value)),headers2};if(!init)return{headers:{[authHeader.name]:authHeader.value}};if(init.headers instanceof Headers)return{...init,headers:applyAuth(new Headers(init.headers))};if(Array.isArray(init.headers))return{...init,headers:applyAuth(new Headers(init.headers))};let headers={...init.headers??{}},getHeaderKey=name2=>Object.keys(headers).find(key=>key.toLowerCase()===name2),getHeader=name2=>{let key=getHeaderKey(name2);return key?headers[key]:void 0},hasApiKey=hasValue(getHeader("x-api-key")),authorization=getHeader("authorization"),hasExplicitAuthorization=hasValue(authorization)&&!this.isProfileManagedAuthorizationHeader(authorization??"",profileManagedAuthorization);if(this.apiKey!==void 0&&authHeader.name==="x-api-key"){let authorizationKey=getHeaderKey("authorization");return authorizationKey&&delete headers[authorizationKey],hasApiKey||(headers["x-api-key"]=authHeader.value),{...init,headers}}if(authHeader.name==="Authorization"){if(!hasApiKey&&!hasExplicitAuthorization){let authorizationKey=getHeaderKey("authorization");authorizationKey&&authorizationKey!=="Authorization"&&delete headers[authorizationKey],headers.Authorization=authHeader.value}return{...init,headers}}if(!hasExplicitAuthorization){let authorizationKey=getHeaderKey("authorization");authorizationKey&&delete headers[authorizationKey],hasApiKey||(headers["x-api-key"]=authHeader.value)}return{...init,headers}}_trackDrain(promise3){this._pendingDrains.add(promise3),promise3.finally(()=>{this._pendingDrains.delete(promise3)})}async _serializeBody(payload,errorContext){if(this.manualFlushMode)return serialize2(payload,errorContext);if(!hasLargeString(payload))return serialize2(payload,errorContext);if(this._serializeWorker===void 0&&(this._serializeWorker=getSharedSerializeWorker()),this._serializeWorker===null)return serialize2(payload,errorContext);try{let bytes=await this._serializeWorker.serialize(payload);return bytes===null?(this._serializeWorker=null,serialize2(payload,errorContext)):bytes}catch{return serialize2(payload,errorContext)}}constructor(config4={}){Object.defineProperty(this,"apiKey",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"apiUrl",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"webUrl",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"workspaceId",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"caller",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"batchIngestCaller",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"timeout_ms",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_tenantId",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"hideInputs",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"hideOutputs",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"hideMetadata",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"omitTracedRuntimeInfo",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"tracingSampleRate",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"filteredPostUuids",{enumerable:!0,configurable:!0,writable:!0,value:new Set}),Object.defineProperty(this,"autoBatchTracing",{enumerable:!0,configurable:!0,writable:!0,value:!0}),Object.defineProperty(this,"autoBatchQueue",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"autoBatchTimeout",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"autoBatchAggregationDelayMs",{enumerable:!0,configurable:!0,writable:!0,value:250}),Object.defineProperty(this,"batchSizeBytesLimit",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"batchSizeLimit",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"fetchOptions",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"settings",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"blockOnRootRunFinalization",{enumerable:!0,configurable:!0,writable:!0,value:getEnvironmentVariable2("LANGSMITH_TRACING_BACKGROUND")==="false"}),Object.defineProperty(this,"traceBatchConcurrency",{enumerable:!0,configurable:!0,writable:!0,value:5}),Object.defineProperty(this,"_serverInfo",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_getServerInfoPromise",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"manualFlushMode",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,"_serializeWorker",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_pendingDrains",{enumerable:!0,configurable:!0,writable:!0,value:new Set}),Object.defineProperty(this,"langSmithToOTELTranslator",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_tracingMode",{enumerable:!0,configurable:!0,writable:!0,value:"langsmith"}),Object.defineProperty(this,"fetchImplementation",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"cachedLSEnvVarsForMetadata",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_promptCache",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"profileAuth",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"multipartStreamingDisabled",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,"_multipartDisabled",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,"_runCompressionDisabled",{enumerable:!0,configurable:!0,writable:!0,value:getLangSmithEnvironmentVariable("DISABLE_RUN_COMPRESSION")==="true"}),Object.defineProperty(this,"failedTracesDir",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"failedTracesMaxBytes",{enumerable:!0,configurable:!0,writable:!0,value:100*1024*1024}),Object.defineProperty(this,"_customHeaders",{enumerable:!0,configurable:!0,writable:!0,value:{}}),Object.defineProperty(this,"debug",{enumerable:!0,configurable:!0,writable:!0,value:getEnvironmentVariable2("LANGSMITH_DEBUG")==="true"});let defaultConfig=_Client.getDefaultClientConfig();this.tracingSampleRate=getTracingSamplingRate(config4.tracingSamplingRate),this.apiUrl=trimQuotes(config4.apiUrl??defaultConfig.apiUrl)??"",this.apiUrl.endsWith("/")&&(this.apiUrl=this.apiUrl.slice(0,-1));let configuredApiKey=trimQuotes(config4.apiKey??defaultConfig.apiKey);if(this.apiKey=hasValue(configuredApiKey)?configuredApiKey:void 0,this.profileAuth=this.apiKey!==void 0?void 0:defaultConfig.profileAuth,this.webUrl=trimQuotes(config4.webUrl??defaultConfig.webUrl),this.webUrl?.endsWith("/")&&(this.webUrl=this.webUrl.slice(0,-1)),this.workspaceId=trimQuotes(config4.workspaceId??defaultConfig.workspaceId),this.timeout_ms=config4.timeout_ms??9e4,this.caller=new AsyncCaller({...config4.callerOptions??{},maxRetries:4,debug:config4.debug??this.debug}),this.traceBatchConcurrency=config4.traceBatchConcurrency??this.traceBatchConcurrency,this.traceBatchConcurrency<1)throw new Error("Trace batch concurrency must be positive.");this.debug=config4.debug??this.debug,this.fetchImplementation=config4.fetchImplementation,this.failedTracesDir=getLangSmithEnvironmentVariable("FAILED_TRACES_DIR")||void 0;let failedTracesMb=getLangSmithEnvironmentVariable("FAILED_TRACES_MAX_MB");if(failedTracesMb){let n3=parseInt(failedTracesMb,10);Number.isFinite(n3)&&n3>0&&(this.failedTracesMaxBytes=n3*1024*1024)}let maxMemory=config4.maxIngestMemoryBytes??DEFAULT_MAX_SIZE_BYTES;this.batchIngestCaller=new AsyncCaller({maxRetries:4,maxConcurrency:this.traceBatchConcurrency,maxQueueSizeBytes:maxMemory,...config4.callerOptions??{},onFailedResponseHook:handle429,debug:config4.debug??this.debug}),this.hideInputs=config4.hideInputs??config4.anonymizer??defaultConfig.hideInputs,this.hideOutputs=config4.hideOutputs??config4.anonymizer??defaultConfig.hideOutputs,this.hideMetadata=config4.hideMetadata??defaultConfig.hideMetadata,this.omitTracedRuntimeInfo=config4.omitTracedRuntimeInfo??!1,this.autoBatchTracing=config4.autoBatchTracing??this.autoBatchTracing,this.autoBatchQueue=new AutoBatchQueue(maxMemory),this.blockOnRootRunFinalization=config4.blockOnRootRunFinalization??this.blockOnRootRunFinalization,this.batchSizeBytesLimit=config4.batchSizeBytesLimit,this.batchSizeLimit=config4.batchSizeLimit,this.fetchOptions=config4.fetchOptions||{},this.manualFlushMode=config4.manualFlushMode??this.manualFlushMode,this._tracingMode=resolveTracingMode(config4.tracingMode),this._tracingMode==="otel"&&(this.langSmithToOTELTranslator=new LangSmithToOTELTranslator),this.cachedLSEnvVarsForMetadata=getLangSmithEnvVarsMetadata(),config4.cache!==void 0&&config4.disablePromptCache&&warnOnce("Both 'cache' and 'disablePromptCache' were provided. The 'cache' parameter is deprecated and will be removed in a future version. Using 'cache' parameter value."),config4.cache!==void 0?(warnOnce("The 'cache' parameter is deprecated and will be removed in a future version. Use 'configureGlobalPromptCache()' to configure the global cache, or 'disablePromptCache: true' to disable caching for this client."),config4.cache===!1?this._promptCache=void 0:config4.cache===!0?this._promptCache=promptCacheSingleton:this._promptCache=config4.cache):config4.disablePromptCache||(this._promptCache=promptCacheSingleton),this._customHeaders=config4.headers??{}}static getDefaultClientConfig(){let profileConfig=loadProfileClientConfig(),envApiKey=getLangSmithEnvironmentVariable("API_KEY"),envApiUrl=getLangSmithEnvironmentVariable("ENDPOINT"),envWorkspaceId=getLangSmithEnvironmentVariable("WORKSPACE_ID"),envAuthSet=hasValue(envApiKey),apiUrl=envApiUrl??profileConfig.apiUrl??DEFAULT_API_URL2,workspaceId=envWorkspaceId??profileConfig.workspaceId,hideInputs=getLangSmithEnvironmentVariable("HIDE_INPUTS")==="true",hideOutputs=getLangSmithEnvironmentVariable("HIDE_OUTPUTS")==="true",hideMetadata=getLangSmithEnvironmentVariable("HIDE_METADATA")==="true";return{apiUrl,apiKey:envApiKey,webUrl:void 0,hideInputs,hideOutputs,hideMetadata,workspaceId,oauthAccessToken:envAuthSet?void 0:profileConfig.oauthAccessToken,oauthRefreshToken:envAuthSet?void 0:profileConfig.oauthRefreshToken,profileAuth:envAuthSet?void 0:profileConfig.profileAuth}}getHostUrl(){return this.webUrl?this.webUrl:isLocalhost(this.apiUrl)?(this.webUrl="http://localhost:3000",this.webUrl):this.apiUrl.endsWith("/api/v1")?(this.webUrl=this.apiUrl.replace("/api/v1",""),this.webUrl):this.apiUrl.includes("/api")&&!this.apiUrl.split(".",1)[0].endsWith("api")?(this.webUrl=this.apiUrl.replace("/api",""),this.webUrl):this.apiUrl.split(".",1)[0].includes("dev")?(this.webUrl="https://dev.smith.langchain.com",this.webUrl):this.apiUrl.split(".",1)[0].includes("eu")?(this.webUrl="https://eu.smith.langchain.com",this.webUrl):this.apiUrl.split(".",1)[0].includes("aws")?(this.webUrl="https://aws.smith.langchain.com",this.webUrl):this.apiUrl.split(".",1)[0].includes("apac")?(this.webUrl="https://apac.smith.langchain.com",this.webUrl):this.apiUrl.split(".",1)[0].includes("beta")?(this.webUrl="https://beta.smith.langchain.com",this.webUrl):(this.webUrl="https://smith.langchain.com",this.webUrl)}get _mergedHeaders(){let headers={"User-Agent":`langsmith-js/${__version__}`,...this._customHeaders};if(this.apiKey!==void 0)headers["x-api-key"]=`${this.apiKey}`;else{let profileAuthHeader=this.profileAuth?.currentAuthHeader();profileAuthHeader&&(headers[profileAuthHeader.name]=profileAuthHeader.value)}return this.workspaceId&&(headers["x-tenant-id"]=this.workspaceId),headers}get headers(){return this._customHeaders}set headers(value){this._customHeaders=value??{}}_getPlatformEndpointPath(path6){return this.apiUrl.slice(-3)!=="/v1"&&this.apiUrl.slice(-4)!=="/v1/"?`/v1/platform/${path6}`:`/platform/${path6}`}async processInputs(inputs){return this.hideInputs===!1?inputs:this.hideInputs===!0?{}:typeof this.hideInputs=="function"?this.hideInputs(inputs):inputs}async processOutputs(outputs){return this.hideOutputs===!1?outputs:this.hideOutputs===!0?{}:typeof this.hideOutputs=="function"?this.hideOutputs(outputs):outputs}async processMetadata(metadata){return this.hideMetadata===!1?metadata:this.hideMetadata===!0?{}:typeof this.hideMetadata=="function"?this.hideMetadata(metadata):metadata}_filterNewTokenEvents(events){return!events||events.length===0?events:events.map(event=>{if(event.name==="new_token"){let{kwargs:_,...rest}=event;return rest}return event})}async prepareRunCreateOrUpdateInputs(run){let runParams={...run};return runParams.inputs!==void 0&&(runParams.inputs=await this.processInputs(runParams.inputs)),runParams.outputs!==void 0&&(runParams.outputs=await this.processOutputs(runParams.outputs)),runParams.extra!=null&&"metadata"in runParams.extra&&(runParams.extra={...runParams.extra,metadata:await this.processMetadata(runParams.extra.metadata)}),runParams.events!==void 0&&(runParams.events=this._filterNewTokenEvents(runParams.events)),runParams}async _getResponse(path6,queryParams){let paramsString=queryParams?.toString()??"",url3=`${this.apiUrl}${path6}?${paramsString}`;return await this.caller.call(async()=>{let res=await this._fetch(url3,{method:"GET",headers:this._mergedHeaders,signal:AbortSignal.timeout(this.timeout_ms),...this.fetchOptions});return await raiseForStatus(res,`fetch ${path6}`),res})}async _get(path6,queryParams){return(await this._getResponse(path6,queryParams)).json()}async*_getPaginated(path6,queryParams=new URLSearchParams,transform3){let offset=Number(queryParams.get("offset"))||0,limit3=Number(queryParams.get("limit"))||100;for(;;){queryParams.set("offset",String(offset)),queryParams.set("limit",String(limit3));let url3=`${this.apiUrl}${path6}?${queryParams}`,response=await this.caller.call(async()=>{let res=await this._fetch(url3,{method:"GET",headers:this._mergedHeaders,signal:AbortSignal.timeout(this.timeout_ms),...this.fetchOptions});return await raiseForStatus(res,`fetch ${path6}`),res}),items=transform3?transform3(await response.json()):await response.json();if(items.length===0||(yield items,items.length<limit3))break;offset+=items.length}}async*_getCursorPaginatedList(path6,body=null,requestMethod="POST",dataKey="runs"){let bodyParams=body?{...body}:{};for(;;){let body2=JSON.stringify(bodyParams),responseBody=await(await this.caller.call(async()=>{let res=await this._fetch(`${this.apiUrl}${path6}`,{method:requestMethod,headers:{...this._mergedHeaders,"Content-Type":"application/json"},signal:AbortSignal.timeout(this.timeout_ms),...this.fetchOptions,body:body2});return await raiseForStatus(res,`fetch ${path6}`),res})).json();if(!responseBody||!responseBody[dataKey])break;yield responseBody[dataKey];let cursors=responseBody.cursors;if(!cursors||!cursors.next)break;bodyParams.cursor=cursors.next}}_shouldSample(){return this.tracingSampleRate===void 0?!0:Math.random()<this.tracingSampleRate}_filterForSampling(runs,patch=!1){if(this.tracingSampleRate===void 0)return runs;if(patch){let sampled=[];for(let run of runs)this.filteredPostUuids.has(run.trace_id)?run.id===run.trace_id&&this.filteredPostUuids.delete(run.trace_id):sampled.push(run);return sampled}else{let sampled=[];for(let run of runs){let traceId=run.trace_id??run.id;this.filteredPostUuids.has(traceId)||(run.id===traceId?this._shouldSample()?sampled.push(run):this.filteredPostUuids.add(traceId):sampled.push(run))}return sampled}}async _getBatchSizeLimitBytes(){let serverInfo=await this._ensureServerInfo();return this.batchSizeBytesLimit??serverInfo?.batch_ingest_config?.size_limit_bytes??DEFAULT_UNCOMPRESSED_BATCH_SIZE_LIMIT_BYTES}async _getBatchSizeLimit(){let serverInfo=await this._ensureServerInfo();return this.batchSizeLimit??serverInfo?.batch_ingest_config?.size_limit??DEFAULT_BATCH_SIZE_LIMIT}async _getDatasetExamplesMultiPartSupport(){return(await this._ensureServerInfo()).instance_flags?.dataset_examples_multipart_enabled??!1}drainAutoBatchQueue({batchSizeLimitBytes,batchSizeLimit}){let promises=[];for(;this.autoBatchQueue.items.length>0;){let[batch,done]=this.autoBatchQueue.pop({upToSizeBytes:batchSizeLimitBytes,upToSize:batchSizeLimit});if(!batch.length){done();break}let batchesByDestination=batch.reduce((acc,item)=>{let apiUrl=item.apiUrl??this.apiUrl,apiKey=item.apiKey??this.apiKey,batchKey=item.apiKey===this.apiKey&&item.apiUrl===this.apiUrl?"default":`${apiUrl}|${apiKey}`;return acc[batchKey]||(acc[batchKey]=[]),acc[batchKey].push(item),acc},{}),batchPromises=[];for(let[batchKey,batch2]of Object.entries(batchesByDestination)){let batchPromise=this._processBatch(batch2,{apiUrl:batchKey==="default"?void 0:batchKey.split("|")[0],apiKey:batchKey==="default"?void 0:batchKey.split("|")[1]});batchPromises.push(batchPromise)}let allBatchesPromise=Promise.all(batchPromises).finally(done);promises.push(allBatchesPromise)}return Promise.all(promises)}static async _writeTraceToFallbackDir(directory,body,replayHeaders,endpoint,maxBytes){try{let bodyBuffer=typeof body=="string"?Buffer.from(body,"utf8"):Buffer.from(body),envelope=JSON.stringify({version:1,endpoint,headers:replayHeaders,body_base64:bodyBuffer.toString("base64")}),filename=`trace_${Date.now()}_${v4_default().slice(0,8)}.json`,filepath=path2.join(directory,filename);if(_Client._fallbackDirsCreated.has(directory)||(await mkdir15(directory),_Client._fallbackDirsCreated.add(directory)),maxBytes!==void 0&&maxBytes>0)try{let traceFiles=(await readdir4(directory)).filter(f3=>f3.startsWith("trace_")&&f3.endsWith(".json")),total=0;for(let name2 of traceFiles){let{size}=await stat3(path2.join(directory,name2));total+=size}if(total>=maxBytes){console.warn(`Could not write trace to fallback dir ${directory} as it's already over size limit (${total} bytes >= ${maxBytes} bytes). Increase LANGSMITH_FAILED_TRACES_MAX_MB if possible.`);return}}catch{}await writeFileAtomic(filepath,envelope),console.warn(`LangSmith trace upload failed; data saved to ${filepath} for later replay.`)}catch(writeErr){console.error(`LangSmith tracing error: could not write trace to fallback dir ${directory}:`,writeErr)}}async _processBatch(batch,options){if(!batch.length)return;let batchSizeBytes=batch.reduce((sum,item)=>sum+(item.size??0),0);try{if(this.langSmithToOTELTranslator!==void 0)this._sendBatchToOTELTranslator(batch);else{let ingestParams={runCreates:batch.filter(item=>item.action==="create").map(item=>item.item),runUpdates:batch.filter(item=>item.action==="update").map(item=>item.item)},serverInfo=await this._ensureServerInfo();if(!this._multipartDisabled&&(serverInfo?.batch_ingest_config?.use_multipart_endpoint??!0)){let useGzip=!this._runCompressionDisabled&&serverInfo?.instance_flags?.gzip_body_enabled;try{await this.multipartIngestRuns(ingestParams,{...options,useGzip,sizeBytes:batchSizeBytes})}catch(e){if(isLangSmithNotFoundError(e))this._multipartDisabled=!0,await this.batchIngestRuns(ingestParams,{...options,sizeBytes:batchSizeBytes});else throw e}}else await this.batchIngestRuns(ingestParams,{...options,sizeBytes:batchSizeBytes})}}catch(e){console.error("Error exporting batch:",e)}}_sendBatchToOTELTranslator(batch){if(this.langSmithToOTELTranslator!==void 0){let otelContextMap=new Map,operations=[];for(let item of batch)item.item.id&&item.otelContext&&(otelContextMap.set(item.item.id,item.otelContext),item.action==="create"?operations.push({operation:"post",id:item.item.id,trace_id:item.item.trace_id??item.item.id,run:item.item}):operations.push({operation:"patch",id:item.item.id,trace_id:item.item.trace_id??item.item.id,run:item.item}));this.langSmithToOTELTranslator.exportBatch(operations,otelContextMap)}}async processRunOperation(item){clearTimeout(this.autoBatchTimeout),this.autoBatchTimeout=void 0,item.item=mergeRuntimeEnvIntoRun(item.item,this.cachedLSEnvVarsForMetadata,this.omitTracedRuntimeInfo);let itemPromise=this.autoBatchQueue.push(item);if(this.manualFlushMode)return itemPromise;let sizeLimitBytes=await this._getBatchSizeLimitBytes(),sizeLimit=await this._getBatchSizeLimit();return(this.autoBatchQueue.sizeBytes>sizeLimitBytes||this.autoBatchQueue.items.length>sizeLimit)&&this._trackDrain(this.drainAutoBatchQueue({batchSizeLimitBytes:sizeLimitBytes,batchSizeLimit:sizeLimit})),this.autoBatchQueue.items.length>0&&(this.autoBatchTimeout=setTimeout(()=>{this.autoBatchTimeout=void 0,this._trackDrain(this.drainAutoBatchQueue({batchSizeLimitBytes:sizeLimitBytes,batchSizeLimit:sizeLimit}))},this.autoBatchAggregationDelayMs)),itemPromise}async _getServerInfo(){let json5=await(await this.caller.call(async()=>{let res=await this._fetch(`${this.apiUrl}/info`,{method:"GET",headers:{...this._mergedHeaders,Accept:"application/json"},signal:AbortSignal.timeout(SERVER_INFO_REQUEST_TIMEOUT_MS),...this.fetchOptions});return await raiseForStatus(res,"get server info"),res})).json();return this.debug&&console.log(`
|
|
703
|
+
`,SerializeWorker=class{constructor(){Object.defineProperty(this,"worker",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"nextId",{enumerable:!0,configurable:!0,writable:!0,value:1}),Object.defineProperty(this,"pending",{enumerable:!0,configurable:!0,writable:!0,value:new Map}),Object.defineProperty(this,"disabled",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,"startPromise",{enumerable:!0,configurable:!0,writable:!0,value:null})}async ensureStarted(){if(this.disabled)return!1;if(this.worker!==null)return!0;if(this.startPromise!==null)return this.startPromise;this.startPromise=this._start();try{return await this.startPromise}finally{this.startPromise=null}}async _start(){if(!WORKER_THREADS_AVAILABLE||Worker2===null)return this.disabled=!0,!1;try{let worker=new Worker2(WORKER_SOURCE,{eval:!0});return worker.on("message",msg=>{let p=this.pending.get(msg.id);p&&(this.pending.delete(msg.id),msg.error?p.reject(new Error(msg.error)):msg.bytes&&typeof msg.length=="number"?p.resolve(new Uint8Array(msg.bytes,0,msg.length)):p.reject(new Error("worker returned malformed message")))}),worker.on("error",err=>{for(let[,p]of this.pending)p.reject(err);this.pending.clear(),this.disabled=!0,this.worker=null}),worker.on("exit",code=>{for(let[,p]of this.pending)p.reject(new Error(`worker exited with code ${code}`));this.pending.clear(),this.worker=null}),worker.unref(),this.worker=worker,!0}catch{return this.disabled=!0,!1}}async serialize(payload){if(!await this.ensureStarted())return null;let id=this.nextId++;return new Promise((resolve7,reject)=>{this.pending.set(id,{resolve:resolve7,reject});try{this.worker.postMessage({id,op:"serialize",payload})}catch(e){this.pending.delete(id),reject(e)}})}async terminate(){this.worker&&(await this.worker.terminate(),this.worker=null);for(let[,p]of this.pending)p.reject(new Error("worker terminated"));this.pending.clear()}},sharedWorker=null;LARGE_STRING_THRESHOLD=64*1024,NODE_BUDGET=2048}});function assertPullPublicPromptAllowed(promptIdentifier,dangerouslyPullPublicPrompt){let[owner]=parseHubIdentifier(promptIdentifier);if(owner!=="-"&&!dangerouslyPullPublicPrompt)throw new Error("Pulling a public prompt by owner/name is disabled by default because prompts may contain untrusted serialized LangChain objects. If you trust this prompt, set `dangerouslyPullPublicPrompt: true` to acknowledge the risk.")}function _ensureUTCTimestamp(ts){return typeof ts=="string"&&ts.length>0&&!ts.includes("Z")&&!ts.includes("+")&&!ts.includes("-",10)?ts+"Z":ts}function _normalizeRunTimestamps(run){return{...run,start_time:_ensureUTCTimestamp(run.start_time),end_time:_ensureUTCTimestamp(run.end_time)}}function mergeRuntimeEnvIntoRun(run,cachedEnvVars,omitTracedRuntimeInfo){if(omitTracedRuntimeInfo)return run;let runtimeEnv=getRuntimeEnvironment2(),envVars=cachedEnvVars??getLangSmithEnvVarsMetadata(),extra=run.extra??{},metadata=extra.metadata;return run.extra={...extra,runtime:{...runtimeEnv,...extra?.runtime},metadata:{...envVars,...envVars.revision_id||"revision_id"in run&&run.revision_id?{revision_id:("revision_id"in run?run.revision_id:void 0)??envVars.revision_id}:{},...metadata}},run}async function toArray(iterable){let result=[];for await(let item of iterable)result.push(item);return result}function trimQuotes(str3){if(str3!==void 0)return str3.trim().replace(/^"(.*)"$/,"$1").replace(/^'(.*)'$/,"$1")}function _formatFeedbackScore(score){return typeof score=="number"?Number(score.toFixed(4)):score}function isExampleCreate(input){return"dataset_id"in input||"dataset_name"in input}var getTracingSamplingRate,isLocalhost,handle429,DEFAULT_UNCOMPRESSED_BATCH_SIZE_LIMIT_BYTES,DEFAULT_MAX_SIZE_BYTES,SERVER_INFO_REQUEST_TIMEOUT_MS,DEFAULT_BATCH_SIZE_LIMIT,AutoBatchQueue,Client,init_client=__esm({"node_modules/langsmith/dist/client.js"(){init_src();init_translator();init_otel2();init_async_caller();init_messages();init_env2();init_dist();init_uuid2();init_warn();init_prompts();init_error3();init_prompt_cache();init_fs();init_fetch();init_profiles();init_fast_safe_stringify();init_serialize_worker();getTracingSamplingRate=configRate=>{let samplingRateStr=configRate?.toString()??getLangSmithEnvironmentVariable("TRACING_SAMPLING_RATE");if(samplingRateStr===void 0)return;let samplingRate=parseFloat(samplingRateStr);if(samplingRate<0||samplingRate>1)throw new Error(`LANGSMITH_TRACING_SAMPLING_RATE must be between 0 and 1 if set. Got: ${samplingRate}`);return samplingRate},isLocalhost=url3=>{let hostname4=url3.replace("http://","").replace("https://","").split("/")[0].split(":")[0];return hostname4==="localhost"||hostname4==="127.0.0.1"||hostname4==="::1"};handle429=async response=>{if(response?.status===429){let retryAfter=parseInt(response.headers.get("retry-after")??"10",10)*1e3;if(retryAfter>0)return await new Promise(resolve7=>setTimeout(resolve7,retryAfter)),!0}return!1};DEFAULT_UNCOMPRESSED_BATCH_SIZE_LIMIT_BYTES=24*1024*1024,DEFAULT_MAX_SIZE_BYTES=1024*1024*1024,SERVER_INFO_REQUEST_TIMEOUT_MS=1e4,DEFAULT_BATCH_SIZE_LIMIT=100,AutoBatchQueue=class{constructor(maxSizeBytes){Object.defineProperty(this,"items",{enumerable:!0,configurable:!0,writable:!0,value:[]}),Object.defineProperty(this,"sizeBytes",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"maxSizeBytes",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.maxSizeBytes=maxSizeBytes??DEFAULT_MAX_SIZE_BYTES}peek(){return this.items[0]}push(item){let itemPromiseResolve,itemPromise=new Promise(resolve7=>{itemPromiseResolve=resolve7}),size=estimateSerializedSize(item.item).size;return this.sizeBytes+size>this.maxSizeBytes&&this.items.length>0?(console.warn(`AutoBatchQueue size limit (${this.maxSizeBytes} bytes) exceeded. Dropping run with id: ${item.item.id}. Current queue size: ${this.sizeBytes} bytes, attempted addition: ${size} bytes.`),itemPromiseResolve(),itemPromise):(this.items.push({action:item.action,payload:item.item,otelContext:item.otelContext,apiKey:item.apiKey,apiUrl:item.apiUrl,itemPromiseResolve,itemPromise,size}),this.sizeBytes+=size,itemPromise)}pop({upToSizeBytes,upToSize}){if(upToSizeBytes<1)throw new Error("Number of bytes to pop off may not be less than 1.");let popped=[],poppedSizeBytes=0;for(;poppedSizeBytes+(this.peek()?.size??0)<upToSizeBytes&&this.items.length>0&&popped.length<upToSize;){let item=this.items.shift();item&&(popped.push(item),poppedSizeBytes+=item.size,this.sizeBytes-=item.size)}if(popped.length===0&&this.items.length>0){let item=this.items.shift();popped.push(item),poppedSizeBytes+=item.size,this.sizeBytes-=item.size}return[popped.map(it=>({action:it.action,item:it.payload,otelContext:it.otelContext,apiKey:it.apiKey,apiUrl:it.apiUrl,size:it.size})),()=>popped.forEach(it=>it.itemPromiseResolve())]}},Client=class _Client{get tracingMode(){return this._tracingMode}get _fetch(){let fetchImplementation=this.fetchImplementation||_getFetchImplementation(this.debug);return(async(input,init)=>{let authHeader,profileManagedAuthorization=this.getProfileManagedAuthorizationHeader(init);return this.apiKey!==void 0?authHeader={name:"x-api-key",value:`${this.apiKey}`}:this.hasExplicitAuthHeader(init,profileManagedAuthorization)||(authHeader=await this.profileAuth?.getAuthHeader(fetchImplementation,init?.signal)),fetchImplementation(input,this.applyCurrentAuthHeaders(init,authHeader,profileManagedAuthorization))})}getProfileManagedAuthorizationHeader(init){if(!init?.headers||!this.profileAuth)return;let authorization=new Headers(init.headers).get("Authorization");if(hasValue(authorization))return this.profileAuth.isProfileAuthorizationHeader(authorization??"")?authorization??void 0:void 0}isProfileManagedAuthorizationHeader(value,profileManagedAuthorization){return value===profileManagedAuthorization||this.profileAuth?.isProfileAuthorizationHeader(value)===!0}hasExplicitAuthHeader(init,profileManagedAuthorization){if(!init?.headers)return!1;let headers=new Headers(init.headers);if(hasValue(headers.get("x-api-key")))return!0;let authorization=headers.get("Authorization");return hasValue(authorization)?!this.isProfileManagedAuthorizationHeader(authorization??"",profileManagedAuthorization):!1}applyCurrentAuthHeaders(init,authHeader,profileManagedAuthorization){if(!authHeader)return init;let applyAuth=headers2=>{if(this.apiKey!==void 0&&authHeader.name==="x-api-key")return headers2.delete("Authorization"),headers2.has("x-api-key")||headers2.set("x-api-key",authHeader.value),headers2;if(authHeader.name==="Authorization"){if(hasValue(headers2.get("x-api-key")))return headers2;let authorization3=headers2.get("Authorization");return hasValue(authorization3)&&!this.isProfileManagedAuthorizationHeader(authorization3??"",profileManagedAuthorization)||headers2.set("Authorization",authHeader.value),headers2}let authorization2=headers2.get("Authorization");return hasValue(authorization2)&&!this.isProfileManagedAuthorizationHeader(authorization2??"",profileManagedAuthorization)||(hasValue(authorization2)&&headers2.delete("Authorization"),headers2.has("x-api-key")||headers2.set("x-api-key",authHeader.value)),headers2};if(!init)return{headers:{[authHeader.name]:authHeader.value}};if(init.headers instanceof Headers)return{...init,headers:applyAuth(new Headers(init.headers))};if(Array.isArray(init.headers))return{...init,headers:applyAuth(new Headers(init.headers))};let headers={...init.headers??{}},getHeaderKey=name2=>Object.keys(headers).find(key=>key.toLowerCase()===name2),getHeader=name2=>{let key=getHeaderKey(name2);return key?headers[key]:void 0},hasApiKey=hasValue(getHeader("x-api-key")),authorization=getHeader("authorization"),hasExplicitAuthorization=hasValue(authorization)&&!this.isProfileManagedAuthorizationHeader(authorization??"",profileManagedAuthorization);if(this.apiKey!==void 0&&authHeader.name==="x-api-key"){let authorizationKey=getHeaderKey("authorization");return authorizationKey&&delete headers[authorizationKey],hasApiKey||(headers["x-api-key"]=authHeader.value),{...init,headers}}if(authHeader.name==="Authorization"){if(!hasApiKey&&!hasExplicitAuthorization){let authorizationKey=getHeaderKey("authorization");authorizationKey&&authorizationKey!=="Authorization"&&delete headers[authorizationKey],headers.Authorization=authHeader.value}return{...init,headers}}if(!hasExplicitAuthorization){let authorizationKey=getHeaderKey("authorization");authorizationKey&&delete headers[authorizationKey],hasApiKey||(headers["x-api-key"]=authHeader.value)}return{...init,headers}}_trackDrain(promise3){this._pendingDrains.add(promise3),promise3.finally(()=>{this._pendingDrains.delete(promise3)})}async _serializeBody(payload,errorContext){if(this.manualFlushMode)return serialize2(payload,errorContext);if(!hasLargeString(payload))return serialize2(payload,errorContext);if(this._serializeWorker===void 0&&(this._serializeWorker=getSharedSerializeWorker()),this._serializeWorker===null)return serialize2(payload,errorContext);try{let bytes=await this._serializeWorker.serialize(payload);return bytes===null?(this._serializeWorker=null,serialize2(payload,errorContext)):bytes}catch{return serialize2(payload,errorContext)}}constructor(config4={}){Object.defineProperty(this,"apiKey",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"apiUrl",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"webUrl",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"workspaceId",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"caller",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"batchIngestCaller",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"timeout_ms",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_tenantId",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"hideInputs",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"hideOutputs",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"hideMetadata",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"omitTracedRuntimeInfo",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"tracingSampleRate",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"filteredPostUuids",{enumerable:!0,configurable:!0,writable:!0,value:new Set}),Object.defineProperty(this,"autoBatchTracing",{enumerable:!0,configurable:!0,writable:!0,value:!0}),Object.defineProperty(this,"autoBatchQueue",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"autoBatchTimeout",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"autoBatchAggregationDelayMs",{enumerable:!0,configurable:!0,writable:!0,value:250}),Object.defineProperty(this,"batchSizeBytesLimit",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"batchSizeLimit",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"fetchOptions",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"settings",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"blockOnRootRunFinalization",{enumerable:!0,configurable:!0,writable:!0,value:getEnvironmentVariable2("LANGSMITH_TRACING_BACKGROUND")==="false"}),Object.defineProperty(this,"traceBatchConcurrency",{enumerable:!0,configurable:!0,writable:!0,value:5}),Object.defineProperty(this,"_serverInfo",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_getServerInfoPromise",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"manualFlushMode",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,"_serializeWorker",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_pendingDrains",{enumerable:!0,configurable:!0,writable:!0,value:new Set}),Object.defineProperty(this,"langSmithToOTELTranslator",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_tracingMode",{enumerable:!0,configurable:!0,writable:!0,value:"langsmith"}),Object.defineProperty(this,"fetchImplementation",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"cachedLSEnvVarsForMetadata",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_promptCache",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"profileAuth",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"multipartStreamingDisabled",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,"_multipartDisabled",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,"_runCompressionDisabled",{enumerable:!0,configurable:!0,writable:!0,value:getLangSmithEnvironmentVariable("DISABLE_RUN_COMPRESSION")==="true"}),Object.defineProperty(this,"failedTracesDir",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"failedTracesMaxBytes",{enumerable:!0,configurable:!0,writable:!0,value:100*1024*1024}),Object.defineProperty(this,"_customHeaders",{enumerable:!0,configurable:!0,writable:!0,value:{}}),Object.defineProperty(this,"debug",{enumerable:!0,configurable:!0,writable:!0,value:getEnvironmentVariable2("LANGSMITH_DEBUG")==="true"});let defaultConfig=_Client.getDefaultClientConfig();this.tracingSampleRate=getTracingSamplingRate(config4.tracingSamplingRate),this.apiUrl=trimQuotes(config4.apiUrl??defaultConfig.apiUrl)??"",this.apiUrl.endsWith("/")&&(this.apiUrl=this.apiUrl.slice(0,-1));let configuredApiKey=trimQuotes(config4.apiKey??defaultConfig.apiKey);if(this.apiKey=hasValue(configuredApiKey)?configuredApiKey:void 0,this.profileAuth=this.apiKey!==void 0?void 0:defaultConfig.profileAuth,this.webUrl=trimQuotes(config4.webUrl??defaultConfig.webUrl),this.webUrl?.endsWith("/")&&(this.webUrl=this.webUrl.slice(0,-1)),this.workspaceId=trimQuotes(config4.workspaceId??defaultConfig.workspaceId),this.timeout_ms=config4.timeout_ms??9e4,this.caller=new AsyncCaller({...config4.callerOptions??{},maxRetries:4,debug:config4.debug??this.debug}),this.traceBatchConcurrency=config4.traceBatchConcurrency??this.traceBatchConcurrency,this.traceBatchConcurrency<1)throw new Error("Trace batch concurrency must be positive.");this.debug=config4.debug??this.debug,this.fetchImplementation=config4.fetchImplementation,this.failedTracesDir=getLangSmithEnvironmentVariable("FAILED_TRACES_DIR")||void 0;let failedTracesMb=getLangSmithEnvironmentVariable("FAILED_TRACES_MAX_MB");if(failedTracesMb){let n3=parseInt(failedTracesMb,10);Number.isFinite(n3)&&n3>0&&(this.failedTracesMaxBytes=n3*1024*1024)}let maxMemory=config4.maxIngestMemoryBytes??DEFAULT_MAX_SIZE_BYTES;this.batchIngestCaller=new AsyncCaller({maxRetries:4,maxConcurrency:this.traceBatchConcurrency,maxQueueSizeBytes:maxMemory,...config4.callerOptions??{},onFailedResponseHook:handle429,debug:config4.debug??this.debug}),this.hideInputs=config4.hideInputs??config4.anonymizer??defaultConfig.hideInputs,this.hideOutputs=config4.hideOutputs??config4.anonymizer??defaultConfig.hideOutputs,this.hideMetadata=config4.hideMetadata??defaultConfig.hideMetadata,this.omitTracedRuntimeInfo=config4.omitTracedRuntimeInfo??!1,this.autoBatchTracing=config4.autoBatchTracing??this.autoBatchTracing,this.autoBatchQueue=new AutoBatchQueue(maxMemory),this.blockOnRootRunFinalization=config4.blockOnRootRunFinalization??this.blockOnRootRunFinalization,this.batchSizeBytesLimit=config4.batchSizeBytesLimit,this.batchSizeLimit=config4.batchSizeLimit,this.fetchOptions=config4.fetchOptions||{},this.manualFlushMode=config4.manualFlushMode??this.manualFlushMode,this._tracingMode=resolveTracingMode(config4.tracingMode),this._tracingMode==="otel"&&(this.langSmithToOTELTranslator=new LangSmithToOTELTranslator),this.cachedLSEnvVarsForMetadata=getLangSmithEnvVarsMetadata(),config4.cache!==void 0&&config4.disablePromptCache&&warnOnce("Both 'cache' and 'disablePromptCache' were provided. The 'cache' parameter is deprecated and will be removed in a future version. Using 'cache' parameter value."),config4.cache!==void 0?(warnOnce("The 'cache' parameter is deprecated and will be removed in a future version. Use 'configureGlobalPromptCache()' to configure the global cache, or 'disablePromptCache: true' to disable caching for this client."),config4.cache===!1?this._promptCache=void 0:config4.cache===!0?this._promptCache=promptCacheSingleton:this._promptCache=config4.cache):config4.disablePromptCache||(this._promptCache=promptCacheSingleton),this._customHeaders=config4.headers??{}}static getDefaultClientConfig(){let profileConfig=loadProfileClientConfig(),envApiKey=getLangSmithEnvironmentVariable("API_KEY"),envApiUrl=getLangSmithEnvironmentVariable("ENDPOINT"),envWorkspaceId=getLangSmithEnvironmentVariable("WORKSPACE_ID"),envAuthSet=hasValue(envApiKey),apiUrl=envApiUrl??profileConfig.apiUrl??DEFAULT_API_URL,workspaceId=envWorkspaceId??profileConfig.workspaceId,hideInputs=getLangSmithEnvironmentVariable("HIDE_INPUTS")==="true",hideOutputs=getLangSmithEnvironmentVariable("HIDE_OUTPUTS")==="true",hideMetadata=getLangSmithEnvironmentVariable("HIDE_METADATA")==="true";return{apiUrl,apiKey:envApiKey,webUrl:void 0,hideInputs,hideOutputs,hideMetadata,workspaceId,oauthAccessToken:envAuthSet?void 0:profileConfig.oauthAccessToken,oauthRefreshToken:envAuthSet?void 0:profileConfig.oauthRefreshToken,profileAuth:envAuthSet?void 0:profileConfig.profileAuth}}getHostUrl(){return this.webUrl?this.webUrl:isLocalhost(this.apiUrl)?(this.webUrl="http://localhost:3000",this.webUrl):this.apiUrl.endsWith("/api/v1")?(this.webUrl=this.apiUrl.replace("/api/v1",""),this.webUrl):this.apiUrl.includes("/api")&&!this.apiUrl.split(".",1)[0].endsWith("api")?(this.webUrl=this.apiUrl.replace("/api",""),this.webUrl):this.apiUrl.split(".",1)[0].includes("dev")?(this.webUrl="https://dev.smith.langchain.com",this.webUrl):this.apiUrl.split(".",1)[0].includes("eu")?(this.webUrl="https://eu.smith.langchain.com",this.webUrl):this.apiUrl.split(".",1)[0].includes("aws")?(this.webUrl="https://aws.smith.langchain.com",this.webUrl):this.apiUrl.split(".",1)[0].includes("apac")?(this.webUrl="https://apac.smith.langchain.com",this.webUrl):this.apiUrl.split(".",1)[0].includes("beta")?(this.webUrl="https://beta.smith.langchain.com",this.webUrl):(this.webUrl="https://smith.langchain.com",this.webUrl)}get _mergedHeaders(){let headers={"User-Agent":`langsmith-js/${__version__}`,...this._customHeaders};if(this.apiKey!==void 0)headers["x-api-key"]=`${this.apiKey}`;else{let profileAuthHeader=this.profileAuth?.currentAuthHeader();profileAuthHeader&&(headers[profileAuthHeader.name]=profileAuthHeader.value)}return this.workspaceId&&(headers["x-tenant-id"]=this.workspaceId),headers}get headers(){return this._customHeaders}set headers(value){this._customHeaders=value??{}}_getPlatformEndpointPath(path6){return this.apiUrl.slice(-3)!=="/v1"&&this.apiUrl.slice(-4)!=="/v1/"?`/v1/platform/${path6}`:`/platform/${path6}`}async processInputs(inputs){return this.hideInputs===!1?inputs:this.hideInputs===!0?{}:typeof this.hideInputs=="function"?this.hideInputs(inputs):inputs}async processOutputs(outputs){return this.hideOutputs===!1?outputs:this.hideOutputs===!0?{}:typeof this.hideOutputs=="function"?this.hideOutputs(outputs):outputs}async processMetadata(metadata){return this.hideMetadata===!1?metadata:this.hideMetadata===!0?{}:typeof this.hideMetadata=="function"?this.hideMetadata(metadata):metadata}_filterNewTokenEvents(events){return!events||events.length===0?events:events.map(event=>{if(event.name==="new_token"){let{kwargs:_,...rest}=event;return rest}return event})}async prepareRunCreateOrUpdateInputs(run){let runParams={...run};return runParams.inputs!==void 0&&(runParams.inputs=await this.processInputs(runParams.inputs)),runParams.outputs!==void 0&&(runParams.outputs=await this.processOutputs(runParams.outputs)),runParams.extra!=null&&"metadata"in runParams.extra&&(runParams.extra={...runParams.extra,metadata:await this.processMetadata(runParams.extra.metadata)}),runParams.events!==void 0&&(runParams.events=this._filterNewTokenEvents(runParams.events)),runParams}async _getResponse(path6,queryParams){let paramsString=queryParams?.toString()??"",url3=`${this.apiUrl}${path6}?${paramsString}`;return await this.caller.call(async()=>{let res=await this._fetch(url3,{method:"GET",headers:this._mergedHeaders,signal:AbortSignal.timeout(this.timeout_ms),...this.fetchOptions});return await raiseForStatus(res,`fetch ${path6}`),res})}async _get(path6,queryParams){return(await this._getResponse(path6,queryParams)).json()}async*_getPaginated(path6,queryParams=new URLSearchParams,transform3){let offset=Number(queryParams.get("offset"))||0,limit3=Number(queryParams.get("limit"))||100;for(;;){queryParams.set("offset",String(offset)),queryParams.set("limit",String(limit3));let url3=`${this.apiUrl}${path6}?${queryParams}`,response=await this.caller.call(async()=>{let res=await this._fetch(url3,{method:"GET",headers:this._mergedHeaders,signal:AbortSignal.timeout(this.timeout_ms),...this.fetchOptions});return await raiseForStatus(res,`fetch ${path6}`),res}),items=transform3?transform3(await response.json()):await response.json();if(items.length===0||(yield items,items.length<limit3))break;offset+=items.length}}async*_getCursorPaginatedList(path6,body=null,requestMethod="POST",dataKey="runs"){let bodyParams=body?{...body}:{};for(;;){let body2=JSON.stringify(bodyParams),responseBody=await(await this.caller.call(async()=>{let res=await this._fetch(`${this.apiUrl}${path6}`,{method:requestMethod,headers:{...this._mergedHeaders,"Content-Type":"application/json"},signal:AbortSignal.timeout(this.timeout_ms),...this.fetchOptions,body:body2});return await raiseForStatus(res,`fetch ${path6}`),res})).json();if(!responseBody||!responseBody[dataKey])break;yield responseBody[dataKey];let cursors=responseBody.cursors;if(!cursors||!cursors.next)break;bodyParams.cursor=cursors.next}}_shouldSample(){return this.tracingSampleRate===void 0?!0:Math.random()<this.tracingSampleRate}_filterForSampling(runs,patch=!1){if(this.tracingSampleRate===void 0)return runs;if(patch){let sampled=[];for(let run of runs)this.filteredPostUuids.has(run.trace_id)?run.id===run.trace_id&&this.filteredPostUuids.delete(run.trace_id):sampled.push(run);return sampled}else{let sampled=[];for(let run of runs){let traceId=run.trace_id??run.id;this.filteredPostUuids.has(traceId)||(run.id===traceId?this._shouldSample()?sampled.push(run):this.filteredPostUuids.add(traceId):sampled.push(run))}return sampled}}async _getBatchSizeLimitBytes(){let serverInfo=await this._ensureServerInfo();return this.batchSizeBytesLimit??serverInfo?.batch_ingest_config?.size_limit_bytes??DEFAULT_UNCOMPRESSED_BATCH_SIZE_LIMIT_BYTES}async _getBatchSizeLimit(){let serverInfo=await this._ensureServerInfo();return this.batchSizeLimit??serverInfo?.batch_ingest_config?.size_limit??DEFAULT_BATCH_SIZE_LIMIT}async _getDatasetExamplesMultiPartSupport(){return(await this._ensureServerInfo()).instance_flags?.dataset_examples_multipart_enabled??!1}drainAutoBatchQueue({batchSizeLimitBytes,batchSizeLimit}){let promises=[];for(;this.autoBatchQueue.items.length>0;){let[batch,done]=this.autoBatchQueue.pop({upToSizeBytes:batchSizeLimitBytes,upToSize:batchSizeLimit});if(!batch.length){done();break}let batchesByDestination=batch.reduce((acc,item)=>{let apiUrl=item.apiUrl??this.apiUrl,apiKey=item.apiKey??this.apiKey,batchKey=item.apiKey===this.apiKey&&item.apiUrl===this.apiUrl?"default":`${apiUrl}|${apiKey}`;return acc[batchKey]||(acc[batchKey]=[]),acc[batchKey].push(item),acc},{}),batchPromises=[];for(let[batchKey,batch2]of Object.entries(batchesByDestination)){let batchPromise=this._processBatch(batch2,{apiUrl:batchKey==="default"?void 0:batchKey.split("|")[0],apiKey:batchKey==="default"?void 0:batchKey.split("|")[1]});batchPromises.push(batchPromise)}let allBatchesPromise=Promise.all(batchPromises).finally(done);promises.push(allBatchesPromise)}return Promise.all(promises)}static async _writeTraceToFallbackDir(directory,body,replayHeaders,endpoint,maxBytes){try{let bodyBuffer=typeof body=="string"?Buffer.from(body,"utf8"):Buffer.from(body),envelope=JSON.stringify({version:1,endpoint,headers:replayHeaders,body_base64:bodyBuffer.toString("base64")}),filename=`trace_${Date.now()}_${v4_default().slice(0,8)}.json`,filepath=path2.join(directory,filename);if(_Client._fallbackDirsCreated.has(directory)||(await mkdir15(directory),_Client._fallbackDirsCreated.add(directory)),maxBytes!==void 0&&maxBytes>0)try{let traceFiles=(await readdir4(directory)).filter(f3=>f3.startsWith("trace_")&&f3.endsWith(".json")),total=0;for(let name2 of traceFiles){let{size}=await stat3(path2.join(directory,name2));total+=size}if(total>=maxBytes){console.warn(`Could not write trace to fallback dir ${directory} as it's already over size limit (${total} bytes >= ${maxBytes} bytes). Increase LANGSMITH_FAILED_TRACES_MAX_MB if possible.`);return}}catch{}await writeFileAtomic(filepath,envelope),console.warn(`LangSmith trace upload failed; data saved to ${filepath} for later replay.`)}catch(writeErr){console.error(`LangSmith tracing error: could not write trace to fallback dir ${directory}:`,writeErr)}}async _processBatch(batch,options){if(!batch.length)return;let batchSizeBytes=batch.reduce((sum,item)=>sum+(item.size??0),0);try{if(this.langSmithToOTELTranslator!==void 0)this._sendBatchToOTELTranslator(batch);else{let ingestParams={runCreates:batch.filter(item=>item.action==="create").map(item=>item.item),runUpdates:batch.filter(item=>item.action==="update").map(item=>item.item)},serverInfo=await this._ensureServerInfo();if(!this._multipartDisabled&&(serverInfo?.batch_ingest_config?.use_multipart_endpoint??!0)){let useGzip=!this._runCompressionDisabled&&serverInfo?.instance_flags?.gzip_body_enabled;try{await this.multipartIngestRuns(ingestParams,{...options,useGzip,sizeBytes:batchSizeBytes})}catch(e){if(isLangSmithNotFoundError(e))this._multipartDisabled=!0,await this.batchIngestRuns(ingestParams,{...options,sizeBytes:batchSizeBytes});else throw e}}else await this.batchIngestRuns(ingestParams,{...options,sizeBytes:batchSizeBytes})}}catch(e){console.error("Error exporting batch:",e)}}_sendBatchToOTELTranslator(batch){if(this.langSmithToOTELTranslator!==void 0){let otelContextMap=new Map,operations=[];for(let item of batch)item.item.id&&item.otelContext&&(otelContextMap.set(item.item.id,item.otelContext),item.action==="create"?operations.push({operation:"post",id:item.item.id,trace_id:item.item.trace_id??item.item.id,run:item.item}):operations.push({operation:"patch",id:item.item.id,trace_id:item.item.trace_id??item.item.id,run:item.item}));this.langSmithToOTELTranslator.exportBatch(operations,otelContextMap)}}async processRunOperation(item){clearTimeout(this.autoBatchTimeout),this.autoBatchTimeout=void 0,item.item=mergeRuntimeEnvIntoRun(item.item,this.cachedLSEnvVarsForMetadata,this.omitTracedRuntimeInfo);let itemPromise=this.autoBatchQueue.push(item);if(this.manualFlushMode)return itemPromise;let sizeLimitBytes=await this._getBatchSizeLimitBytes(),sizeLimit=await this._getBatchSizeLimit();return(this.autoBatchQueue.sizeBytes>sizeLimitBytes||this.autoBatchQueue.items.length>sizeLimit)&&this._trackDrain(this.drainAutoBatchQueue({batchSizeLimitBytes:sizeLimitBytes,batchSizeLimit:sizeLimit})),this.autoBatchQueue.items.length>0&&(this.autoBatchTimeout=setTimeout(()=>{this.autoBatchTimeout=void 0,this._trackDrain(this.drainAutoBatchQueue({batchSizeLimitBytes:sizeLimitBytes,batchSizeLimit:sizeLimit}))},this.autoBatchAggregationDelayMs)),itemPromise}async _getServerInfo(){let json5=await(await this.caller.call(async()=>{let res=await this._fetch(`${this.apiUrl}/info`,{method:"GET",headers:{...this._mergedHeaders,Accept:"application/json"},signal:AbortSignal.timeout(SERVER_INFO_REQUEST_TIMEOUT_MS),...this.fetchOptions});return await raiseForStatus(res,"get server info"),res})).json();return this.debug&&console.log(`
|
|
704
704
|
=== LangSmith Server Configuration ===
|
|
705
705
|
`+JSON.stringify(json5,null,2)+`
|
|
706
706
|
`),json5}async _ensureServerInfo(){return this._getServerInfoPromise===void 0&&(this._getServerInfoPromise=(async()=>{if(this._serverInfo===void 0)try{this._serverInfo=await this._getServerInfo()}catch(e){console.warn(`[LANGSMITH]: Failed to fetch info on supported operations. Falling back to batch operations and default limits. Info: ${e.status??"Unspecified status code"} ${e.message}`)}return this._serverInfo??{}})()),this._getServerInfoPromise.then(serverInfo=>(this._serverInfo===void 0&&(this._getServerInfoPromise=void 0),serverInfo))}async _getSettings(){return this.settings||(this.settings=this._get("/settings")),await this.settings}async flush(){let sizeLimitBytes=await this._getBatchSizeLimitBytes(),sizeLimit=await this._getBatchSizeLimit();await this.drainAutoBatchQueue({batchSizeLimitBytes:sizeLimitBytes,batchSizeLimit:sizeLimit})}_cloneCurrentOTELContext(){let otel_trace=getOTELTrace(),otel_context=getOTELContext();if(this.langSmithToOTELTranslator!==void 0){let currentSpan=otel_trace.getActiveSpan();if(currentSpan)return otel_trace.setSpan(otel_context.active(),currentSpan)}}async createRun(run,options){if(!this._filterForSampling([run]).length)return;let headers={...this._mergedHeaders,"Content-Type":"application/json"},session_name=run.project_name;delete run.project_name;let runCreate=await this.prepareRunCreateOrUpdateInputs({session_name,...run,start_time:run.start_time??Date.now()});if(this.autoBatchTracing&&runCreate.trace_id!==void 0&&runCreate.dotted_order!==void 0){let otelContext=this._cloneCurrentOTELContext();this.processRunOperation({action:"create",item:runCreate,otelContext,apiKey:options?.apiKey,apiUrl:options?.apiUrl}).catch(console.error);return}let mergedRunCreateParam=mergeRuntimeEnvIntoRun(runCreate,this.cachedLSEnvVarsForMetadata,this.omitTracedRuntimeInfo);options?.apiKey!==void 0&&(headers["x-api-key"]=options.apiKey),options?.workspaceId!==void 0&&(headers["x-tenant-id"]=options.workspaceId);let body=serialize2(mergedRunCreateParam,`Creating run with id: ${mergedRunCreateParam.id}`);await this.caller.call(async()=>{let res=await this._fetch(`${options?.apiUrl??this.apiUrl}/runs`,{method:"POST",headers,signal:AbortSignal.timeout(this.timeout_ms),...this.fetchOptions,body});return await raiseForStatus(res,"create run",!0),res})}async batchIngestRuns({runCreates,runUpdates},options){if(runCreates===void 0&&runUpdates===void 0)return;let preparedCreateParams=await Promise.all(runCreates?.map(create3=>this.prepareRunCreateOrUpdateInputs(create3))??[]),preparedUpdateParams=await Promise.all(runUpdates?.map(update=>this.prepareRunCreateOrUpdateInputs(update))??[]);if(preparedCreateParams.length>0&&preparedUpdateParams.length>0){let createById=preparedCreateParams.reduce((params,run)=>(run.id&&(params[run.id]=run),params),{}),standaloneUpdates=[];for(let updateParam of preparedUpdateParams)updateParam.id!==void 0&&createById[updateParam.id]?createById[updateParam.id]={...createById[updateParam.id],...updateParam}:standaloneUpdates.push(updateParam);preparedCreateParams=Object.values(createById),preparedUpdateParams=standaloneUpdates}let rawBatch={post:preparedCreateParams,patch:preparedUpdateParams};if(!rawBatch.post.length&&!rawBatch.patch.length)return;let batchChunks={post:[],patch:[]};for(let k of["post","patch"]){let key=k,batchItems=rawBatch[key].reverse(),batchItem=batchItems.pop();for(;batchItem!==void 0;)batchChunks[key].push(batchItem),batchItem=batchItems.pop()}if(batchChunks.post.length>0||batchChunks.patch.length>0){let runIds=batchChunks.post.map(item=>item.id).concat(batchChunks.patch.map(item=>item.id)).join(",");await this._postBatchIngestRuns(await this._serializeBody(batchChunks,`Ingesting runs with ids: ${runIds}`),options)}}async _postBatchIngestRuns(body,options){let headers={...this._mergedHeaders,"Content-Type":"application/json",Accept:"application/json"};options?.apiKey!==void 0&&(headers["x-api-key"]=options.apiKey),await this.batchIngestCaller.callWithOptions({sizeBytes:options?.sizeBytes},async()=>{let res=await this._fetch(`${options?.apiUrl??this.apiUrl}/runs/batch`,{method:"POST",headers,signal:AbortSignal.timeout(this.timeout_ms),...this.fetchOptions,body});return await raiseForStatus(res,"batch create run",!0),res})}async multipartIngestRuns({runCreates,runUpdates},options){if(runCreates===void 0&&runUpdates===void 0)return;let allAttachments={},preparedCreateParams=[];for(let create3 of runCreates??[]){let preparedCreate=await this.prepareRunCreateOrUpdateInputs(create3);preparedCreate.id!==void 0&&preparedCreate.attachments!==void 0&&(allAttachments[preparedCreate.id]=preparedCreate.attachments),delete preparedCreate.attachments,preparedCreateParams.push(preparedCreate)}let preparedUpdateParams=[];for(let update of runUpdates??[])preparedUpdateParams.push(await this.prepareRunCreateOrUpdateInputs(update));if(preparedCreateParams.find(runCreate=>runCreate.trace_id===void 0||runCreate.dotted_order===void 0)!==void 0)throw new Error('Multipart ingest requires "trace_id" and "dotted_order" to be set when creating a run');if(preparedUpdateParams.find(runUpdate=>runUpdate.trace_id===void 0||runUpdate.dotted_order===void 0)!==void 0)throw new Error('Multipart ingest requires "trace_id" and "dotted_order" to be set when updating a run');if(preparedCreateParams.length>0&&preparedUpdateParams.length>0){let createById=preparedCreateParams.reduce((params,run)=>(run.id&&(params[run.id]=run),params),{}),standaloneUpdates=[];for(let updateParam of preparedUpdateParams)updateParam.id!==void 0&&createById[updateParam.id]?createById[updateParam.id]={...createById[updateParam.id],...updateParam}:standaloneUpdates.push(updateParam);preparedCreateParams=Object.values(createById),preparedUpdateParams=standaloneUpdates}if(preparedCreateParams.length===0&&preparedUpdateParams.length===0)return;let accumulatedContext=[],accumulatedParts=[];for(let[method,payloads]of[["post",preparedCreateParams],["patch",preparedUpdateParams]])for(let originalPayload of payloads){let{inputs,outputs,events,extra,error:error91,serialized,attachments,...payload}=originalPayload,fields={inputs,outputs,events,extra,error:error91,serialized},stringifiedPayload=await this._serializeBody(payload,`Serializing for multipart ingestion of run with id: ${payload.id}`);accumulatedParts.push({name:`${method}.${payload.id}`,payload:new Blob([stringifiedPayload],{type:`application/json; length=${stringifiedPayload.length}`})});for(let[key,value]of Object.entries(fields)){if(value===void 0)continue;let stringifiedValue=await this._serializeBody(value,`Serializing ${key} for multipart ingestion of run with id: ${payload.id}`);accumulatedParts.push({name:`${method}.${payload.id}.${key}`,payload:new Blob([stringifiedValue],{type:`application/json; length=${stringifiedValue.length}`})})}if(payload.id!==void 0){let attachments2=allAttachments[payload.id];if(attachments2){delete allAttachments[payload.id];for(let[name2,attachment]of Object.entries(attachments2)){let contentType,content;if(Array.isArray(attachment)?[contentType,content]=attachment:(contentType=attachment.mimeType,content=attachment.data),name2.includes(".")){console.warn(`Skipping attachment '${name2}' for run ${payload.id}: Invalid attachment name. Attachment names must not contain periods ('.'). Please rename the attachment and try again.`);continue}accumulatedParts.push({name:`attachment.${payload.id}.${name2}`,payload:new Blob([content],{type:`${contentType}; length=${content.byteLength}`})})}}}accumulatedContext.push(`trace=${payload.trace_id},id=${payload.id}`)}await this._sendMultipartRequest(accumulatedParts,accumulatedContext.join("; "),options)}async _createNodeFetchBody(parts,boundary){let chunks=[];for(let part of parts)chunks.push(new Blob([`--${boundary}\r
|
|
@@ -715,7 +715,7 @@ parentPort.on("message", (msg) => {
|
|
|
715
715
|
\r
|
|
716
716
|
`);let reader=part.payload.stream().getReader();try{let result;for(;!(result=await reader.read()).done;)controller.enqueue(result.value)}finally{reader.releaseLock()}await writeChunk(`\r
|
|
717
717
|
`)}await writeChunk(`--${boundary}--\r
|
|
718
|
-
`),controller.close()}})}async _sendMultipartRequest(parts,context3,options){let boundary="----LangSmithFormBoundary"+Math.random().toString(36).slice(2),buildBuffered=()=>this._createNodeFetchBody(parts,boundary),buildStream=()=>this._createMultipartStream(parts,boundary),sendWithRetry=async bodyFactory=>this.batchIngestCaller.callWithOptions({sizeBytes:options?.sizeBytes},async()=>{let body=await bodyFactory(),headers={...this._mergedHeaders,"Content-Type":`multipart/form-data; boundary=${boundary}`};options?.apiKey!==void 0&&(headers["x-api-key"]=options.apiKey);let transformedBody=body;options?.useGzip&&typeof body=="object"&&"pipeThrough"in body&&(transformedBody=body.pipeThrough(new CompressionStream("gzip")),headers["Content-Encoding"]="gzip");let response=await this._fetch(`${options?.apiUrl??this.apiUrl}/runs/multipart`,{method:"POST",headers,body:transformedBody,duplex:"half",signal:AbortSignal.timeout(this.timeout_ms),...this.fetchOptions});return await raiseForStatus(response,"Failed to send multipart request",!0),response});try{let res,streamedAttempt=!1;_shouldStreamForGlobalFetchImplementation()&&!this.multipartStreamingDisabled&&getEnv2()!=="bun"?(streamedAttempt=!0,res=await sendWithRetry(buildStream)):res=await sendWithRetry(buildBuffered),(!this.multipartStreamingDisabled||streamedAttempt)&&res.status===422&&(options?.apiUrl??this.apiUrl)!==
|
|
718
|
+
`),controller.close()}})}async _sendMultipartRequest(parts,context3,options){let boundary="----LangSmithFormBoundary"+Math.random().toString(36).slice(2),buildBuffered=()=>this._createNodeFetchBody(parts,boundary),buildStream=()=>this._createMultipartStream(parts,boundary),sendWithRetry=async bodyFactory=>this.batchIngestCaller.callWithOptions({sizeBytes:options?.sizeBytes},async()=>{let body=await bodyFactory(),headers={...this._mergedHeaders,"Content-Type":`multipart/form-data; boundary=${boundary}`};options?.apiKey!==void 0&&(headers["x-api-key"]=options.apiKey);let transformedBody=body;options?.useGzip&&typeof body=="object"&&"pipeThrough"in body&&(transformedBody=body.pipeThrough(new CompressionStream("gzip")),headers["Content-Encoding"]="gzip");let response=await this._fetch(`${options?.apiUrl??this.apiUrl}/runs/multipart`,{method:"POST",headers,body:transformedBody,duplex:"half",signal:AbortSignal.timeout(this.timeout_ms),...this.fetchOptions});return await raiseForStatus(response,"Failed to send multipart request",!0),response});try{let res,streamedAttempt=!1;_shouldStreamForGlobalFetchImplementation()&&!this.multipartStreamingDisabled&&getEnv2()!=="bun"?(streamedAttempt=!0,res=await sendWithRetry(buildStream)):res=await sendWithRetry(buildBuffered),(!this.multipartStreamingDisabled||streamedAttempt)&&res.status===422&&(options?.apiUrl??this.apiUrl)!==DEFAULT_API_URL&&(console.warn(`Streaming multipart upload to ${options?.apiUrl??this.apiUrl}/runs/multipart failed. This usually means the host does not support chunked uploads. Retrying with a buffered upload for operation "${context3}".`),this.multipartStreamingDisabled=!0,res=await sendWithRetry(buildBuffered))}catch(e){if(isLangSmithNotFoundError(e))throw e;if(console.warn(`${e.message.trim()}
|
|
719
719
|
|
|
720
720
|
Context: ${context3}`),this.failedTracesDir){let bodyBuffer=await this._createNodeFetchBody(parts,boundary).catch(()=>null);bodyBuffer&&await _Client._writeTraceToFallbackDir(this.failedTracesDir,bodyBuffer,{"Content-Type":`multipart/form-data; boundary=${boundary}`},"runs/multipart",this.failedTracesMaxBytes)}}}async updateRun(runId,run,options){assertUuid(runId),run.inputs&&(run.inputs=await this.processInputs(run.inputs)),run.outputs&&(run.outputs=await this.processOutputs(run.outputs)),run.extra!=null&&"metadata"in run.extra&&(run.extra={...run.extra,metadata:await this.processMetadata(run.extra.metadata)}),run.events&&(run.events=this._filterNewTokenEvents(run.events));let data={...run,id:runId};if(!this._filterForSampling([data],!0).length)return;if(this.autoBatchTracing&&data.trace_id!==void 0&&data.dotted_order!==void 0){let otelContext=this._cloneCurrentOTELContext();if(run.end_time!==void 0&&data.parent_run_id===void 0&&this.blockOnRootRunFinalization&&!this.manualFlushMode){await this.processRunOperation({action:"update",item:data,otelContext,apiKey:options?.apiKey,apiUrl:options?.apiUrl}).catch(console.error);return}else this.processRunOperation({action:"update",item:data,otelContext,apiKey:options?.apiKey,apiUrl:options?.apiUrl}).catch(console.error);return}let headers={...this._mergedHeaders,"Content-Type":"application/json"};options?.apiKey!==void 0&&(headers["x-api-key"]=options.apiKey),options?.workspaceId!==void 0&&(headers["x-tenant-id"]=options.workspaceId);let body=serialize2(run,`Serializing payload to update run with id: ${runId}`);await this.caller.call(async()=>{let res=await this._fetch(`${options?.apiUrl??this.apiUrl}/runs/${runId}`,{method:"PATCH",headers,signal:AbortSignal.timeout(this.timeout_ms),...this.fetchOptions,body});return await raiseForStatus(res,"update run",!0),res})}async readRun(runId,{loadChildRuns}={loadChildRuns:!1}){assertUuid(runId);let run=_normalizeRunTimestamps(await this._get(`/runs/${runId}`));return loadChildRuns&&(run=await this._loadChildRuns(run)),run}async getRunUrl({runId,run,projectOpts}){if(run!==void 0){let sessionId;run.session_id?sessionId=run.session_id:projectOpts?.projectName?sessionId=(await this.readProject({projectName:projectOpts?.projectName})).id:projectOpts?.projectId?sessionId=projectOpts?.projectId:sessionId=(await this.readProject({projectName:getLangSmithEnvironmentVariable("PROJECT")||"default"})).id;let tenantId=await this._getTenantId();return`${this.getHostUrl()}/o/${tenantId}/projects/p/${sessionId}/r/${run.id}?poll=true`}else if(runId!==void 0){let run_=await this.readRun(runId);if(!run_.app_path)throw new Error(`Run ${runId} has no app_path`);return`${this.getHostUrl()}${run_.app_path}`}else throw new Error("Must provide either runId or run")}async _loadChildRuns(run){let childRuns=await toArray(this.listRuns({isRoot:!1,projectId:run.session_id,traceId:run.trace_id})),treemap={},runs={};childRuns.sort((a,b)=>(a?.dotted_order??"").localeCompare(b?.dotted_order??""));for(let childRun of childRuns){if(childRun.parent_run_id===null||childRun.parent_run_id===void 0)throw new Error(`Child run ${childRun.id} has no parent`);childRun.dotted_order?.startsWith(run.dotted_order??"")&&childRun.id!==run.id&&(childRun.parent_run_id in treemap||(treemap[childRun.parent_run_id]=[]),treemap[childRun.parent_run_id].push(childRun),runs[childRun.id]=childRun)}run.child_runs=treemap[run.id]||[];for(let runId in treemap)runId!==run.id&&(runs[runId].child_runs=treemap[runId]);return run}async*listRuns(props){let{projectId,projectName,parentRunId,traceId,referenceExampleId,startTime,executionOrder,isRoot,runType,error:error91,id,query,filter,traceFilter,treeFilter,limit:limit3,select,order}=props,projectIds=[];if(projectId&&(projectIds=Array.isArray(projectId)?projectId:[projectId]),projectName){let projectNames=Array.isArray(projectName)?projectName:[projectName],projectIds_=await Promise.all(projectNames.map(name2=>this.readProject({projectName:name2}).then(project=>project.id)));projectIds.push(...projectIds_)}let default_select=["app_path","completion_cost","completion_tokens","dotted_order","end_time","error","events","extra","feedback_stats","first_token_time","id","inputs","name","outputs","parent_run_id","parent_run_ids","prompt_cost","prompt_tokens","reference_example_id","run_type","session_id","start_time","status","tags","total_cost","total_tokens","trace_id"],body={session:projectIds.length?projectIds:null,run_type:runType,reference_example:referenceExampleId,query,filter,trace_filter:traceFilter,tree_filter:treeFilter,execution_order:executionOrder,parent_run:parentRunId,start_time:startTime?startTime.toISOString():null,error:error91,id,limit:limit3,trace:traceId,select:select||default_select,is_root:isRoot,order};body.select.includes("child_run_ids")&&warnOnce("Deprecated: 'child_run_ids' in the listRuns select parameter is deprecated and will be removed in a future version.");let runsYielded=0;for await(let runs of this._getCursorPaginatedList("/runs/query",body)){let normalized=runs.map(_normalizeRunTimestamps);if(limit3){if(runsYielded>=limit3)break;if(normalized.length+runsYielded>limit3){yield*normalized.slice(0,limit3-runsYielded);break}runsYielded+=normalized.length,yield*normalized}else yield*normalized}}async*listGroupRuns(props){let{projectId,projectName,groupBy,filter,startTime,endTime,limit:limit3,offset}=props,baseBody={session_id:projectId||(await this.readProject({projectName})).id,group_by:groupBy,filter,start_time:startTime?startTime.toISOString():null,end_time:endTime?endTime.toISOString():null,limit:Number(limit3)||100},currentOffset=Number(offset)||0,path6="/runs/group",url3=`${this.apiUrl}${path6}`;for(;;){let currentBody={...baseBody,offset:currentOffset},filteredPayload=Object.fromEntries(Object.entries(currentBody).filter(([_,value])=>value!==void 0)),body=JSON.stringify(filteredPayload),items=await(await this.caller.call(async()=>{let res=await this._fetch(url3,{method:"POST",headers:{...this._mergedHeaders,"Content-Type":"application/json"},signal:AbortSignal.timeout(this.timeout_ms),...this.fetchOptions,body});return await raiseForStatus(res,`Failed to fetch ${path6}`),res})).json(),{groups,total}=items;if(groups.length===0)break;for(let thread of groups)yield thread;if(currentOffset+=groups.length,currentOffset>=total)break}}async*readThread(props){let{threadId,projectId,projectName,isRoot=!0,limit:limit3,filter:userFilter,order="asc"}=props;if(!projectId&&!projectName)throw new Error("threadId requires projectId or projectName");let threadFilter=`eq(thread_id, ${JSON.stringify(threadId)})`,combinedFilter=userFilter?`and(${threadFilter}, ${userFilter})`:threadFilter;yield*this.listRuns({projectId:projectId??void 0,projectName:projectName??void 0,isRoot,limit:limit3,filter:combinedFilter,order})}async listThreads(props){let{projectId,projectName,limit:limit3,offset=0,filter,startTime,isRoot=!0}=props;if(!projectId&&!projectName)throw new Error("Either projectId or projectName must be provided");if(projectId&&projectName)throw new Error("Provide exactly one of projectId or projectName");let sessionId=projectId??(await this.readProject({projectName})).id,startTimeResolved=startTime??new Date(Date.now()-1440*60*1e3),bodyQuery={session:[sessionId],is_root:isRoot,limit:100,order:"desc",select:["id","name","status","start_time","end_time","thread_id","trace_id","run_type","error","tags","session_id","parent_run_id","total_tokens","total_cost","dotted_order","reference_example_id","feedback_stats","app_path","completion_cost","completion_tokens","prompt_cost","prompt_tokens","first_token_time"],start_time:startTimeResolved.toISOString()};filter!=null&&(bodyQuery.filter=filter);let threadsMap=new Map;for await(let runs of this._getCursorPaginatedList("/runs/query",bodyQuery))for(let raw of runs){let run=_normalizeRunTimestamps(raw),tid=run.thread_id;if(tid){let list=threadsMap.get(tid)??[];list.push(run),threadsMap.set(tid,list)}}let result=[];for(let[threadId,runs]of threadsMap.entries()){runs.sort((a,b)=>{let aRun=a,bRun=b,aStart=aRun.start_time??"",bStart=bRun.start_time??"";if(aStart!==bStart)return aStart.localeCompare(bStart);let aOrder=aRun.dotted_order??"",bOrder=bRun.dotted_order??"";return aOrder.localeCompare(bOrder)});let sortedTimes=[...runs.map(r=>r.start_time).filter(Boolean)].sort(),minStart=sortedTimes.length?sortedTimes[0]:"",maxStart=sortedTimes.length?sortedTimes[sortedTimes.length-1]:"";result.push({thread_id:threadId,runs,count:runs.length,filter:"",total_tokens:0,total_cost:null,min_start_time:minStart,max_start_time:maxStart,latency_p50:0,latency_p99:0,feedback_stats:null,first_inputs:"",last_outputs:"",last_error:null})}result.sort((a,b)=>{let aMax=a.max_start_time??"";return(b.max_start_time??"").localeCompare(aMax)});let withOffset=offset>0?result.slice(offset):result;return limit3!==void 0?withOffset.slice(0,limit3):withOffset}async getRunStats({id,trace:trace2,parentRun,runType,projectNames,projectIds,referenceExampleIds,startTime,endTime,error:error91,query,filter,traceFilter,treeFilter,isRoot,dataSourceType}){let projectIds_=projectIds||[];projectNames&&(projectIds_=[...projectIds||[],...await Promise.all(projectNames.map(name2=>this.readProject({projectName:name2}).then(project=>project.id)))]);let filteredPayload=Object.fromEntries(Object.entries({id,trace:trace2,parent_run:parentRun,run_type:runType,session:projectIds_,reference_example:referenceExampleIds,start_time:startTime,end_time:endTime,error:error91,query,filter,trace_filter:traceFilter,tree_filter:treeFilter,is_root:isRoot,data_source_type:dataSourceType}).filter(([_,value])=>value!==void 0)),body=JSON.stringify(filteredPayload);return await(await this.caller.call(async()=>{let res=await this._fetch(`${this.apiUrl}/runs/stats`,{method:"POST",headers:{...this._mergedHeaders,"Content-Type":"application/json"},signal:AbortSignal.timeout(this.timeout_ms),...this.fetchOptions,body});return await raiseForStatus(res,"get run stats"),res})).json()}async shareRun(runId,{shareId}={}){let data={run_id:runId,share_token:shareId||v4_default()};assertUuid(runId);let body=JSON.stringify(data),result=await(await this.caller.call(async()=>{let res=await this._fetch(`${this.apiUrl}/runs/${runId}/share`,{method:"PUT",headers:this._mergedHeaders,signal:AbortSignal.timeout(this.timeout_ms),...this.fetchOptions,body});return await raiseForStatus(res,"share run"),res})).json();if(result===null||!("share_token"in result))throw new Error("Invalid response from server");return`${this.getHostUrl()}/public/${result.share_token}/r`}async unshareRun(runId){assertUuid(runId),await this.caller.call(async()=>{let res=await this._fetch(`${this.apiUrl}/runs/${runId}/share`,{method:"DELETE",headers:this._mergedHeaders,signal:AbortSignal.timeout(this.timeout_ms),...this.fetchOptions});return await raiseForStatus(res,"unshare run",!0),res})}async readRunSharedLink(runId){assertUuid(runId);let result=await(await this.caller.call(async()=>{let res=await this._fetch(`${this.apiUrl}/runs/${runId}/share`,{method:"GET",headers:this._mergedHeaders,signal:AbortSignal.timeout(this.timeout_ms),...this.fetchOptions});return await raiseForStatus(res,"read run shared link"),res})).json();if(!(result===null||!("share_token"in result)))return`${this.getHostUrl()}/public/${result.share_token}/r`}async listSharedRuns(shareToken,{runIds}={}){let queryParams=new URLSearchParams({share_token:shareToken});if(runIds!==void 0)for(let runId of runIds)queryParams.append("id",runId);return assertUuid(shareToken),(await(await this.caller.call(async()=>{let res=await this._fetch(`${this.apiUrl}/public/${shareToken}/runs${queryParams}`,{method:"GET",headers:this._mergedHeaders,signal:AbortSignal.timeout(this.timeout_ms),...this.fetchOptions});return await raiseForStatus(res,"list shared runs"),res})).json()).map(_normalizeRunTimestamps)}async readDatasetSharedSchema(datasetId,datasetName){if(!datasetId&&!datasetName)throw new Error("Either datasetId or datasetName must be given");datasetId||(datasetId=(await this.readDataset({datasetName})).id),assertUuid(datasetId);let shareSchema=await(await this.caller.call(async()=>{let res=await this._fetch(`${this.apiUrl}/datasets/${datasetId}/share`,{method:"GET",headers:this._mergedHeaders,signal:AbortSignal.timeout(this.timeout_ms),...this.fetchOptions});return await raiseForStatus(res,"read dataset shared schema"),res})).json();return shareSchema.url=`${this.getHostUrl()}/public/${shareSchema.share_token}/d`,shareSchema}async shareDataset(datasetId,datasetName){if(!datasetId&&!datasetName)throw new Error("Either datasetId or datasetName must be given");datasetId||(datasetId=(await this.readDataset({datasetName})).id);let data={dataset_id:datasetId};assertUuid(datasetId);let body=JSON.stringify(data),shareSchema=await(await this.caller.call(async()=>{let res=await this._fetch(`${this.apiUrl}/datasets/${datasetId}/share`,{method:"PUT",headers:this._mergedHeaders,signal:AbortSignal.timeout(this.timeout_ms),...this.fetchOptions,body});return await raiseForStatus(res,"share dataset"),res})).json();return shareSchema.url=`${this.getHostUrl()}/public/${shareSchema.share_token}/d`,shareSchema}async unshareDataset(datasetId){assertUuid(datasetId),await this.caller.call(async()=>{let res=await this._fetch(`${this.apiUrl}/datasets/${datasetId}/share`,{method:"DELETE",headers:this._mergedHeaders,signal:AbortSignal.timeout(this.timeout_ms),...this.fetchOptions});return await raiseForStatus(res,"unshare dataset",!0),res})}async readSharedDataset(shareToken){return assertUuid(shareToken),await(await this.caller.call(async()=>{let res=await this._fetch(`${this.apiUrl}/public/${shareToken}/datasets`,{method:"GET",headers:this._mergedHeaders,signal:AbortSignal.timeout(this.timeout_ms),...this.fetchOptions});return await raiseForStatus(res,"read shared dataset"),res})).json()}async listSharedExamples(shareToken,options){let params={};options?.exampleIds&&(params.id=options.exampleIds);let urlParams=new URLSearchParams;Object.entries(params).forEach(([key,value])=>{Array.isArray(value)?value.forEach(v=>urlParams.append(key,v)):urlParams.append(key,value)});let response=await this.caller.call(async()=>{let res=await this._fetch(`${this.apiUrl}/public/${shareToken}/examples?${urlParams.toString()}`,{method:"GET",headers:this._mergedHeaders,signal:AbortSignal.timeout(this.timeout_ms),...this.fetchOptions});return await raiseForStatus(res,"list shared examples"),res}),result=await response.json();if(!response.ok)throw"detail"in result?new Error(`Failed to list shared examples.
|
|
721
721
|
Status: ${response.status}
|
|
@@ -2242,7 +2242,7 @@ Good times to use think:
|
|
|
2242
2242
|
- When you need to choose between several possible strategies
|
|
2243
2243
|
- When debugging \u2014 to reason about what might have gone wrong
|
|
2244
2244
|
|
|
2245
|
-
You do NOT need to use think for every step \u2014 only when genuine reasoning will improve the quality of your next action.`,schema:external_exports.object({thought:external_exports.string().describe("Your reasoning, analysis, or plan.")})})}var init_think_tool=__esm({"dist/middleware/think-tool.js"(){"use strict";init_tools2();init_zod4()}});function buildMiddlewareStack(config4={}){let stack=[];stack.push(createLoopDetectionMiddleware(config4.loopDetection)),stack.push(createExecutionBudgetMiddleware(config4.executionBudget)),stack.push(createToolTruncationMiddleware(config4.toolTruncation));let gracefulStop=createGracefulStopMiddleware();if(stack.push(gracefulStop),config4.approvalGate&&stack.push(createApprovalGateMiddleware(config4.approvalGate)),config4.costCap&&config4.costCap.maxCostUsd>0){let costCapMiddleware=createCostCapMiddleware(config4.costCap);return stack.push(costCapMiddleware),stack.push(createErrorHintsMiddleware()),stack.push(createOtelSpansMiddleware(config4.otelSpans)),{middleware:stack,gracefulStop,costCap:costCapMiddleware}}return stack.push(createErrorHintsMiddleware()),stack.push(createOtelSpansMiddleware(config4.otelSpans)),{middleware:stack,gracefulStop,costCap:null}}var init_middleware4=__esm({"dist/middleware/index.js"(){"use strict";init_loop_detection();init_execution_budget();init_tool_truncation();init_graceful_stop();init_approval_gate();init_cost_cap();init_error_hints();init_otel_spans();init_think_tool()}});function parsePricingTable2(json5){if(!json5||typeof json5!="object")return[];let models=json5.models;return Array.isArray(models)?models.filter(m=>m.pricing!=null).map(m=>({model:m.id,displayName:m.displayName,costTier:m.costTier??"standard",inputPricePerMillion:m.pricing.inputPricePerMillion,outputPricePerMillion:m.pricing.outputPricePerMillion,cacheWritePricePerMillion:m.pricing.cacheWritePricePerMillion,cacheReadPricePerMillion:m.pricing.cacheReadPricePerMillion})):[]}async function fetchFromApi2(){let url3=`${process.env.STIGMER_CLOUD_API_URL??DEFAULT_API_URL3}/v1/proxy/model-registry`,headers={},token=process.env.STIGMER_TOKEN??process.env.STIGMER_AUTH_TOKEN;token&&(headers.Authorization=`Bearer ${token}`);let res=await fetch(url3,{headers});if(!res.ok)throw new Error(`Model registry fetch failed: ${res.status}`);let data=await res.json(),table=parsePricingTable2(data);if(table.length===0)throw new Error("Model registry returned no models with pricing");return table}async function getPricingTable2(){return cache3&&Date.now()<cache3.expiresAt?cache3.data:inflightFetch2||(inflightFetch2=fetchFromApi2().then(data=>(cache3={data,expiresAt:Date.now()+36e5},data)).catch(err=>{console.warn(`Failed to fetch model registry, using default pricing: ${err}`);let fallback=[DEFAULT_PRICING2];return cache3={data:fallback,expiresAt:Date.now()+36e5},fallback}).finally(()=>{inflightFetch2=null}),inflightFetch2)}var DEFAULT_API_URL3,DEFAULT_PRICING2,cache3,inflightFetch2,init_model_pricing_data2=__esm({"dist/shared/model-pricing-data.js"(){"use strict";DEFAULT_API_URL3="https://api.stigmer.ai",DEFAULT_PRICING2={model:"unknown",displayName:"Unknown",costTier:"standard",inputPricePerMillion:1.25,outputPricePerMillion:6,cacheWritePricePerMillion:1.25,cacheReadPricePerMillion:.25},cache3=null,inflightFetch2=null}});async function ensureLoaded2(){return initPromise2||(initPromise2=getPricingTable2().then(table=>{pricingByModel2=new Map(table.map(entry=>[entry.model,entry]))}),initPromise2)}function getMap2(){return pricingByModel2||(console.warn("Model pricing accessed before ensureLoaded() \u2014 returning empty map"),new Map)}function getModelPricing(model){return getMap2().get(model)??{...DEFAULT_PRICING2,model}}function computeTurnCost2(pricing,inputTokens,outputTokens,cacheWriteTokens,cacheReadTokens){return(inputTokens*pricing.inputPricePerMillion+outputTokens*pricing.outputPricePerMillion+cacheWriteTokens*pricing.cacheWritePricePerMillion+cacheReadTokens*pricing.cacheReadPricePerMillion)/1e6}function computeLlmCostMicros(modelId,inputTokens,outputTokens){let pricing=getModelPricing(modelId),costUsd=computeTurnCost2(pricing,inputTokens,outputTokens,0,0);return Math.round(costUsd*1e6)}var pricingByModel2,initPromise2,init_model_pricing2=__esm({"dist/shared/model-pricing.js"(){"use strict";init_model_pricing_data2();pricingByModel2=null,initPromise2=null}});var model_registry_exports={};__export(model_registry_exports,{_resetRegistryCache:()=>_resetRegistryCache,getDefaultModel:()=>getDefaultModel,getEconomyModel:()=>getEconomyModel,getSummarizationModel:()=>getSummarizationModel,isModelRegistered:()=>isModelRegistered,resolveToApiModelId:()=>resolveToApiModelId});function parseRegistry(json5){if(!json5||typeof json5!="object")return[];let models=json5.models;return Array.isArray(models)?models.filter(m=>typeof m.id=="string"&&typeof m.provider=="string").map(m=>({id:m.id,apiModelId:typeof m.apiModelId=="string"?m.apiModelId:void 0,provider:m.provider,costTier:m.costTier??"standard",harness:m.harness??"native",featured:!!m.featured})):[]}async function fetchRegistry(){let url3=`${process.env.STIGMER_CLOUD_API_URL??DEFAULT_API_URL4}/v1/proxy/model-registry`,headers={},token=process.env.STIGMER_TOKEN??process.env.STIGMER_AUTH_TOKEN;token&&(headers.Authorization=`Bearer ${token}`);let res=await fetch(url3,{headers});if(!res.ok)throw new Error(`Model registry fetch failed: ${res.status}`);let data=await res.json();return parseRegistry(data)}async function getRegistry(){return cache4&&Date.now()<cache4.expiresAt?cache4.models:inflightFetch3||(inflightFetch3=fetchRegistry().then(models=>(cache4={models,expiresAt:Date.now()+36e5},models)).catch(err=>(console.warn(`Failed to fetch model registry for provider lookup: ${err}`),cache4={models:[],expiresAt:Date.now()+36e5},[])).finally(()=>{inflightFetch3=null}),inflightFetch3)}async function isModelRegistered(modelId){let registry5=await getRegistry();return registry5.length===0?!1:registry5.some(m=>m.id===modelId)}async function getSummarizationModel(primaryModel){return getEconomyModel(primaryModel)}async function getEconomyModel(primaryModel){let registry5=await getRegistry();if(registry5.length===0)return console.warn(`Model registry empty \u2014 falling back to primary model "${primaryModel}" for economy tier`),primaryModel;let primary=registry5.find(m=>m.id===primaryModel),targetProvider=primary?.provider??"anthropic",sameProviderEconomy=registry5.find(m=>m.provider===targetProvider&&m.costTier==="economy"&&m.harness==="native");if(sameProviderEconomy)return sameProviderEconomy.id;let anyEconomy=registry5.find(m=>m.costTier==="economy"&&m.harness==="native");return anyEconomy?anyEconomy.id:(primary||console.warn(`Model "${primaryModel}" not found in registry and no economy fallback available`),primaryModel)}async function getDefaultModel(){let registry5=await getRegistry();if(registry5.length===0)return console.warn(`Model registry empty \u2014 using fallback default model "${FALLBACK_DEFAULT_MODEL}"`),FALLBACK_DEFAULT_MODEL;let featuredStandard=registry5.find(m=>m.featured&&m.costTier==="standard"&&m.harness==="native");if(featuredStandard)return featuredStandard.apiModelId??featuredStandard.id;let anyStandard=registry5.find(m=>m.costTier==="standard"&&m.harness==="native");return anyStandard?anyStandard.apiModelId??anyStandard.id:FALLBACK_DEFAULT_MODEL}async function resolveToApiModelId(registryId){if(!registryId)return registryId;let registry5=await getRegistry();if(registry5.length===0)return registryId;let entry=registry5.find(m=>m.id===registryId);return entry?entry.apiModelId??registryId:registryId}function _resetRegistryCache(){cache4=null,inflightFetch3=null}var DEFAULT_API_URL4,cache4,inflightFetch3,FALLBACK_DEFAULT_MODEL,init_model_registry=__esm({"dist/shared/model-registry.js"(){"use strict";DEFAULT_API_URL4="https://api.stigmer.ai",cache4=null,inflightFetch3=null;FALLBACK_DEFAULT_MODEL="claude-sonnet-4-6"}});function extractToolCalls(content){let toolCalls=[];for(let block of content)block.type==="tool_use"&&toolCalls.push({name:block.name,args:block.input,id:block.id,type:"tool_call"});return toolCalls}var AnthropicToolsOutputParser,init_output_parsers3=__esm({"node_modules/@langchain/anthropic/dist/output_parsers.js"(){init_types9();init_output_parsers();AnthropicToolsOutputParser=class extends BaseLLMOutputParser{static lc_name(){return"AnthropicToolsOutputParser"}lc_namespace=["langchain","anthropic","output_parsers"];returnId=!1;keyName;returnSingle=!1;zodSchema;serializableSchema;constructor(params){super(params),this.keyName=params.keyName,this.returnSingle=params.returnSingle??this.returnSingle,this.zodSchema=params.zodSchema,this.serializableSchema=params.serializableSchema}async _validateResult(result){let parsedResult=result;if(typeof result=="string")try{parsedResult=JSON.parse(result)}catch(e){throw new OutputParserException(`Failed to parse. Text: "${JSON.stringify(result,null,2)}". Error: ${JSON.stringify(e.message)}`,result)}else parsedResult=result;if(this.serializableSchema!==void 0){let validated=await this.serializableSchema["~standard"].validate(parsedResult);if(validated.issues)throw new OutputParserException(`Failed to parse. Text: "${JSON.stringify(parsedResult,null,2)}". Error: ${JSON.stringify(validated.issues)}`,JSON.stringify(parsedResult,null,2));return validated.value}if(this.zodSchema===void 0)return parsedResult;let zodParsedResult=await interopSafeParseAsync(this.zodSchema,parsedResult);if(zodParsedResult.success)return zodParsedResult.data;throw new OutputParserException(`Failed to parse. Text: "${JSON.stringify(result,null,2)}". Error: ${JSON.stringify(zodParsedResult.error.issues)}`,JSON.stringify(parsedResult,null,2))}async parseResult(generations){let tools3=generations.flatMap(generation=>{let{message}=generation;return Array.isArray(message.content)?extractToolCalls(message.content)[0]:[]});if(tools3[0]===void 0)throw new Error("No parseable tool calls provided to AnthropicToolsOutputParser.");let[tool2]=tools3;return await this._validateResult(tool2.args)}}}});function handleToolChoice(toolChoice){if(toolChoice)return toolChoice==="any"||toolChoice==="required"?{type:"any"}:toolChoice==="auto"?{type:"auto"}:toolChoice==="none"?{type:"none"}:typeof toolChoice=="string"?{type:"tool",name:toolChoice}:toolChoice}var AnthropicToolExtrasSchema,ANTHROPIC_TOOL_BETAS,init_tools6=__esm({"node_modules/@langchain/anthropic/dist/utils/tools.js"(){init_v43();AnthropicToolExtrasSchema=object({cache_control:custom2().optional().nullable(),defer_loading:boolean2().optional(),input_examples:array(unknown()).optional(),allowed_callers:array(unknown()).optional(),strict:boolean2().optional()}),ANTHROPIC_TOOL_BETAS={tool_search_tool_regex_20251119:"advanced-tool-use-2025-11-20",tool_search_tool_bm25_20251119:"advanced-tool-use-2025-11-20",memory_20250818:"context-management-2025-06-27",web_fetch_20250910:"web-fetch-2025-09-10",code_execution_20250825:"code-execution-2025-08-25",computer_20251124:"computer-use-2025-11-24",computer_20250124:"computer-use-2025-01-24",mcp_toolset:"mcp-client-2025-11-20"}}});function _isAnthropicThinkingBlock(block){return typeof block=="object"&&block!==null&&"type"in block&&block.type==="thinking"}function _isAnthropicRedactedThinkingBlock(block){return typeof block=="object"&&block!==null&&"type"in block&&block.type==="redacted_thinking"}function _isAnthropicCompactionBlock(block){return typeof block=="object"&&block!==null&&"type"in block&&block.type==="compaction"}function _isAnthropicSearchResultBlock(block){return typeof block=="object"&&block!==null&&"type"in block&&block.type==="search_result"}function _isAnthropicImageBlockParam(block){return typeof block!="object"||block==null||!("type"in block)||block.type!=="image"||!("source"in block)||typeof block.source!="object"||block.source==null||!("type"in block.source)?!1:block.source.type==="base64"?!(!("media_type"in block.source)||typeof block.source.media_type!="string"||!("data"in block.source)||typeof block.source.data!="string"):block.source.type==="url"?!(!("url"in block.source)||typeof block.source.url!="string"):!1}var standardContentBlockConverter,init_content2=__esm({"node_modules/@langchain/anthropic/dist/utils/content.js"(){init_messages2();standardContentBlockConverter={providerName:"anthropic",fromStandardTextBlock(block){return{type:"text",text:block.text,..."citations"in(block.metadata??{})?{citations:block.metadata.citations}:{},..."cache_control"in(block.metadata??{})?{cache_control:block.metadata.cache_control}:{}}},fromStandardImageBlock(block){if(block.source_type==="url"){let data=parseBase64DataUrl({dataUrl:block.url,asTypedArray:!1});return data?{type:"image",source:{type:"base64",data:data.data,media_type:data.mime_type},..."cache_control"in(block.metadata??{})?{cache_control:block.metadata.cache_control}:{}}:{type:"image",source:{type:"url",url:block.url},..."cache_control"in(block.metadata??{})?{cache_control:block.metadata.cache_control}:{}}}else{if(block.source_type==="base64")return{type:"image",source:{type:"base64",data:block.data,media_type:block.mime_type??""},..."cache_control"in(block.metadata??{})?{cache_control:block.metadata.cache_control}:{}};throw new Error(`Unsupported image source type: ${block.source_type}`)}},fromStandardFileBlock(block){let mime_type=(block.mime_type??"").split(";")[0];if(block.source_type==="url"){if(mime_type==="application/pdf"||mime_type==="")return{type:"document",source:{type:"url",url:block.url},..."cache_control"in(block.metadata??{})?{cache_control:block.metadata.cache_control}:{},..."citations"in(block.metadata??{})?{citations:block.metadata.citations}:{},..."context"in(block.metadata??{})?{context:block.metadata.context}:{},..."title"in(block.metadata??{})?{title:block.metadata.title}:{}};throw new Error(`Unsupported file mime type for file url source: ${block.mime_type}`)}else if(block.source_type==="text"){if(mime_type==="text/plain"||mime_type==="")return{type:"document",source:{type:"text",data:block.text,media_type:block.mime_type??""},..."cache_control"in(block.metadata??{})?{cache_control:block.metadata.cache_control}:{},..."citations"in(block.metadata??{})?{citations:block.metadata.citations}:{},..."context"in(block.metadata??{})?{context:block.metadata.context}:{},..."title"in(block.metadata??{})?{title:block.metadata.title}:{}};throw new Error(`Unsupported file mime type for file text source: ${block.mime_type}`)}else if(block.source_type==="base64"){if(mime_type==="application/pdf"||mime_type==="")return{type:"document",source:{type:"base64",data:block.data,media_type:"application/pdf"},..."cache_control"in(block.metadata??{})?{cache_control:block.metadata.cache_control}:{},..."citations"in(block.metadata??{})?{citations:block.metadata.citations}:{},..."context"in(block.metadata??{})?{context:block.metadata.context}:{},..."title"in(block.metadata??{})?{title:block.metadata.title}:{}};if(["image/jpeg","image/png","image/gif","image/webp"].includes(mime_type))return{type:"document",source:{type:"content",content:[{type:"image",source:{type:"base64",data:block.data,media_type:mime_type}}]},..."cache_control"in(block.metadata??{})?{cache_control:block.metadata.cache_control}:{},..."citations"in(block.metadata??{})?{citations:block.metadata.citations}:{},..."context"in(block.metadata??{})?{context:block.metadata.context}:{},..."title"in(block.metadata??{})?{title:block.metadata.title}:{}};throw new Error(`Unsupported file mime type for file base64 source: ${block.mime_type}`)}else throw new Error(`Unsupported file source type: ${block.source_type}`)}}}});var iife4,init_utils19=__esm({"node_modules/@langchain/anthropic/dist/utils/index.js"(){iife4=fn=>fn()}});function _isStandardAnnotation(annotation){return typeof annotation=="object"&&annotation!==null&&"type"in annotation&&annotation.type==="citation"}function _formatStandardCitations(annotations){function*iterateAnnotations(){for(let annotation of annotations)_isStandardAnnotation(annotation)&&(annotation.source==="char"?yield{type:"char_location",file_id:annotation.url??"",start_char_index:annotation.startIndex??0,end_char_index:annotation.endIndex??0,document_title:annotation.title??null,document_index:0,cited_text:annotation.citedText??""}:annotation.source==="page"?yield{type:"page_location",file_id:annotation.url??"",start_page_number:annotation.startIndex??0,end_page_number:annotation.endIndex??0,document_title:annotation.title??null,document_index:0,cited_text:annotation.citedText??""}:annotation.source==="block"?yield{type:"content_block_location",file_id:annotation.url??"",start_block_index:annotation.startIndex??0,end_block_index:annotation.endIndex??0,document_title:annotation.title??null,document_index:0,cited_text:annotation.citedText??""}:annotation.source==="url"?yield{type:"web_search_result_location",url:annotation.url??"",title:annotation.title??null,encrypted_index:String(annotation.startIndex??0),cited_text:annotation.citedText??""}:annotation.source==="search"&&(yield{type:"search_result_location",title:annotation.title??null,start_block_index:annotation.startIndex??0,end_block_index:annotation.endIndex??0,search_result_index:0,source:annotation.source??"",cited_text:annotation.citedText??""}))}return Array.from(iterateAnnotations())}function _formatBase64Data(data){return typeof data=="string"?data:_encodeUint8Array(data)}function _encodeUint8Array(data){let output=[];for(let i2=0,{length}=data;i2<length;i2++)output.push(String.fromCharCode(data[i2]));return btoa(output.join(""))}function _normalizeMimeType(mimeType){return(mimeType??"").split(";")[0].toLowerCase()}function _extractMetadataValue(metadata,key){if(metadata!=null&&typeof metadata=="object"&&key in metadata)return metadata[key]}function _applyDocumentMetadata(block,metadata){let cacheControl=_extractMetadataValue(metadata,"cache_control");cacheControl!==void 0&&(block.cache_control=cacheControl);let citations=_extractMetadataValue(metadata,"citations");citations!==void 0&&(block.citations=citations);let context3=_extractMetadataValue(metadata,"context");context3!==void 0&&(block.context=context3);let title=_extractMetadataValue(metadata,"title");return title!==void 0&&(block.title=title),block}function _applyImageMetadata(block,metadata){let cacheControl=_extractMetadataValue(metadata,"cache_control");return cacheControl!==void 0&&(block.cache_control=cacheControl),block}function _hasAllowedImageMimeType(mimeType){return new Set(["image/jpeg","image/png","image/gif","image/webp"]).has(mimeType)}function _formatStandardContent(message){let result=[],responseMetadata=message.response_metadata,isAnthropicMessage="model_provider"in responseMetadata&&responseMetadata?.model_provider==="anthropic";for(let block of message.contentBlocks)if(block.type==="text")block.annotations?result.push({type:"text",text:block.text,citations:_formatStandardCitations(block.annotations)}):result.push({type:"text",text:block.text});else if(block.type==="tool_call")result.push({type:"tool_use",id:block.id??"",name:block.name,input:block.args});else if(block.type==="tool_call_chunk"){let input=iife4(()=>{if(typeof block.args!="string")return block.args;try{return JSON.parse(block.args)}catch{return{}}});result.push({type:"tool_use",id:block.id??"",name:block.name??"",input})}else if(block.type==="reasoning"&&isAnthropicMessage)result.push({type:"thinking",thinking:block.reasoning,signature:String(block.signature)});else if(block.type==="server_tool_call"&&isAnthropicMessage)block.name==="web_search"?result.push({type:"server_tool_use",name:block.name,id:block.id??"",input:block.args}):block.name==="code_execution"&&result.push({type:"server_tool_use",name:block.name,id:block.id??"",input:block.args});else if(block.type==="server_tool_call_result"&&isAnthropicMessage)if(block.name==="web_search"&&Array.isArray(block.output.urls)){let content=block.output.urls.map(url3=>({type:"web_search_result",title:"",encrypted_content:"",url:url3}));result.push({type:"web_search_tool_result",tool_use_id:block.toolCallId??"",content})}else block.name==="code_execution"?result.push({type:"code_execution_tool_result",tool_use_id:block.toolCallId??"",content:block.output}):block.name==="mcp_tool_result"&&result.push({type:"mcp_tool_result",tool_use_id:block.toolCallId??"",content:block.output});else{if(block.type==="audio")throw new Error("Anthropic does not support audio content blocks.");if(block.type==="file"){let metadata=block.metadata;if(block.fileId){result.push(_applyDocumentMetadata({type:"document",source:{type:"file",file_id:block.fileId}},metadata));continue}if(block.url){let mimeType=_normalizeMimeType(block.mimeType);if(mimeType==="application/pdf"||mimeType===""){result.push(_applyDocumentMetadata({type:"document",source:{type:"url",url:block.url}},metadata));continue}}if(block.data){let mimeType=_normalizeMimeType(block.mimeType);if(mimeType===""||mimeType==="application/pdf")result.push(_applyDocumentMetadata({type:"document",source:{type:"base64",data:_formatBase64Data(block.data),media_type:"application/pdf"}},metadata));else if(mimeType==="text/plain")result.push(_applyDocumentMetadata({type:"document",source:{type:"text",data:_formatBase64Data(block.data),media_type:"text/plain"}},metadata));else if(_hasAllowedImageMimeType(mimeType))result.push(_applyDocumentMetadata({type:"document",source:{type:"content",content:[{type:"image",source:{type:"base64",data:_formatBase64Data(block.data),media_type:mimeType}}]}},metadata));else throw new Error(`Unsupported file mime type for Anthropic base64 source: ${mimeType}`);continue}throw new Error("File content block must include a fileId, url, or data property.")}else if(block.type==="image"){let metadata=block.metadata;if(block.fileId){result.push(_applyImageMetadata({type:"image",source:{type:"file",file_id:block.fileId}},metadata));continue}if(block.url){result.push(_applyImageMetadata({type:"image",source:{type:"url",url:block.url}},metadata));continue}if(block.data){let mimeType=_normalizeMimeType(block.mimeType)||"image/png";_hasAllowedImageMimeType(mimeType)&&result.push(_applyImageMetadata({type:"image",source:{type:"base64",data:_formatBase64Data(block.data),media_type:mimeType}},metadata));continue}throw new Error("Image content block must include a fileId, url, or data property.")}else block.type==="video"||(block.type==="text-plain"?block.data&&result.push(_applyDocumentMetadata({type:"document",source:{type:"text",data:_formatBase64Data(block.data),media_type:"text/plain"}},block.metadata)):block.type==="non_standard"&&isAnthropicMessage&&result.push(block.value))}return result}var init_standard=__esm({"node_modules/@langchain/anthropic/dist/utils/standard.js"(){init_utils19()}});function _formatImage(imageUrl){let parsed=parseBase64DataUrl({dataUrl:imageUrl});if(parsed)return{type:"base64",media_type:parsed.mime_type,data:parsed.data};let parsedUrl;try{parsedUrl=new URL(imageUrl)}catch{throw new Error([`Malformed image URL: ${JSON.stringify(imageUrl)}. Content blocks of type 'image_url' must be a valid http, https, or base64-encoded data URL.`,"Example: data:image/png;base64,/9j/4AAQSk...","Example: https://example.com/image.jpg"].join(`
|
|
2245
|
+
You do NOT need to use think for every step \u2014 only when genuine reasoning will improve the quality of your next action.`,schema:external_exports.object({thought:external_exports.string().describe("Your reasoning, analysis, or plan.")})})}var init_think_tool=__esm({"dist/middleware/think-tool.js"(){"use strict";init_tools2();init_zod4()}});function buildMiddlewareStack(config4={}){let stack=[];stack.push(createLoopDetectionMiddleware(config4.loopDetection)),stack.push(createExecutionBudgetMiddleware(config4.executionBudget)),stack.push(createToolTruncationMiddleware(config4.toolTruncation));let gracefulStop=createGracefulStopMiddleware();if(stack.push(gracefulStop),config4.approvalGate&&stack.push(createApprovalGateMiddleware(config4.approvalGate)),config4.costCap&&config4.costCap.maxCostUsd>0){let costCapMiddleware=createCostCapMiddleware(config4.costCap);return stack.push(costCapMiddleware),stack.push(createErrorHintsMiddleware()),stack.push(createOtelSpansMiddleware(config4.otelSpans)),{middleware:stack,gracefulStop,costCap:costCapMiddleware}}return stack.push(createErrorHintsMiddleware()),stack.push(createOtelSpansMiddleware(config4.otelSpans)),{middleware:stack,gracefulStop,costCap:null}}var init_middleware4=__esm({"dist/middleware/index.js"(){"use strict";init_loop_detection();init_execution_budget();init_tool_truncation();init_graceful_stop();init_approval_gate();init_cost_cap();init_error_hints();init_otel_spans();init_think_tool()}});function parsePricingTable2(json5){if(!json5||typeof json5!="object")return[];let models=json5.models;return Array.isArray(models)?models.filter(m=>m.pricing!=null).map(m=>({model:m.id,displayName:m.displayName,costTier:m.costTier??"standard",inputPricePerMillion:m.pricing.inputPricePerMillion,outputPricePerMillion:m.pricing.outputPricePerMillion,cacheWritePricePerMillion:m.pricing.cacheWritePricePerMillion,cacheReadPricePerMillion:m.pricing.cacheReadPricePerMillion})):[]}async function fetchFromApi2(){let res=await fetch(resolveModelRegistryUrl(),{headers:buildRegistryHeaders()});if(!res.ok)throw new Error(`Model registry fetch failed: ${res.status}`);let data=await res.json(),table=parsePricingTable2(data);if(table.length===0)throw new Error("Model registry returned no models with pricing");return table}async function getPricingTable2(){return cache3&&Date.now()<cache3.expiresAt?cache3.data:inflightFetch2||(inflightFetch2=fetchFromApi2().then(data=>(cache3={data,expiresAt:Date.now()+CACHE_TTL_MS2},data)).catch(err=>{console.warn(`Failed to fetch model registry, using default pricing: ${err}`);let fallback=[DEFAULT_PRICING2];return cache3={data:fallback,expiresAt:Date.now()+CACHE_TTL_MS2},fallback}).finally(()=>{inflightFetch2=null}),inflightFetch2)}var CACHE_TTL_MS2,DEFAULT_PRICING2,cache3,inflightFetch2,init_model_pricing_data2=__esm({"dist/shared/model-pricing-data.js"(){"use strict";init_registry_endpoint();CACHE_TTL_MS2=36e5,DEFAULT_PRICING2={model:"unknown",displayName:"Unknown",costTier:"standard",inputPricePerMillion:1.25,outputPricePerMillion:6,cacheWritePricePerMillion:1.25,cacheReadPricePerMillion:.25},cache3=null,inflightFetch2=null}});async function ensureLoaded2(){return initPromise2||(initPromise2=getPricingTable2().then(table=>{pricingByModel2=new Map(table.map(entry=>[entry.model,entry]))}),initPromise2)}function getMap2(){return pricingByModel2||(console.warn("Model pricing accessed before ensureLoaded() \u2014 returning empty map"),new Map)}function getModelPricing(model){return getMap2().get(model)??{...DEFAULT_PRICING2,model}}function computeTurnCost2(pricing,inputTokens,outputTokens,cacheWriteTokens,cacheReadTokens){return(inputTokens*pricing.inputPricePerMillion+outputTokens*pricing.outputPricePerMillion+cacheWriteTokens*pricing.cacheWritePricePerMillion+cacheReadTokens*pricing.cacheReadPricePerMillion)/1e6}function computeLlmCostMicros(modelId,inputTokens,outputTokens){let pricing=getModelPricing(modelId),costUsd=computeTurnCost2(pricing,inputTokens,outputTokens,0,0);return Math.round(costUsd*1e6)}var pricingByModel2,initPromise2,init_model_pricing2=__esm({"dist/shared/model-pricing.js"(){"use strict";init_model_pricing_data2();pricingByModel2=null,initPromise2=null}});var model_registry_exports={};__export(model_registry_exports,{_resetRegistryCache:()=>_resetRegistryCache,getDefaultModel:()=>getDefaultModel,getEconomyModel:()=>getEconomyModel,getSummarizationModel:()=>getSummarizationModel,isModelRegistered:()=>isModelRegistered,resolveToApiModelId:()=>resolveToApiModelId});function parseRegistry(json5){if(!json5||typeof json5!="object")return[];let models=json5.models;return Array.isArray(models)?models.filter(m=>typeof m.id=="string"&&typeof m.provider=="string").map(m=>({id:m.id,apiModelId:typeof m.apiModelId=="string"?m.apiModelId:void 0,provider:m.provider,costTier:m.costTier??"standard",harness:m.harness??"native",featured:!!m.featured})):[]}async function fetchRegistry(){let url3=resolveModelRegistryUrl(),res=await fetch(url3,{headers:buildRegistryHeaders()});if(!res.ok)throw new Error(`Model registry fetch failed: ${res.status}`);let data=await res.json();return parseRegistry(data)}async function getRegistry(){return cache4&&Date.now()<cache4.expiresAt?cache4.models:inflightFetch3||(inflightFetch3=fetchRegistry().then(models=>(cache4={models,expiresAt:Date.now()+CACHE_TTL_MS3},models)).catch(err=>(console.warn(`Failed to fetch model registry from ${resolveModelRegistryUrl()}: ${err}. Model id resolution degrades to pass-through until the next attempt (${FAILURE_CACHE_TTL_MS/1e3}s). Check that the control plane is reachable and, for cloud endpoints, that STIGMER_TOKEN is set.`),cache4={models:[],expiresAt:Date.now()+FAILURE_CACHE_TTL_MS},[])).finally(()=>{inflightFetch3=null}),inflightFetch3)}async function isModelRegistered(modelId){let registry5=await getRegistry();return registry5.length===0?!1:registry5.some(m=>m.id===modelId)}async function getSummarizationModel(primaryModel){return getEconomyModel(primaryModel)}async function getEconomyModel(primaryModel){let registry5=await getRegistry();if(registry5.length===0)return console.warn(`Model registry empty \u2014 falling back to primary model "${primaryModel}" for economy tier`),primaryModel;let primary=registry5.find(m=>m.id===primaryModel),targetProvider=primary?.provider??"anthropic",sameProviderEconomy=registry5.find(m=>m.provider===targetProvider&&m.costTier==="economy"&&m.harness==="native");if(sameProviderEconomy)return sameProviderEconomy.id;let anyEconomy=registry5.find(m=>m.costTier==="economy"&&m.harness==="native");return anyEconomy?anyEconomy.id:(primary||console.warn(`Model "${primaryModel}" not found in registry and no economy fallback available`),primaryModel)}async function getDefaultModel(){let registry5=await getRegistry();if(registry5.length===0)return console.warn(`Model registry empty \u2014 using fallback default model "${FALLBACK_DEFAULT_MODEL}"`),FALLBACK_DEFAULT_MODEL;let featuredStandard=registry5.find(m=>m.featured&&m.costTier==="standard"&&m.harness==="native");if(featuredStandard)return featuredStandard.apiModelId??featuredStandard.id;let anyStandard=registry5.find(m=>m.costTier==="standard"&&m.harness==="native");return anyStandard?anyStandard.apiModelId??anyStandard.id:FALLBACK_DEFAULT_MODEL}async function resolveToApiModelId(registryId){if(!registryId)return registryId;let registry5=await getRegistry();if(registry5.length===0)return registryId;let entry=registry5.find(m=>m.id===registryId);return entry?entry.apiModelId??registryId:registryId}function _resetRegistryCache(){cache4=null,inflightFetch3=null}var CACHE_TTL_MS3,FAILURE_CACHE_TTL_MS,cache4,inflightFetch3,FALLBACK_DEFAULT_MODEL,init_model_registry=__esm({"dist/shared/model-registry.js"(){"use strict";init_registry_endpoint();CACHE_TTL_MS3=36e5,FAILURE_CACHE_TTL_MS=6e4,cache4=null,inflightFetch3=null;FALLBACK_DEFAULT_MODEL="claude-sonnet-4-6"}});function extractToolCalls(content){let toolCalls=[];for(let block of content)block.type==="tool_use"&&toolCalls.push({name:block.name,args:block.input,id:block.id,type:"tool_call"});return toolCalls}var AnthropicToolsOutputParser,init_output_parsers3=__esm({"node_modules/@langchain/anthropic/dist/output_parsers.js"(){init_types9();init_output_parsers();AnthropicToolsOutputParser=class extends BaseLLMOutputParser{static lc_name(){return"AnthropicToolsOutputParser"}lc_namespace=["langchain","anthropic","output_parsers"];returnId=!1;keyName;returnSingle=!1;zodSchema;serializableSchema;constructor(params){super(params),this.keyName=params.keyName,this.returnSingle=params.returnSingle??this.returnSingle,this.zodSchema=params.zodSchema,this.serializableSchema=params.serializableSchema}async _validateResult(result){let parsedResult=result;if(typeof result=="string")try{parsedResult=JSON.parse(result)}catch(e){throw new OutputParserException(`Failed to parse. Text: "${JSON.stringify(result,null,2)}". Error: ${JSON.stringify(e.message)}`,result)}else parsedResult=result;if(this.serializableSchema!==void 0){let validated=await this.serializableSchema["~standard"].validate(parsedResult);if(validated.issues)throw new OutputParserException(`Failed to parse. Text: "${JSON.stringify(parsedResult,null,2)}". Error: ${JSON.stringify(validated.issues)}`,JSON.stringify(parsedResult,null,2));return validated.value}if(this.zodSchema===void 0)return parsedResult;let zodParsedResult=await interopSafeParseAsync(this.zodSchema,parsedResult);if(zodParsedResult.success)return zodParsedResult.data;throw new OutputParserException(`Failed to parse. Text: "${JSON.stringify(result,null,2)}". Error: ${JSON.stringify(zodParsedResult.error.issues)}`,JSON.stringify(parsedResult,null,2))}async parseResult(generations){let tools3=generations.flatMap(generation=>{let{message}=generation;return Array.isArray(message.content)?extractToolCalls(message.content)[0]:[]});if(tools3[0]===void 0)throw new Error("No parseable tool calls provided to AnthropicToolsOutputParser.");let[tool2]=tools3;return await this._validateResult(tool2.args)}}}});function handleToolChoice(toolChoice){if(toolChoice)return toolChoice==="any"||toolChoice==="required"?{type:"any"}:toolChoice==="auto"?{type:"auto"}:toolChoice==="none"?{type:"none"}:typeof toolChoice=="string"?{type:"tool",name:toolChoice}:toolChoice}var AnthropicToolExtrasSchema,ANTHROPIC_TOOL_BETAS,init_tools6=__esm({"node_modules/@langchain/anthropic/dist/utils/tools.js"(){init_v43();AnthropicToolExtrasSchema=object({cache_control:custom2().optional().nullable(),defer_loading:boolean2().optional(),input_examples:array(unknown()).optional(),allowed_callers:array(unknown()).optional(),strict:boolean2().optional()}),ANTHROPIC_TOOL_BETAS={tool_search_tool_regex_20251119:"advanced-tool-use-2025-11-20",tool_search_tool_bm25_20251119:"advanced-tool-use-2025-11-20",memory_20250818:"context-management-2025-06-27",web_fetch_20250910:"web-fetch-2025-09-10",code_execution_20250825:"code-execution-2025-08-25",computer_20251124:"computer-use-2025-11-24",computer_20250124:"computer-use-2025-01-24",mcp_toolset:"mcp-client-2025-11-20"}}});function _isAnthropicThinkingBlock(block){return typeof block=="object"&&block!==null&&"type"in block&&block.type==="thinking"}function _isAnthropicRedactedThinkingBlock(block){return typeof block=="object"&&block!==null&&"type"in block&&block.type==="redacted_thinking"}function _isAnthropicCompactionBlock(block){return typeof block=="object"&&block!==null&&"type"in block&&block.type==="compaction"}function _isAnthropicSearchResultBlock(block){return typeof block=="object"&&block!==null&&"type"in block&&block.type==="search_result"}function _isAnthropicImageBlockParam(block){return typeof block!="object"||block==null||!("type"in block)||block.type!=="image"||!("source"in block)||typeof block.source!="object"||block.source==null||!("type"in block.source)?!1:block.source.type==="base64"?!(!("media_type"in block.source)||typeof block.source.media_type!="string"||!("data"in block.source)||typeof block.source.data!="string"):block.source.type==="url"?!(!("url"in block.source)||typeof block.source.url!="string"):!1}var standardContentBlockConverter,init_content2=__esm({"node_modules/@langchain/anthropic/dist/utils/content.js"(){init_messages2();standardContentBlockConverter={providerName:"anthropic",fromStandardTextBlock(block){return{type:"text",text:block.text,..."citations"in(block.metadata??{})?{citations:block.metadata.citations}:{},..."cache_control"in(block.metadata??{})?{cache_control:block.metadata.cache_control}:{}}},fromStandardImageBlock(block){if(block.source_type==="url"){let data=parseBase64DataUrl({dataUrl:block.url,asTypedArray:!1});return data?{type:"image",source:{type:"base64",data:data.data,media_type:data.mime_type},..."cache_control"in(block.metadata??{})?{cache_control:block.metadata.cache_control}:{}}:{type:"image",source:{type:"url",url:block.url},..."cache_control"in(block.metadata??{})?{cache_control:block.metadata.cache_control}:{}}}else{if(block.source_type==="base64")return{type:"image",source:{type:"base64",data:block.data,media_type:block.mime_type??""},..."cache_control"in(block.metadata??{})?{cache_control:block.metadata.cache_control}:{}};throw new Error(`Unsupported image source type: ${block.source_type}`)}},fromStandardFileBlock(block){let mime_type=(block.mime_type??"").split(";")[0];if(block.source_type==="url"){if(mime_type==="application/pdf"||mime_type==="")return{type:"document",source:{type:"url",url:block.url},..."cache_control"in(block.metadata??{})?{cache_control:block.metadata.cache_control}:{},..."citations"in(block.metadata??{})?{citations:block.metadata.citations}:{},..."context"in(block.metadata??{})?{context:block.metadata.context}:{},..."title"in(block.metadata??{})?{title:block.metadata.title}:{}};throw new Error(`Unsupported file mime type for file url source: ${block.mime_type}`)}else if(block.source_type==="text"){if(mime_type==="text/plain"||mime_type==="")return{type:"document",source:{type:"text",data:block.text,media_type:block.mime_type??""},..."cache_control"in(block.metadata??{})?{cache_control:block.metadata.cache_control}:{},..."citations"in(block.metadata??{})?{citations:block.metadata.citations}:{},..."context"in(block.metadata??{})?{context:block.metadata.context}:{},..."title"in(block.metadata??{})?{title:block.metadata.title}:{}};throw new Error(`Unsupported file mime type for file text source: ${block.mime_type}`)}else if(block.source_type==="base64"){if(mime_type==="application/pdf"||mime_type==="")return{type:"document",source:{type:"base64",data:block.data,media_type:"application/pdf"},..."cache_control"in(block.metadata??{})?{cache_control:block.metadata.cache_control}:{},..."citations"in(block.metadata??{})?{citations:block.metadata.citations}:{},..."context"in(block.metadata??{})?{context:block.metadata.context}:{},..."title"in(block.metadata??{})?{title:block.metadata.title}:{}};if(["image/jpeg","image/png","image/gif","image/webp"].includes(mime_type))return{type:"document",source:{type:"content",content:[{type:"image",source:{type:"base64",data:block.data,media_type:mime_type}}]},..."cache_control"in(block.metadata??{})?{cache_control:block.metadata.cache_control}:{},..."citations"in(block.metadata??{})?{citations:block.metadata.citations}:{},..."context"in(block.metadata??{})?{context:block.metadata.context}:{},..."title"in(block.metadata??{})?{title:block.metadata.title}:{}};throw new Error(`Unsupported file mime type for file base64 source: ${block.mime_type}`)}else throw new Error(`Unsupported file source type: ${block.source_type}`)}}}});var iife4,init_utils19=__esm({"node_modules/@langchain/anthropic/dist/utils/index.js"(){iife4=fn=>fn()}});function _isStandardAnnotation(annotation){return typeof annotation=="object"&&annotation!==null&&"type"in annotation&&annotation.type==="citation"}function _formatStandardCitations(annotations){function*iterateAnnotations(){for(let annotation of annotations)_isStandardAnnotation(annotation)&&(annotation.source==="char"?yield{type:"char_location",file_id:annotation.url??"",start_char_index:annotation.startIndex??0,end_char_index:annotation.endIndex??0,document_title:annotation.title??null,document_index:0,cited_text:annotation.citedText??""}:annotation.source==="page"?yield{type:"page_location",file_id:annotation.url??"",start_page_number:annotation.startIndex??0,end_page_number:annotation.endIndex??0,document_title:annotation.title??null,document_index:0,cited_text:annotation.citedText??""}:annotation.source==="block"?yield{type:"content_block_location",file_id:annotation.url??"",start_block_index:annotation.startIndex??0,end_block_index:annotation.endIndex??0,document_title:annotation.title??null,document_index:0,cited_text:annotation.citedText??""}:annotation.source==="url"?yield{type:"web_search_result_location",url:annotation.url??"",title:annotation.title??null,encrypted_index:String(annotation.startIndex??0),cited_text:annotation.citedText??""}:annotation.source==="search"&&(yield{type:"search_result_location",title:annotation.title??null,start_block_index:annotation.startIndex??0,end_block_index:annotation.endIndex??0,search_result_index:0,source:annotation.source??"",cited_text:annotation.citedText??""}))}return Array.from(iterateAnnotations())}function _formatBase64Data(data){return typeof data=="string"?data:_encodeUint8Array(data)}function _encodeUint8Array(data){let output=[];for(let i2=0,{length}=data;i2<length;i2++)output.push(String.fromCharCode(data[i2]));return btoa(output.join(""))}function _normalizeMimeType(mimeType){return(mimeType??"").split(";")[0].toLowerCase()}function _extractMetadataValue(metadata,key){if(metadata!=null&&typeof metadata=="object"&&key in metadata)return metadata[key]}function _applyDocumentMetadata(block,metadata){let cacheControl=_extractMetadataValue(metadata,"cache_control");cacheControl!==void 0&&(block.cache_control=cacheControl);let citations=_extractMetadataValue(metadata,"citations");citations!==void 0&&(block.citations=citations);let context3=_extractMetadataValue(metadata,"context");context3!==void 0&&(block.context=context3);let title=_extractMetadataValue(metadata,"title");return title!==void 0&&(block.title=title),block}function _applyImageMetadata(block,metadata){let cacheControl=_extractMetadataValue(metadata,"cache_control");return cacheControl!==void 0&&(block.cache_control=cacheControl),block}function _hasAllowedImageMimeType(mimeType){return new Set(["image/jpeg","image/png","image/gif","image/webp"]).has(mimeType)}function _formatStandardContent(message){let result=[],responseMetadata=message.response_metadata,isAnthropicMessage="model_provider"in responseMetadata&&responseMetadata?.model_provider==="anthropic";for(let block of message.contentBlocks)if(block.type==="text")block.annotations?result.push({type:"text",text:block.text,citations:_formatStandardCitations(block.annotations)}):result.push({type:"text",text:block.text});else if(block.type==="tool_call")result.push({type:"tool_use",id:block.id??"",name:block.name,input:block.args});else if(block.type==="tool_call_chunk"){let input=iife4(()=>{if(typeof block.args!="string")return block.args;try{return JSON.parse(block.args)}catch{return{}}});result.push({type:"tool_use",id:block.id??"",name:block.name??"",input})}else if(block.type==="reasoning"&&isAnthropicMessage)result.push({type:"thinking",thinking:block.reasoning,signature:String(block.signature)});else if(block.type==="server_tool_call"&&isAnthropicMessage)block.name==="web_search"?result.push({type:"server_tool_use",name:block.name,id:block.id??"",input:block.args}):block.name==="code_execution"&&result.push({type:"server_tool_use",name:block.name,id:block.id??"",input:block.args});else if(block.type==="server_tool_call_result"&&isAnthropicMessage)if(block.name==="web_search"&&Array.isArray(block.output.urls)){let content=block.output.urls.map(url3=>({type:"web_search_result",title:"",encrypted_content:"",url:url3}));result.push({type:"web_search_tool_result",tool_use_id:block.toolCallId??"",content})}else block.name==="code_execution"?result.push({type:"code_execution_tool_result",tool_use_id:block.toolCallId??"",content:block.output}):block.name==="mcp_tool_result"&&result.push({type:"mcp_tool_result",tool_use_id:block.toolCallId??"",content:block.output});else{if(block.type==="audio")throw new Error("Anthropic does not support audio content blocks.");if(block.type==="file"){let metadata=block.metadata;if(block.fileId){result.push(_applyDocumentMetadata({type:"document",source:{type:"file",file_id:block.fileId}},metadata));continue}if(block.url){let mimeType=_normalizeMimeType(block.mimeType);if(mimeType==="application/pdf"||mimeType===""){result.push(_applyDocumentMetadata({type:"document",source:{type:"url",url:block.url}},metadata));continue}}if(block.data){let mimeType=_normalizeMimeType(block.mimeType);if(mimeType===""||mimeType==="application/pdf")result.push(_applyDocumentMetadata({type:"document",source:{type:"base64",data:_formatBase64Data(block.data),media_type:"application/pdf"}},metadata));else if(mimeType==="text/plain")result.push(_applyDocumentMetadata({type:"document",source:{type:"text",data:_formatBase64Data(block.data),media_type:"text/plain"}},metadata));else if(_hasAllowedImageMimeType(mimeType))result.push(_applyDocumentMetadata({type:"document",source:{type:"content",content:[{type:"image",source:{type:"base64",data:_formatBase64Data(block.data),media_type:mimeType}}]}},metadata));else throw new Error(`Unsupported file mime type for Anthropic base64 source: ${mimeType}`);continue}throw new Error("File content block must include a fileId, url, or data property.")}else if(block.type==="image"){let metadata=block.metadata;if(block.fileId){result.push(_applyImageMetadata({type:"image",source:{type:"file",file_id:block.fileId}},metadata));continue}if(block.url){result.push(_applyImageMetadata({type:"image",source:{type:"url",url:block.url}},metadata));continue}if(block.data){let mimeType=_normalizeMimeType(block.mimeType)||"image/png";_hasAllowedImageMimeType(mimeType)&&result.push(_applyImageMetadata({type:"image",source:{type:"base64",data:_formatBase64Data(block.data),media_type:mimeType}},metadata));continue}throw new Error("Image content block must include a fileId, url, or data property.")}else block.type==="video"||(block.type==="text-plain"?block.data&&result.push(_applyDocumentMetadata({type:"document",source:{type:"text",data:_formatBase64Data(block.data),media_type:"text/plain"}},block.metadata)):block.type==="non_standard"&&isAnthropicMessage&&result.push(block.value))}return result}var init_standard=__esm({"node_modules/@langchain/anthropic/dist/utils/standard.js"(){init_utils19()}});function _formatImage(imageUrl){let parsed=parseBase64DataUrl({dataUrl:imageUrl});if(parsed)return{type:"base64",media_type:parsed.mime_type,data:parsed.data};let parsedUrl;try{parsedUrl=new URL(imageUrl)}catch{throw new Error([`Malformed image URL: ${JSON.stringify(imageUrl)}. Content blocks of type 'image_url' must be a valid http, https, or base64-encoded data URL.`,"Example: data:image/png;base64,/9j/4AAQSk...","Example: https://example.com/image.jpg"].join(`
|
|
2246
2246
|
|
|
2247
2247
|
`))}if(parsedUrl.protocol==="http:"||parsedUrl.protocol==="https:")return{type:"url",url:imageUrl};throw new Error([`Invalid image URL protocol: ${JSON.stringify(parsedUrl.protocol)}. Anthropic only supports images as http, https, or base64-encoded data URLs on 'image_url' content blocks.`,"Example: data:image/png;base64,/9j/4AAQSk...","Example: https://example.com/image.jpg"].join(`
|
|
2248
2248
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@stigmer/runner-slim",
|
|
3
|
-
"version": "3.1.
|
|
3
|
+
"version": "3.1.10",
|
|
4
4
|
"description": "Self-contained Stigmer runner build for embedding in desktop apps — the bundle-friendly @stigmer/runner",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"engines": {
|
|
@@ -16,11 +16,11 @@
|
|
|
16
16
|
"jq-wasm": "^1.1.0-jq-1.8.1"
|
|
17
17
|
},
|
|
18
18
|
"optionalDependencies": {
|
|
19
|
-
"@stigmer/runner-slim-darwin-arm64": "3.1.
|
|
20
|
-
"@stigmer/runner-slim-darwin-x64": "3.1.
|
|
21
|
-
"@stigmer/runner-slim-linux-x64": "3.1.
|
|
22
|
-
"@stigmer/runner-slim-linux-arm64": "3.1.
|
|
23
|
-
"@stigmer/runner-slim-win32-x64": "3.1.
|
|
19
|
+
"@stigmer/runner-slim-darwin-arm64": "3.1.10",
|
|
20
|
+
"@stigmer/runner-slim-darwin-x64": "3.1.10",
|
|
21
|
+
"@stigmer/runner-slim-linux-x64": "3.1.10",
|
|
22
|
+
"@stigmer/runner-slim-linux-arm64": "3.1.10",
|
|
23
|
+
"@stigmer/runner-slim-win32-x64": "3.1.10"
|
|
24
24
|
},
|
|
25
25
|
"keywords": [
|
|
26
26
|
"stigmer",
|