@stigmer/runner-slim 3.1.4 → 3.1.6
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 +12 -10
- package/package.json +6 -6
package/main.js
CHANGED
|
@@ -160,7 +160,7 @@ ${path6}`}function findUnmatchedStreamCallByNormalizedSalient(messages,matchedCa
|
|
|
160
160
|
`);if(first<0)return;let key=decoded.slice(0,first),rest=decoded.slice(first+1),second=rest.indexOf(`
|
|
161
161
|
`);return second<0?{key,salient:rest,digest:""}:{key,salient:rest.slice(0,second),digest:rest.slice(second+1)}}catch{return}}function toolCallArgs(tc){if(tc.args&&typeof tc.args=="object")return tc.args;if(tc.argsPreview)try{let parsed=JSON.parse(tc.argsPreview);if(parsed&&typeof parsed=="object")return parsed}catch{}return{}}function markWaitingApproval(tc,mergedPolicies){tc.status=ToolCallStatus.TOOL_CALL_WAITING_APPROVAL,tc.requiresApproval=!0,tc.approvalMessage||(tc.approvalMessage=resolveDeniedApprovalMessage(tc.name,tc.mcpServerSlug,toolCallArgs(tc),mergedPolicies)),tc.approvalRequestedAt||(tc.approvalRequestedAt=utcTimestamp()),tc.completedAt="",tc.error="",tc.result=""}function synthesizeWaitingApprovalToolCall(displayName,salient,digest,token,mergedPolicies){let tc=create(ToolCallSchema,{id:`approval:${token}`,name:displayName,status:ToolCallStatus.TOOL_CALL_WAITING_APPROVAL,requiresApproval:!0,startedAt:utcTimestamp(),approvalRequestedAt:utcTimestamp(),toolKind:classifyTool(displayName),approvalContentDigest:digest});if(salient&&(tc.argsPreview=JSON.stringify({path:salient})),tc.approvalMessage=salient?`Tool requires approval: ${displayName} (${salient})`:resolveDeniedApprovalMessage(displayName,"",{},mergedPolicies),mergedPolicies){let source=resolveApprovalProvenance(displayName,"",mergedPolicies,NO_LEASED_CATEGORIES,!1);tc.approvalPolicySource=toProtoPolicySource(source),source&&(tc.policyEngineVersion=POLICY_ENGINE_VERSION)}return tc}function resolveDeniedApprovalMessage(name2,mcpServerSlug,args,mergedPolicies){if(mergedPolicies&&mcpServerSlug){let policy=lookupMcpToolPolicy(name2,mcpServerSlug,mergedPolicies);if(policy)return resolveApprovalMessage(policy.approvalMessage,name2,args)}if(!mcpServerSlug){let template=getBuiltInApprovalMessage(name2);if(template)return resolveApprovalMessage(template,name2,args)}return`Tool requires approval: ${name2}`}function appendToolCallToLastAiMessage(messages,tc){for(let i2=messages.length-1;i2>=0;i2--)if(messages[i2].type===MessageType.MESSAGE_AI){messages[i2].toolCalls.push(tc);return}let msg=create(AgentMessageSchema,{type:MessageType.MESSAGE_AI,content:"",timestamp:utcTimestamp(),toolCalls:[tc]});messages.push(msg)}var SUPPRESSED_TOOL_NAMES,NO_LEASED_CATEGORIES,SUBAGENT_TOOL_RESULT_FAILURE_KEYS,MessageAccumulator,init_message_translator=__esm({"dist/activities/execute-cursor/message-translator.js"(){"use strict";init_esm4();init_message_pb();init_subagent_pb();init_enum_pb();init_approval_policy2();init_approval_policy();init_approval_state();init_status2();init_tool_row();init_tool_kind();init_file_change();init_file_tools();init_secret_paths();init_args_preview();SUPPRESSED_TOOL_NAMES=new Set(["TodoWrite","updateTodos"]);NO_LEASED_CATEGORIES=new Set;SUBAGENT_TOOL_RESULT_FAILURE_KEYS=new Set(["error","permissionDenied","rejected"]);MessageAccumulator=class{messages;activeAiByRunId=new Map;activeThinkingByRunId=new Map;_subAgentExecutions=[];subAgentMap=new Map;mergedPolicies;provenance;workspaceRoot;toolCallIndex=new Map;_dirty=!1;constructor(messages,options){this.messages=messages,this.mergedPolicies=options?.mergedPolicies,this.provenance=options?.provenance,this.workspaceRoot=options?.workspaceRoot,this.rebuildToolCallIndex();for(let sub of options?.seededSubAgents??[])this._subAgentExecutions.push(sub),sub.id&&this.subAgentMap.set(sub.id,sub)}rebuildToolCallIndex(){this.toolCallIndex.clear();for(let message of this.messages)for(let tc of message.toolCalls)tc.id&&this.toolCallIndex.set(tc.id,tc)}get subAgentExecutions(){return this._subAgentExecutions}get isDirty(){return this._dirty}markPersisted(){this._dirty=!1}cancelInProgressSubAgents(){cancelInProgressSubAgentProtos(this._subAgentExecutions)&&(this._dirty=!0)}processEvent(event){switch(event.type){case"assistant":this.accumulateAssistant(event);break;case"thinking":this.accumulateThinking(event);break;case"tool_call":this.finalizeStreaming(event.run_id),this.attachToolCallToLastAi(event);break;case"task":event.text&&this.messages.push(translateTask(event));break}}finalize(){for(let msg of this.activeAiByRunId.values())msg.isStreaming=!1;for(let msg of this.activeThinkingByRunId.values())msg.isStreaming=!1;this.activeAiByRunId.clear(),this.activeThinkingByRunId.clear()}attachToolCallToLastAi(event){if(SUPPRESSED_TOOL_NAMES.has(event.name))return;let existing=this.toolCallIndex.get(event.call_id);if(existing){this.mergeToolCallEvent(existing,event);return}let tc=buildToolCallProto(event,this.mergedPolicies,this.provenance),seeded=this.findResumableSeededToolCall(tc);if(seeded){this.toolCallIndex.set(event.call_id,seeded),this.mergeToolCallEvent(seeded,event);return}this.findOrCreateLastAiMessage().toolCalls.push(tc),this.toolCallIndex.set(event.call_id,tc),this._dirty=!0}findResumableSeededToolCall(candidate){let wanted=toolCallIdentityToken(candidate);for(let tc of this.toolCallIndex.values())if(tc.status===ToolCallStatus.TOOL_CALL_WAITING_APPROVAL&&toolCallIdentityToken(tc)===wanted)return tc}mergeToolCallEvent(existing,event){let status=mapToolCallStatus(event.status),wasTerminal=isTerminalToolStatus(existing.status);isTerminalToolStatus(existing.status)||(existing.status=status),isTerminalToolStatus(status)&&!existing.completedAt&&(existing.completedAt=utcTimestamp()),!wasTerminal&&isTerminalToolStatus(status)&&(this._dirty=!0),!existing.startedAt&&status===ToolCallStatus.TOOL_CALL_RUNNING&&(existing.startedAt=utcTimestamp());let incomingResult=toResultString(event.result);incomingResult&&(existing.result=incomingResult),status===ToolCallStatus.TOOL_CALL_FAILED&&(existing.error||(existing.error=typeof event.result=="string"?event.result:"Tool call failed"),existing.requiresApproval&&!existing.approvalRequestedAt&&(existing.approvalRequestedAt=utcTimestamp())),event.args!=null&&!existing.argsPreview&&(existing.argsPreview=typeof event.args=="string"?event.args:JSON.stringify(event.args))}findOrCreateLastAiMessage(){for(let i2=this.messages.length-1;i2>=0;i2--)if(this.messages[i2].type===MessageType.MESSAGE_AI)return this.messages[i2];let msg=create(AgentMessageSchema,{type:MessageType.MESSAGE_AI,content:"",timestamp:utcTimestamp()});return this.messages.push(msg),msg}trackSubAgentExecution(event){let existing=this.subAgentMap.get(event.call_id);if(existing)return existing.status=mapSubAgentStatus(event.status),(event.status==="completed"||event.status==="error")&&(existing.completedAt=utcTimestamp()),event.status==="completed"&&event.result!=null&&(existing.output=typeof event.result=="string"?event.result:JSON.stringify(event.result),extractConversationSteps(event.result,existing.messages)),event.status==="error"&&(existing.error=typeof event.result=="string"?event.result:"Sub-agent failed"),this._dirty=!0,existing;let sub=create(SubAgentExecutionSchema,{id:event.call_id,name:extractSubagentName(event.args),subject:safeString(event.args,"description"),input:safeString(event.args,"prompt"),status:mapSubAgentStatus(event.status),startedAt:utcTimestamp()});return this._subAgentExecutions.push(sub),this.subAgentMap.set(event.call_id,sub),this._dirty=!0,sub}accumulateAssistant(event){let text=event.message.content.filter(b=>b.type==="text").map(b=>b.text).join("");if(!text)return;let existing=this.activeAiByRunId.get(event.run_id);if(existing){existing.content+=text;return}let msg=create(AgentMessageSchema,{type:MessageType.MESSAGE_AI,content:text,timestamp:utcTimestamp(),isStreaming:!0});this.messages.push(msg),this.activeAiByRunId.set(event.run_id,msg)}accumulateThinking(event){if(!event.text)return;let existing=this.activeThinkingByRunId.get(event.run_id);if(existing){existing.content+=event.text;return}let msg=create(AgentMessageSchema,{type:MessageType.MESSAGE_THINKING,content:event.text,timestamp:utcTimestamp(),isStreaming:!0});this.messages.push(msg),this.activeThinkingByRunId.set(event.run_id,msg)}finalizeStreaming(runId){let ai=this.activeAiByRunId.get(runId);ai&&(ai.isStreaming=!1,this.activeAiByRunId.delete(runId));let thinking=this.activeThinkingByRunId.get(runId);thinking&&(thinking.isStreaming=!1,this.activeThinkingByRunId.delete(runId))}}}});function formatStallFailure(error91){return`${STALL_ERROR_PREFIX} ${error91.message}. Retry or resume.`}function startStallWatchdog(stallMs,onStall){let lastActivityAt2=Date.now(),fired=!1,timer,tickMs=Math.min(Math.max(Math.floor(stallMs/4),1),15e3),disarm=()=>{timer!==void 0&&(clearInterval(timer),timer=void 0)};return timer=setInterval(()=>{if(fired)return;let idleMs=Date.now()-lastActivityAt2;idleMs>=stallMs&&(fired=!0,disarm(),onStall(idleMs))},tickMs),timer.unref?.(),{recordActivity(){lastActivityAt2=Date.now()},stop(){fired=!0,disarm()}}}var StallTimeoutError,STALL_ERROR_PREFIX,init_stall_watchdog=__esm({"dist/shared/stall-watchdog.js"(){"use strict";StallTimeoutError=class extends Error{stalledMs;constructor(stalledMs,detail){super(`Agent stream stalled: no activity for ${Math.round(stalledMs/1e3)}s`+(detail?` (${detail})`:"")),this.stalledMs=stalledMs,this.name="StallTimeoutError"}},STALL_ERROR_PREFIX="[StallTimeoutError]"}});var artifact_storage_exports={};__export(artifact_storage_exports,{LocalArtifactStorage:()=>LocalArtifactStorage,ProxyArtifactStorage:()=>ProxyArtifactStorage,createArtifactStorage:()=>createArtifactStorage,loadArtifactStorageConfig:()=>loadArtifactStorageConfig,resolveUsableArtifactStorage:()=>resolveUsableArtifactStorage});function loadArtifactStorageConfig(config4){let envType=process.env.ARTIFACT_STORAGE_TYPE,type3=envType==="proxy"?"proxy":envType==="local"?"local":config4.proxyEndpoint?"proxy":"local";return{type:type3,localPath:process.env.LOCAL_ARTIFACT_PATH??"/var/stigmer/artifacts",localServeUrl:process.env.LOCAL_ARTIFACT_SERVE_URL??"http://localhost:7235",proxyEndpoint:type3==="proxy"?config4.proxyEndpoint??null:null,proxyAuthToken:type3==="proxy"?config4.stigmerToken??null:null}}function createArtifactStorage(cfg){if(cfg.type==="proxy"){if(!cfg.proxyEndpoint)throw new Error("Proxy artifact storage requires STIGMER_PROXY_ENDPOINT");if(!cfg.proxyAuthToken)throw new Error("Proxy artifact storage requires STIGMER_TOKEN");return new ProxyArtifactStorage(cfg.proxyEndpoint,cfg.proxyAuthToken)}return new LocalArtifactStorage(cfg.localPath,cfg.localServeUrl)}async function isLocalPathWritable(basePath){let probePath=(0,import_node_path7.join)(basePath,`.write-probe-${process.pid}-${Date.now()}`);try{return await(0,import_promises3.mkdir)(basePath,{recursive:!0}),await(0,import_promises3.writeFile)(probePath,""),await(0,import_promises3.rm)(probePath,{force:!0}),!0}catch{return!1}}async function resolveUsableArtifactStorage(cfg,ctx){let storage;try{storage=createArtifactStorage(cfg)}catch(err){console.warn(`[artifact-storage] unavailable \u2014 file capture degrades to the deny-gate and tool-output offload is disabled: execution=${ctx.executionId}, type=${cfg.type}, error=${err}`);return}if(cfg.type==="local"&&!await isLocalPathWritable(cfg.localPath)){console.warn(`[artifact-storage] local path not writable \u2014 file capture degrades to the deny-gate and tool-output offload is disabled: execution=${ctx.executionId}, path=${cfg.localPath}`);return}return storage}var import_promises3,import_node_path7,LocalArtifactStorage,ProxyArtifactStorage,init_artifact_storage=__esm({"dist/shared/artifact-storage.js"(){"use strict";import_promises3=require("node:fs/promises"),import_node_path7=require("node:path"),LocalArtifactStorage=class{basePath;serveUrlBase;constructor(basePath,serveUrlBase){this.basePath=basePath,this.serveUrlBase=serveUrlBase.replace(/\/+$/,"")}async upload(key,content,_contentType){let filePath=(0,import_node_path7.join)(this.basePath,key);return await(0,import_promises3.mkdir)((0,import_node_path7.dirname)(filePath),{recursive:!0}),await(0,import_promises3.writeFile)(filePath,content),key}async getDownloadUrl(key){return`${this.serveUrlBase}/${key}`}async download(key){try{return await(0,import_promises3.readFile)((0,import_node_path7.join)(this.basePath,key))}catch(err){let reason=err instanceof Error?err.message:String(err);throw new Error(`Artifact not found for key '${key}': ${reason}`)}}async exists(key){try{return await(0,import_promises3.access)((0,import_node_path7.join)(this.basePath,key)),!0}catch{return!1}}},ProxyArtifactStorage=class{baseUrl;authToken;constructor(proxyEndpoint,authToken){this.baseUrl=`${proxyEndpoint.replace(/\/+$/,"")}/v1/proxy/artifacts`,this.authToken=authToken}async upload(key,content,contentType){let ct=contentType??"application/octet-stream",presignResp=await fetch(`${this.baseUrl}/presigned-upload-url`,{method:"POST",headers:{Authorization:`Bearer ${this.authToken}`,"Content-Type":"application/json"},body:JSON.stringify({key,content_type:ct})});if(!presignResp.ok)throw new Error(`Failed to get presigned upload URL (HTTP ${presignResp.status}): `+await presignResp.text());let data=await presignResp.json(),signedHeaders=data.headers??{},uploadHeaders={},contentTypeSigned=!1;for(let[name2,value]of Object.entries(signedHeaders))name2.toLowerCase()!=="host"&&(name2.toLowerCase()==="content-type"&&(contentTypeSigned=!0),uploadHeaders[name2]=value);contentTypeSigned||(uploadHeaders["Content-Type"]=ct);let putResp=await fetch(data.url,{method:"PUT",headers:uploadHeaders,body:content});if(!putResp.ok)throw new Error(`Presigned upload failed (HTTP ${putResp.status}): `+await putResp.text());return key}async getDownloadUrl(key){let resp=await fetch(`${this.baseUrl}/presigned-download-url`,{method:"POST",headers:{Authorization:`Bearer ${this.authToken}`,"Content-Type":"application/json"},body:JSON.stringify({key})});if(!resp.ok)throw new Error(`Failed to get presigned download URL (HTTP ${resp.status}): `+await resp.text());return(await resp.json()).url}async download(key){let url3=await this.getDownloadUrl(key),resp=await fetch(url3);if(!resp.ok)throw new Error(`Artifact download failed (HTTP ${resp.status}) for key '${key}': `+await resp.text());return Buffer.from(await resp.arrayBuffer())}async exists(key){let url3;try{url3=await this.getDownloadUrl(key)}catch{return!1}let resp=await fetch(url3,{headers:{Range:"bytes=0-0"}});if(await resp.arrayBuffer().catch(()=>{}),resp.status===404)return!1;if(resp.status===200||resp.status===206||resp.status===416)return!0;throw new Error(`Artifact existence check failed (HTTP ${resp.status}) for key '${key}'`)}}}});function isPlanArtifactName(name2){return name2===PLAN_ARTIFACT_NAME||name2.endsWith(PLAN_ARTIFACT_SUFFIX)}function extractPlanTitle(planText){let trimmed=planText.trim(),body=trimmed,tagged2=ENCLOSING_MARKDOWN_FENCE_RE.exec(trimmed);if(tagged2)body=tagged2[2];else{let bare=ENCLOSING_BARE_FENCE_RE.exec(trimmed);bare&&(body=bare[2])}let h1=LEADING_H1_RE.exec(body.trim());return h1?h1[1]:void 0}function stripPlanLabel(title){return title.replace(/^plan\s*[:\u2013\u2014-]\s*/i,"")}function slugifyPlanTitle(title){return title.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").slice(0,MAX_PLAN_SLUG_LENGTH).replace(/-+$/g,"")}function planArtifactName(planText){let id=(0,import_node_crypto7.createHash)("sha256").update(planText,"utf-8").digest("hex").slice(0,PLAN_ID_LENGTH),title=extractPlanTitle(planText),slug=title?slugifyPlanTitle(stripPlanLabel(title)):"";return slug.length>0?`${slug}_${id}${PLAN_ARTIFACT_SUFFIX}`:`${id}${PLAN_ARTIFACT_SUFFIX}`}function planArtifactSandboxPath(name2){return`.stigmer/plans/${name2}`}async function publishPlanArtifact(opts){let{status,executionId,planText,artifactStorage}=opts;if(planText.trim().length!==0)try{let content=Buffer.from(planText,"utf-8"),contentHash=(0,import_node_crypto7.createHash)("sha256").update(content).digest("hex"),name2=planArtifactName(planText),storageKey=`artifacts/${executionId}/${name2}`;await artifactStorage.upload(storageKey,content,"text/markdown");let artifact=create(ExecutionArtifactSchema,{name:name2,sandboxPath:planArtifactSandboxPath(name2),kind:ExecutionArtifactKind.FILE,sizeBytes:BigInt(content.length),storageKey,createdAt:utcTimestamp(),contentHash}),existingIdx=status.artifacts.findIndex(a=>isPlanArtifactName(a.name));existingIdx>=0?status.artifacts[existingIdx]=artifact:status.artifacts.push(artifact),console.log(`[plan-artifact] execution=${executionId} \u2014 published ${name2} (${content.length} bytes, hash=${contentHash.slice(0,12)})`)}catch(err){console.warn(`[plan-artifact] execution=${executionId} \u2014 failed to publish plan (non-fatal): ${err}`)}}var import_node_crypto7,PLAN_ARTIFACT_NAME,PLAN_ARTIFACT_SUFFIX,MAX_PLAN_SLUG_LENGTH,PLAN_ID_LENGTH,ENCLOSING_MARKDOWN_FENCE_RE,ENCLOSING_BARE_FENCE_RE,LEADING_H1_RE,init_plan_artifact=__esm({"dist/shared/plan-artifact.js"(){"use strict";import_node_crypto7=require("node:crypto");init_esm4();init_artifact_pb();init_enum_pb();init_status2();PLAN_ARTIFACT_NAME="plan.md",PLAN_ARTIFACT_SUFFIX=".plan.md",MAX_PLAN_SLUG_LENGTH=60,PLAN_ID_LENGTH=8;ENCLOSING_MARKDOWN_FENCE_RE=/^(`{3,})[ \t]*(?:markdown|md)[ \t]*\r?\n([\s\S]*?)\r?\n\1[ \t]*$/i,ENCLOSING_BARE_FENCE_RE=/^(`{3,})[ \t]*\r?\n([\s\S]*?)\r?\n\1[ \t]*$/,LEADING_H1_RE=/^#[ \t]+(.+?)[ \t]*(?:\r?\n+|$)/}});function findToolCallById(messages,callId){for(let i2=messages.length-1;i2>=0;i2--)for(let tc of messages[i2].toolCalls)if(tc.id===callId)return tc}function extractShellOutputText(event){return typeof event.data=="string"?event.data:typeof event.output=="string"?event.output:typeof event.text=="string"?event.text:""}function extractCallIdFromShellEvent(event){if(typeof event.callId=="string")return event.callId;if(typeof event.call_id=="string")return event.call_id;if(typeof event.id=="string")return event.id}var DeltaEnricher,init_delta_enricher=__esm({"dist/activities/execute-cursor/delta-enricher.js"(){"use strict";init_enum_pb();init_message_translator();DeltaEnricher=class _DeltaEnricher{shellOutputByCallId=new Map;timingByCallId=new Map;thinkingDurationMs;_isDirty=!1;lastPersistTime=0;lastShellCallId;static PERSIST_DEBOUNCE_MS=500;processDelta(update){switch(update.type){case"shell-output-delta":this.handleShellOutputDelta(update);break;case"tool-call-started":this.handleToolCallStarted(update);break;case"tool-call-completed":this.handleToolCallCompleted(update);break;case"thinking-completed":this.thinkingDurationMs=update.thinkingDurationMs;break}}applyEnrichments(messages){let applied=!1;return this.shellOutputByCallId.size>0&&(applied=this.applyShellOutput(messages)||applied),this.timingByCallId.size>0&&(applied=this.applyTiming(messages)||applied),this.thinkingDurationMs!==void 0&&(applied=this.applyThinkingDuration(messages)||applied),applied}get isDirty(){return this._isDirty?Date.now()-this.lastPersistTime>=_DeltaEnricher.PERSIST_DEBOUNCE_MS:!1}markPersisted(){this._isDirty=!1,this.lastPersistTime=Date.now()}finalize(messages){for(let msg of messages)for(let tc of msg.toolCalls)tc.isStreaming&&(tc.isStreaming=!1,tc.streamingSource=ToolCallStreamingSource.UNSPECIFIED),tc.status===ToolCallStatus.TOOL_CALL_RUNNING&&(tc.completedAt||tc.result)&&(tc.status=ToolCallStatus.TOOL_CALL_COMPLETED,tc.completedAt||(tc.completedAt=utcTimestamp()),console.log(`DeltaEnricher finalize reconciliation: promoted tool call ${tc.id} (${tc.name}) from RUNNING to COMPLETED`))}handleShellOutputDelta(update){let event=update.event,text=extractShellOutputText(event);if(!text)return;let callId=extractCallIdFromShellEvent(event)??this.lastShellCallId;if(!callId)return;let buffer=this.shellOutputByCallId.get(callId);buffer||(buffer={chunks:[],totalLength:0},this.shellOutputByCallId.set(callId,buffer)),buffer.chunks.push(text),buffer.totalLength+=text.length,this._isDirty=!0}handleToolCallStarted(update){let timing=this.getOrCreateTiming(update.callId);timing.startedAt=utcTimestamp(),update.toolCall.type==="shell"&&(this.lastShellCallId=update.callId)}handleToolCallCompleted(update){let timing=this.getOrCreateTiming(update.callId);timing.completedAt=utcTimestamp()}getOrCreateTiming(callId){let timing=this.timingByCallId.get(callId);return timing||(timing={},this.timingByCallId.set(callId,timing)),timing}applyShellOutput(messages){let applied=!1;for(let[callId,buffer]of this.shellOutputByCallId){let tc=findToolCallById(messages,callId);if(!tc)continue;let content=buffer.chunks.join("");tc.result=content,tc.isStreaming=!0,tc.streamingSource=ToolCallStreamingSource.OUTPUT,buffer.chunks=[content],applied=!0}return applied}applyTiming(messages){let applied=!1;for(let[callId,timing]of this.timingByCallId){let tc=findToolCallById(messages,callId);tc&&(timing.startedAt&&!tc.startedAt&&(tc.startedAt=timing.startedAt,applied=!0),timing.completedAt&&!tc.completedAt&&(tc.completedAt=timing.completedAt,applied=!0),timing.completedAt&&tc.status===ToolCallStatus.TOOL_CALL_RUNNING&&(tc.status=ToolCallStatus.TOOL_CALL_COMPLETED,applied=!0),this.timingByCallId.delete(callId))}return applied}applyThinkingDuration(_messages){return this.thinkingDurationMs!==void 0?(console.log(`DeltaEnricher: thinking completed in ${this.thinkingDurationMs}ms`),this.thinkingDurationMs=void 0,!0):!1}}}});function applyTodoUpdate(target,rawTodos,opts){let{merge:merge4}=opts,now=opts.now??utcTimestamp();if(!Array.isArray(rawTodos)||rawTodos.length===0)return merge4?!1:(clearMap(target),!0);merge4||clearMap(target);for(let i2=0;i2<rawTodos.length;i2++){let raw=coerceRawTodo(rawTodos[i2]),id=raw.id||`todo-${i2}`,statusStr=(raw.status??"pending").toLowerCase(),status=STATUS_MAP[statusStr]??TodoStatus.TODO_PENDING,existing=merge4?target[id]:void 0;target[id]=create(TodoItemSchema,{id,content:raw.content??"",status,createdAt:existing?.createdAt||raw.created_at||now,updatedAt:now})}return!0}function coerceRawTodo(value){return typeof value=="object"&&value!==null?value:{}}function clearMap(target){for(let key of Object.keys(target))delete target[key]}var STATUS_MAP,init_todos=__esm({"dist/shared/todos.js"(){"use strict";init_esm4();init_todo_pb();init_enum_pb();init_status2();STATUS_MAP={pending:TodoStatus.TODO_PENDING,in_progress:TodoStatus.TODO_IN_PROGRESS,inprogress:TodoStatus.TODO_IN_PROGRESS,completed:TodoStatus.TODO_COMPLETED,cancelled:TodoStatus.TODO_CANCELLED}}});var TODO_TOOL_NAMES,TodoTracker,init_todo_tracker=__esm({"dist/activities/execute-cursor/todo-tracker.js"(){"use strict";init_todos();TODO_TOOL_NAMES=new Set(["TodoWrite","updateTodos"]),TodoTracker=class{todos;_isDirty=!1;constructor(todos){this.todos=todos}processEvent(event){if(event.type!=="tool_call"||!TODO_TOOL_NAMES.has(event.name)||event.status!=="completed")return;let args=this.parseArgs(event.args);if(!args)return;applyTodoUpdate(this.todos,args.todos,{merge:args.merge===!0})&&(this._isDirty=!0),Array.isArray(args.todos)&&args.todos.length>0&&console.log(`TodoTracker: processed ${args.todos.length} todo(s) from ${event.name} (merge=${args.merge===!0})`)}get isDirty(){return this._isDirty}markPersisted(){this._isDirty=!1}parseArgs(args){if(args==null)return null;if(typeof args=="string")try{return JSON.parse(args)}catch{return null}return typeof args=="object"?args:null}}}});function loadStreamingConfig(){let minIntervalMs=parsePositiveInt(process.env.STREAMING_MIN_INTERVAL_MS,DEFAULT_CONFIG.minIntervalMs,"STREAMING_MIN_INTERVAL_MS"),maxIntervalMs=parsePositiveInt(process.env.STREAMING_MAX_INTERVAL_MS,DEFAULT_CONFIG.maxIntervalMs,"STREAMING_MAX_INTERVAL_MS"),burstThreshold=parsePositiveInt(process.env.STREAMING_BURST_THRESHOLD,DEFAULT_CONFIG.burstThreshold,"STREAMING_BURST_THRESHOLD");return maxIntervalMs<minIntervalMs&&(console.warn(`STREAMING_MAX_INTERVAL_MS (${maxIntervalMs}) < STREAMING_MIN_INTERVAL_MS (${minIntervalMs}). Setting max to min value.`),maxIntervalMs=minIntervalMs),{minIntervalMs,maxIntervalMs,burstThreshold}}function parsePositiveInt(raw,fallback,envName){if(!raw)return fallback;let parsed=Number(raw);return!Number.isFinite(parsed)||parsed<=0||!Number.isInteger(parsed)?(console.warn(`Invalid ${envName}='${raw}'. Using default: ${fallback}`),fallback):parsed}var UpdateReason,DEFAULT_CONFIG,StreamingUpdateScheduler,init_streaming_scheduler=__esm({"dist/shared/streaming-scheduler.js"(){"use strict";(function(UpdateReason2){UpdateReason2.TIME_THRESHOLD="time_threshold",UpdateReason2.BURST_PROTECTION="burst_protection",UpdateReason2.KEEPALIVE="keepalive",UpdateReason2.FIRST_UPDATE="first_update",UpdateReason2.NONE="none"})(UpdateReason||(UpdateReason={}));DEFAULT_CONFIG={minIntervalMs:500,maxIntervalMs:5e3,burstThreshold:50};StreamingUpdateScheduler=class{config;lastUpdateTime;lastUpdateEvents=0;lastReason=UpdateReason.NONE;firstCheck=!0;constructor(config4,nowMs){this.config=config4??DEFAULT_CONFIG,this.lastUpdateTime=nowMs??performance.now()}shouldSendUpdate(eventsProcessed,nowMs){let timeSinceLastMs=(nowMs??performance.now())-this.lastUpdateTime,eventsSinceLast=eventsProcessed-this.lastUpdateEvents;return this.firstCheck&&eventsSinceLast>=1?(this.lastReason=UpdateReason.FIRST_UPDATE,!0):timeSinceLastMs>=this.config.minIntervalMs&&eventsSinceLast>=1?(this.lastReason=UpdateReason.TIME_THRESHOLD,!0):eventsSinceLast>=this.config.burstThreshold?(this.lastReason=UpdateReason.BURST_PROTECTION,!0):timeSinceLastMs>=this.config.maxIntervalMs?(this.lastReason=UpdateReason.KEEPALIVE,!0):(this.lastReason=UpdateReason.NONE,!1)}markUpdateSent(eventsProcessed,nowMs){this.lastUpdateTime=nowMs??performance.now(),this.lastUpdateEvents=eventsProcessed,this.firstCheck=!1}get updateReason(){return this.lastReason}timeSinceLastUpdateMs(nowMs){return(nowMs??performance.now())-this.lastUpdateTime}eventsSinceLastUpdate(eventsProcessed){return eventsProcessed-this.lastUpdateEvents}}}});function createCursorEventRecorder(executionId){let recordDir=process.env.CURSOR_EVENT_RECORD_DIR;if(recordDir)return new FileCursorEventRecorder(executionId,recordDir)}function safeClone(obj){try{return JSON.parse(JSON.stringify(obj))}catch{return obj&&typeof obj=="object"?{_serializationError:!0,keys:Object.keys(obj)}:{_serializationError:!0}}}var import_promises4,import_node_path8,FileCursorEventRecorder,init_cursor_event_recorder=__esm({"dist/activities/execute-cursor/cursor-event-recorder.js"(){"use strict";import_promises4=require("node:fs/promises"),import_node_path8=require("node:path");FileCursorEventRecorder=class{executionId;outputDir;lines=[];constructor(executionId,outputDir){this.executionId=executionId,this.outputDir=outputDir}record(event,seq2){let entry={seq:seq2,capturedAt:new Date().toISOString(),type:event.type,agent_id:event.agent_id,run_id:event.run_id,event:safeClone(event)};this.lines.push(JSON.stringify(entry))}async flush(){if(this.lines.length===0)return;await(0,import_promises4.mkdir)(this.outputDir,{recursive:!0});let filePath=(0,import_node_path8.join)(this.outputDir,`${this.executionId}.cursor-events.jsonl`);await(0,import_promises4.writeFile)(filePath,this.lines.join(`
|
|
162
162
|
`)+`
|
|
163
|
-
`),console.log(`CursorEventRecorder: flushed ${this.lines.length} events to ${filePath}`)}}}});function resolvePlaceholders(template,envVars,context3){return template.replace(PLACEHOLDER_RE,(match,varName)=>{if(varName in envVars)return envVars[varName];throw new PlaceholderResolutionError(varName,context3)})}function resolveHeaders(headers,envVars){let resolved={};for(let[key,value]of Object.entries(headers))resolved[key]=resolvePlaceholders(value,envVars,`header "${key}"`);return resolved}function filterEnvToDeclaredKeys(declaredEnv,envVars,serverSlug){if(!declaredEnv||Object.keys(declaredEnv).length===0)return Object.keys(envVars).length>0&&console.log(`MCP server '${serverSlug}' has no env declarations \u2014 dropping ${Object.keys(envVars).length} env var(s)`),{};let declaredKeys=new Set(Object.keys(declaredEnv)),filtered={};for(let[key,value]of Object.entries(envVars))declaredKeys.has(key)&&(filtered[key]=value);let dropped=Object.keys(envVars).length-Object.keys(filtered).length;dropped>0&&console.log(`MCP server '${serverSlug}': passing ${Object.keys(filtered).length} declared env var(s), filtered out ${dropped} undeclared key(s)`);let missing=[...declaredKeys].filter(k=>!(k in filtered));return missing.length>0&&console.warn(`MCP server '${serverSlug}': env declares [${missing.sort().join(", ")}] but they are not present in the resolved environment`),filtered}var PLACEHOLDER_RE,PlaceholderResolutionError,init_placeholder_resolver=__esm({"dist/activities/execute-cursor/placeholder-resolver.js"(){"use strict";PLACEHOLDER_RE=/\$\{([A-Za-z_][A-Za-z0-9_]*)\}/g,PlaceholderResolutionError=class extends Error{variableName;context;constructor(variableName,context3){let where=context3?` in ${context3}`:"";super(`Unresolved placeholder \${${variableName}}${where}: variable is not present in the execution environment`),this.variableName=variableName,this.context=context3,this.name="PlaceholderResolutionError"}}}});async function resolveMcpServers(client2,usages,envVars={}){let resolved=[];for(let usage of usages){let ref=usage.mcpServerRef;if(ref?.slug)try{let mcpServer=await client2.getMcpServerByReference(ref),serverEnv=filterEnvToDeclaredKeys(mcpServer.spec?.env,envVars,ref.slug),server=mcpServerToResolved(mcpServer,ref.slug,serverEnv);server&&resolved.push(server)}catch(err){err instanceof PlaceholderResolutionError?console.error(`MCP server ${ref.org}/${ref.slug}: ${err.message}`):console.warn(`Failed to resolve MCP server ${ref.org}/${ref.slug}: ${err instanceof Error?err.message:err}`)}}return{cursorConfig:toCursorMcpConfig(resolved),resolvedServers:resolved}}function mcpServerToResolved(server,slug,envVars){let spec=server.spec;if(!spec)return null;let status=server.status,toolApprovals=status?.toolApprovals??[],pinnedToolApprovals=spec.pinnedToolApprovals??[],discoveredCapabilitiesEmpty=!status?.discoveredCapabilities||status.discoveredCapabilities.tools.length===0&&status.discoveredCapabilities.resourceTemplates.length===0,base={toolApprovals,pinnedToolApprovals,discoveredCapabilitiesEmpty};switch(spec.serverType.case){case"stdio":{let stdio=spec.serverType.value;if(!stdio.command)return null;let resolvedArgs=stdio.args.length>0?stdio.args.map((arg,i2)=>resolvePlaceholders(arg,envVars,`stdio arg[${i2}]`)):void 0;return{slug,connectionType:"stdio",command:stdio.command,args:resolvedArgs,env:Object.keys(envVars).length>0?{...envVars}:void 0,cwd:stdio.workingDir||void 0,...base}}case"http":{let http3=spec.serverType.value;if(!http3.url)return null;let rawHeaders=Object.keys(http3.headers).length>0?http3.headers:void 0,resolved=rawHeaders?resolveHeaders(Object.fromEntries(Object.entries(rawHeaders)),envVars):void 0;return{slug,connectionType:"http",url:http3.url,headers:resolved,...base}}default:return null}}function toCursorMcpConfig(servers){let result={};for(let server of servers)if(server.connectionType==="stdio"){if(!server.command)continue;result[server.slug]={type:"stdio",command:server.command,args:server.args,env:server.env,cwd:server.cwd}}else{if(!server.url)continue;result[server.slug]={type:server.connectionType,url:server.url,headers:server.headers}}return result}function validateMcpServerEnv(servers,usages,envVars){let warnings=[];for(let usage of usages){let slug=usage.mcpServerRef?.slug;if(!slug)continue;let resolved=servers.find(s=>s.slug===slug);if(!resolved){warnings.push(`MCP server '${slug}': failed to resolve (server may not exist or is inaccessible)`);continue}if(resolved.connectionType==="stdio"&&resolved.env){let emptyKeys=Object.entries(resolved.env).filter(([,v])=>!v).map(([k])=>k);emptyKeys.length>0&&warnings.push(`MCP server '${slug}': env vars [${emptyKeys.join(", ")}] are empty \u2014 server subprocess will likely fail to connect`)}}return warnings}var init_mcp_resolver=__esm({"dist/activities/execute-cursor/mcp-resolver.js"(){"use strict";init_placeholder_resolver();init_placeholder_resolver()}});function resolvePlaceholders2(template,envVars,context3){return template.replace(PLACEHOLDER_RE2,(match,varName)=>{if(varName in envVars)return envVars[varName];throw new PlaceholderResolutionError2(varName,context3)})}function resolveHeaders2(headers,envVars){let resolved={};for(let[key,value]of Object.entries(headers))resolved[key]=resolvePlaceholders2(value,envVars,`header "${key}"`);return resolved}function filterEnvToDeclaredKeys2(declaredEnv,envVars,serverSlug){if(!declaredEnv||Object.keys(declaredEnv).length===0)return Object.keys(envVars).length>0&&console.log(`MCP server '${serverSlug}' has no env declarations \u2014 dropping ${Object.keys(envVars).length} env var(s)`),{};let declaredKeys=new Set(Object.keys(declaredEnv)),filtered={};for(let[key,value]of Object.entries(envVars))declaredKeys.has(key)&&(filtered[key]=value);let dropped=Object.keys(envVars).length-Object.keys(filtered).length;dropped>0&&console.log(`MCP server '${serverSlug}': passing ${Object.keys(filtered).length} declared env var(s), filtered out ${dropped} undeclared key(s)`);let missing=[...declaredKeys].filter(k=>!(k in filtered));return missing.length>0&&console.warn(`MCP server '${serverSlug}': env declares [${missing.sort().join(", ")}] but they are not present in the resolved environment`),filtered}var PLACEHOLDER_RE2,PlaceholderResolutionError2,init_placeholder_resolver2=__esm({"dist/shared/placeholder-resolver.js"(){"use strict";PLACEHOLDER_RE2=/\$\{([A-Za-z_][A-Za-z0-9_]*)\}/g,PlaceholderResolutionError2=class extends Error{variableName;context;constructor(variableName,context3){let where=context3?` in ${context3}`:"";super(`Unresolved placeholder \${${variableName}}${where}: variable is not present in the execution environment`),this.variableName=variableName,this.context=context3,this.name="PlaceholderResolutionError"}}}});async function resolveMcpServers2(client2,usages,envVars={}){let resolved=[];for(let usage of usages){let ref=usage.mcpServerRef;if(ref?.slug)try{let mcpServer=await client2.getMcpServerByReference(ref),serverEnv=filterEnvToDeclaredKeys2(mcpServer.spec?.env,envVars,ref.slug),server=mcpServerToResolved2(mcpServer,ref.slug,serverEnv);server&&resolved.push(server)}catch(err){err instanceof PlaceholderResolutionError2?console.error(`MCP server ${ref.org}/${ref.slug}: ${err.message}`):console.warn(`Failed to resolve MCP server ${ref.org}/${ref.slug}: ${err instanceof Error?err.message:err}`)}}return{resolvedServers:resolved}}function mcpServerToResolved2(server,slug,envVars){let spec=server.spec;if(!spec)return null;let status=server.status,toolApprovals=status?.toolApprovals??[],pinnedToolApprovals=spec.pinnedToolApprovals??[],discoveredCapabilitiesEmpty=!status?.discoveredCapabilities||status.discoveredCapabilities.tools.length===0&&status.discoveredCapabilities.resourceTemplates.length===0,base={toolApprovals,pinnedToolApprovals,discoveredCapabilitiesEmpty};switch(spec.serverType.case){case"stdio":{let stdio=spec.serverType.value;if(!stdio.command)return null;let resolvedArgs=stdio.args.length>0?stdio.args.map((arg,i2)=>resolvePlaceholders2(arg,envVars,`stdio arg[${i2}]`)):void 0;return{slug,connectionType:"stdio",command:stdio.command,args:resolvedArgs,env:Object.keys(envVars).length>0?{...envVars}:void 0,cwd:stdio.workingDir||void 0,...base}}case"http":{let http3=spec.serverType.value;if(!http3.url)return null;let rawHeaders=Object.keys(http3.headers).length>0?http3.headers:void 0,resolved=rawHeaders?resolveHeaders2(Object.fromEntries(Object.entries(rawHeaders)),envVars):void 0;return{slug,connectionType:"http",url:http3.url,headers:resolved,...base}}default:return null}}var init_mcp_resolver2=__esm({"dist/shared/mcp-resolver.js"(){"use strict";init_placeholder_resolver2();init_placeholder_resolver2()}});function needsBackfill(server){return SKIP_BACKFILL?!1:server.discoveredCapabilitiesEmpty}async function backfillMcpServersIfNeeded(client2,currentServers,usages,envVars,org,onHeartbeat,secretKeys){let serversNeedingBackfill=currentServers.filter(needsBackfill);if(serversNeedingBackfill.length===0)return currentServers;console.log(`[connect-backfill] Backfill needed for ${serversNeedingBackfill.length} MCP server(s): `+serversNeedingBackfill.map(s=>s.slug).join(", "));let anyBackfilled=!1;for(let server of serversNeedingBackfill)try{let serverRef=usages.find(u=>u.mcpServerRef?.slug===server.slug);if(!serverRef?.mcpServerRef)continue;let fullServer=await client2.getMcpServerByReference(serverRef.mcpServerRef),serverId=fullServer.metadata?.id;if(!serverId)continue;let runtimeEnv=extractRuntimeEnvForServer(fullServer,envVars,secretKeys);console.log(`[connect-backfill] Triggering connect for "${server.slug}" (${serverId})`),onHeartbeat?.();let updated=await Promise.race([client2.connectMcpServer(serverId,org,runtimeEnv),new Promise((_,reject)=>setTimeout(()=>reject(new Error(`Connect timed out after ${CONNECT_TIMEOUT_MS/1e3}s`)),CONNECT_TIMEOUT_MS))]),toolCount=updated.status?.discoveredCapabilities?.tools.length??0,approvalCount=updated.status?.toolApprovals?.length??0;console.log(`[connect-backfill] "${server.slug}" \u2014 discovered ${toolCount} tool(s), classified ${approvalCount} approval policy(ies)`),anyBackfilled=!0,onHeartbeat?.()}catch(err){console.warn(`[connect-backfill] Failed for "${server.slug}": ${err instanceof Error?err.message:err}. Continuing with empty approval policies for this server.`)}return anyBackfilled?(await resolveMcpServers2(client2,usages,envVars)).resolvedServers:currentServers}function extractRuntimeEnvForServer(server,mergedEnv,secretKeys){let envDecls=server.spec?.env;if(!envDecls||Object.keys(envDecls).length===0)return;let runtime={};for(let key of Object.keys(envDecls))if(key in mergedEnv){let isSecret=envDecls[key]?.isSecret??secretKeys?.has(key)??!1;runtime[key]={value:mergedEnv[key],isSecret}}return Object.keys(runtime).length>0?runtime:void 0}var CONNECT_TIMEOUT_MS,SKIP_BACKFILL,init_connect_backfill=__esm({"dist/shared/connect-backfill.js"(){"use strict";init_mcp_resolver2();CONNECT_TIMEOUT_MS=6e4,SKIP_BACKFILL=process.env.SKIP_MCP_CONNECT_BACKFILL==="true"}});async function backfillMcpServersIfNeeded2(client2,currentResult,usages,envVars,org,onHeartbeat,secretKeys){let updatedServers=await backfillMcpServersIfNeeded(client2,currentResult.resolvedServers,usages,envVars,org,onHeartbeat,secretKeys);return updatedServers===currentResult.resolvedServers?currentResult:{cursorConfig:toCursorMcpConfig(updatedServers),resolvedServers:updatedServers}}var init_connect_backfill2=__esm({"dist/activities/execute-cursor/connect-backfill.js"(){"use strict";init_mcp_resolver();init_connect_backfill()}});async function resolveExecutionEnv(client2,executionId){let execCtx;try{execCtx=await client2.getExecutionContextByExecutionId(executionId)}catch(err){if(err?.code===5)return console.log(`No ExecutionContext found for execution ${executionId} \u2014 proceeding with empty environment.`),{envVars:{},secretKeys:new Set};throw err}let envVars={},secretKeys=new Set,data=execCtx.spec?.data;if(data)for(let[key,execValue]of Object.entries(data))envVars[key]=execValue.value,execValue.isSecret&&secretKeys.add(key);return console.log(`Resolved environment from ExecutionContext: context_id=${execCtx.metadata?.id}, env_count=${Object.keys(envVars).length}, secret_count=${secretKeys.size}, keys=[${Object.keys(envVars).sort().join(", ")}]`),{envVars,secretKeys}}var init_env_resolver=__esm({"dist/activities/execute-cursor/env-resolver.js"(){"use strict"}});async function resolveBlueprint(client2,session,fallbackWorkspaceDir){let sessionSpec=session.spec,agentId=(await client2.getAgentInstance(sessionSpec.agentInstanceId)).spec.agentId,agent=await client2.getAgent(agentId),agentSpec=agent.spec,mergedMcpServerUsages=mergeMcpServerUsages(agentSpec.mcpServerUsages,sessionSpec.mcpServerUsages),mergedSkillRefs=mergeSkillRefs(agentSpec.skillRefs,sessionSpec.skillRefs),workspaceDirs=resolveWorkspaceDirs(sessionSpec,fallbackWorkspaceDir),cloudRepos=resolveCloudRepos(sessionSpec.workspaceEntries);return{agent,agentSpec,session,sessionSpec,instructions:agentSpec.instructions,subAgents:agentSpec.subAgents,mergedMcpServerUsages,mergedSkillRefs,workspaceDirs,cloudRepos}}function resolveCloudRepos(workspaceEntries){let repos=[];for(let entry of workspaceEntries)if(entry.source?.source.case==="gitRepo"){let git2=entry.source.source.value;repos.push({url:git2.url,startingRef:git2.branch||void 0})}return repos}function mergeMcpServerUsages(agentUsages,sessionUsages){let bySlug=new Map;for(let usage of agentUsages){let slug=usage.mcpServerRef?.slug;slug&&bySlug.set(slug,usage)}for(let usage of sessionUsages){let slug=usage.mcpServerRef?.slug;slug&&bySlug.set(slug,usage)}return[...bySlug.values()]}function mergeSkillRefs(agentRefs,sessionRefs){let bySlug=new Map;for(let ref of agentRefs)ref.slug&&bySlug.set(ref.slug,ref);for(let ref of sessionRefs)ref.slug&&bySlug.set(ref.slug,ref);return[...bySlug.values()]}function resolveWorkspaceDirs(sessionSpec,fallbackDir){let safeFallback=validateWorkspaceDir(fallbackDir)?fallbackDir:logAndSkipRunnerDir(fallbackDir,"fallback config");if(!sessionSpec.workspaceEntries.length)return safeFallback?[safeFallback]:[];let dirs=[];for(let entry of sessionSpec.workspaceEntries)if(entry.source?.source.case==="localPath"){let path6=entry.source.source.value.path;validateWorkspaceDir(path6)?dirs.push(path6):logAndSkipRunnerDir(path6,"session workspace entry")}return dirs.length>0?dirs:safeFallback?[safeFallback]:[]}function validateWorkspaceDir(dir){let absolute=(0,import_node_path9.resolve)(dir);return!RUNNER_INTERNAL_MARKERS.some(marker=>absolute.includes(marker))}function logAndSkipRunnerDir(dir,source){console.warn(`Workspace dir from ${source} ("${dir}") is a runner-internal path \u2014 rejecting to prevent implementation detail leakage.`)}var import_node_path9,RUNNER_INTERNAL_MARKERS,init_blueprint_resolver=__esm({"dist/activities/execute-cursor/blueprint-resolver.js"(){"use strict";import_node_path9=require("node:path"),RUNNER_INTERNAL_MARKERS=["/runtimes/cursor-runner/","/runtimes/agent-runner/"]}});function buildCursorSubAgentDefinitions(subAgents){if(subAgents.length===0)return;let agents={};for(let sa of subAgents){let name2=sa.name?.trim();if(!name2)continue;let prompt=sa.instructions?.trim()||sa.description?.trim()||name2;agents[name2]={description:sa.description??"",prompt,model:sa.modelOverride?{id:sa.modelOverride}:"inherit"}}return Object.keys(agents).length>0?agents:void 0}var init_subagent_config=__esm({"dist/activities/execute-cursor/subagent-config.js"(){"use strict"}});function getStigmerHome(){return process.env.HOME||process.env.USERPROFILE||(0,import_node_os3.homedir)()}function getSessionDir(sessionId){return(0,import_node_path10.join)(getStigmerHome(),".stigmer","sessions",sessionId)}function getHitlGateDir(workspaceRoot){let key=(0,import_node_crypto8.createHash)("sha256").update(workspaceRoot).digest("hex").slice(0,16);return(0,import_node_path10.join)(getStigmerHome(),".stigmer","hitl-gate",key)}async function ensureHitlGateDir(workspaceRoot){let dir=getHitlGateDir(workspaceRoot);return await(0,import_promises5.mkdir)(dir,{recursive:!0}),dir}function getPlatformDir(sessionId){return(0,import_node_path10.join)(getSessionDir(sessionId),"platform")}async function ensurePlatformDir(sessionId){let dir=getPlatformDir(sessionId);return await(0,import_promises5.mkdir)(dir,{recursive:!0}),dir}function getHitlDir(sessionId){return(0,import_node_path10.join)(getSessionDir(sessionId),"hitl")}async function ensureHitlDir(sessionId){let dir=getHitlDir(sessionId);return await(0,import_promises5.mkdir)(dir,{recursive:!0}),dir}var import_node_path10,import_promises5,import_node_os3,import_node_crypto8,init_platform_dir=__esm({"dist/shared/workspace/platform-dir.js"(){"use strict";import_node_path10=require("node:path"),import_promises5=require("node:fs/promises"),import_node_os3=require("node:os"),import_node_crypto8=require("node:crypto")}});async function extractZipFileEntries(zipBytes,options){if(zipBytes.length<4)return[];let entries;try{entries=parseZipEntries(zipBytes)}catch{return[]}let excludeSet=new Set(options?.exclude??[]),results=[];for(let entry of entries){if(entry.isDirectory||isExcluded(entry.name,excludeSet))continue;let content=await decompressEntry(entry);results.push({path:entry.name,content})}return results}function isExcluded(name2,excludeSet){if(excludeSet.size===0)return!1;if(excludeSet.has(name2))return!0;let basename7=name2.includes("/")?name2.slice(name2.lastIndexOf("/")+1):name2;return excludeSet.has(basename7)}function parseZipEntries(data){let entries=[],view2=new DataView(data.buffer,data.byteOffset,data.byteLength),offset=0;for(;offset<data.length-4&&view2.getUint32(offset,!0)===67324752;){let hasDataDescriptor=(view2.getUint16(offset+6,!0)&8)!==0,compressionMethod=view2.getUint16(offset+8,!0),compressedSize=view2.getUint32(offset+18,!0),uncompressedSize=view2.getUint32(offset+22,!0),fileNameLength=view2.getUint16(offset+26,!0),extraFieldLength=view2.getUint16(offset+28,!0),fileNameStart=offset+30,fileName=new TextDecoder().decode(data.subarray(fileNameStart,fileNameStart+fileNameLength)),dataStart=fileNameStart+fileNameLength+extraFieldLength;if(hasDataDescriptor&&compressedSize===0){let sizes=findDataDescriptor(data,view2,dataStart,compressionMethod);compressedSize=sizes.compressedSize,uncompressedSize=sizes.uncompressedSize}let compressedData=data.subarray(dataStart,dataStart+compressedSize);entries.push({name:fileName,isDirectory:fileName.endsWith("/"),compressedData,compressionMethod,uncompressedSize});let nextOffset=dataStart+compressedSize;hasDataDescriptor&&(nextOffset+4<=data.length&&view2.getUint32(nextOffset,!0)===134695760?nextOffset+=16:nextOffset+=12),offset=nextOffset}return entries}function findDataDescriptor(data,view2,dataStart,_compressionMethod){for(let pos=dataStart;pos<data.length-16;pos++){let sig=view2.getUint32(pos,!0);if(sig===134695760)return{compressedSize:view2.getUint32(pos+8,!0),uncompressedSize:view2.getUint32(pos+12,!0)};if(sig===67324752||sig===33639248){let descStart=pos-12;if(descStart>=dataStart)return{compressedSize:view2.getUint32(descStart+4,!0),uncompressedSize:view2.getUint32(descStart+8,!0)};break}}for(let pos=dataStart;pos<data.length-4;pos++){let sig=view2.getUint32(pos,!0);if(sig===67324752||sig===33639248||sig===134695760)return{compressedSize:sig===134695760?view2.getUint32(pos+8,!0):pos-dataStart,uncompressedSize:0}}return{compressedSize:data.length-dataStart,uncompressedSize:0}}async function decompressEntry(entry){if(entry.compressionMethod===0)return new TextDecoder().decode(entry.compressedData);if(entry.compressionMethod===8)return new Promise((resolve7,reject)=>{let inflate=(0,import_node_zlib.createInflateRaw)(),chunks=[];inflate.on("data",chunk=>chunks.push(chunk)),inflate.on("end",()=>resolve7(Buffer.concat(chunks).toString("utf-8"))),inflate.on("error",reject),inflate.end(Buffer.from(entry.compressedData))});throw new Error(`Unsupported ZIP compression method: ${entry.compressionMethod}`)}var import_node_zlib,init_zip_extract=__esm({"dist/shared/zip-extract.js"(){"use strict";import_node_zlib=require("node:zlib")}});async function ensureStigmerSymlink(workspaceDir,platformDir){let linkPath=(0,import_node_path11.join)(workspaceDir,STIGMER_LOCAL_STATE_DIR);try{if(await(0,import_promises6.readlink)(linkPath)===platformDir)return;await(0,import_promises6.unlink)(linkPath)}catch(err){if(err.code!=="ENOENT")if(err.code==="EINVAL")await(0,import_promises6.rm)(linkPath,{recursive:!0,force:!0});else throw err}await(0,import_promises6.symlink)(platformDir,linkPath,"dir")}async function removeStigmerSymlink(workspaceDir){let linkPath=(0,import_node_path11.join)(workspaceDir,STIGMER_LOCAL_STATE_DIR);try{(await(0,import_promises6.lstat)(linkPath)).isSymbolicLink()&&await(0,import_promises6.unlink)(linkPath)}catch(err){err?.code!=="ENOENT"&&console.warn(`removeStigmerSymlink: failed to remove ${linkPath} (non-fatal): ${err instanceof Error?err.message:err}`)}}var import_promises6,import_node_path11,STIGMER_LOCAL_STATE_DIR,init_stigmer_link=__esm({"dist/activities/execute-cursor/stigmer-link.js"(){"use strict";import_promises6=require("node:fs/promises"),import_node_path11=require("node:path"),STIGMER_LOCAL_STATE_DIR=".stigmer"}});async function resolveSkills(client2,skillRefs,options){if(console.log(`[resolveSkills] sessionId=${options.sessionId}, primaryWorkspaceDir=${options.primaryWorkspaceDir??"(undefined)"}, skillRefCount=${skillRefs.length}, refs=[${skillRefs.map(r=>`${r.org||"(default)"}/${r.slug}`).join(", ")}]`),skillRefs.length===0)return[];let platformDir=getPlatformDir(options.sessionId),skillsDir=(0,import_node_path12.join)(platformDir,SKILLS_SUBDIR);await(0,import_promises7.mkdir)(skillsDir,{recursive:!0}),await ensureStigmerSymlink(options.primaryWorkspaceDir,platformDir),console.log(`[resolveSkills] symlink created: ${(0,import_node_path12.join)(options.primaryWorkspaceDir,STIGMER_LOCAL_STATE_DIR)} -> ${platformDir}`);let results=[];for(let ref of skillRefs)try{let skill=await client2.getSkillByReference(ref),artifactBytes;if(skill.status?.artifactStorageKey)try{let resp=await client2.getSkillArtifact(skill.status.artifactStorageKey);resp.artifact&&resp.artifact.length>0&&(artifactBytes=resp.artifact)}catch(err){console.warn(`[resolveSkills] artifact download failed for ${ref.slug}, falling back to SKILL.md only: ${err instanceof Error?err.message:err}`)}let meta3=await writeSkill(skill,skillsDir,options.primaryWorkspaceDir,artifactBytes);meta3?(results.push(meta3),console.log(`[resolveSkills] wrote skill: ${meta3.name} -> ${meta3.path}`)):console.warn(`[resolveSkills] skill ${ref.org}/${ref.slug} fetched but had no skillMd content`)}catch(err){console.warn(`[resolveSkills] failed to resolve skill ${ref.org}/${ref.slug}: ${err instanceof Error?err.message:err}`)}return console.log(`[resolveSkills] completed: ${results.length}/${skillRefs.length} skills resolved`),results}async function writeSkill(skill,skillsDir,workspaceDir,artifactBytes){let spec=skill.spec;if(!spec?.skillMd)return null;let name2=spec.name||skill.metadata?.slug||"unknown",skillDir=(0,import_node_path12.join)(skillsDir,name2);await(0,import_promises7.mkdir)(skillDir,{recursive:!0});let skillMdPath=(0,import_node_path12.join)(skillDir,"SKILL.md");if(await(0,import_promises7.writeFile)(skillMdPath,spec.skillMd,"utf-8"),artifactBytes&&artifactBytes.length>0){let entries=await extractZipFileEntries(artifactBytes,{exclude:["SKILL.md"]});for(let entry of entries){let filePath=(0,import_node_path12.join)(skillDir,entry.path);await(0,import_promises7.mkdir)((0,import_node_path12.dirname)(filePath),{recursive:!0}),await(0,import_promises7.writeFile)(filePath,entry.content,"utf-8")}}let relativePath=(0,import_node_path12.join)(STIGMER_LOCAL_STATE_DIR,SKILLS_SUBDIR,name2,"SKILL.md");return{name:name2,description:spec.description||`Skill: ${name2}`,path:relativePath}}var import_promises7,import_node_path12,SKILLS_SUBDIR,init_skill_resolver=__esm({"dist/activities/execute-cursor/skill-resolver.js"(){"use strict";import_promises7=require("node:fs/promises"),import_node_path12=require("node:path");init_platform_dir();init_zip_extract();init_stigmer_link();SKILLS_SUBDIR="skills"}});async function resolveAttachments(attachments,options){if(attachments.length===0)return[];let platformDir=getPlatformDir(options.sessionId),inputsDir=(0,import_node_path13.join)(platformDir,INPUTS_SUBDIR);await(0,import_promises8.mkdir)(inputsDir,{recursive:!0}),await ensureStigmerSymlink(options.primaryWorkspaceDir,platformDir);let results=[];for(let attachment of attachments)results.push(await resolveAttachment(attachment,inputsDir,options));return console.log(`[attachment-resolver] resolved ${results.length} attachment(s): `+results.map(r=>r.relativePath).join(", ")),results}async function resolveAttachment(attachment,inputsDir,options){if(options.mode==="local"&&attachment.localPath){let filename2=attachment.filename||(0,import_node_path13.basename)(attachment.localPath);try{await(0,import_promises8.copyFile)(attachment.localPath,(0,import_node_path13.join)(inputsDir,filename2))}catch(err){throw new AttachmentResolutionError(attachment.filename,`failed to copy local file '${attachment.localPath}': ${err instanceof Error?err.message:String(err)}`)}return{filename:filename2,relativePath:(0,import_node_path13.join)(STIGMER_LOCAL_STATE_DIR,INPUTS_SUBDIR,filename2)}}if(!attachment.storageKey)throw new AttachmentResolutionError(attachment.filename,"missing storageKey \u2014 cannot download attachment from storage");if(!options.storage)throw new AttachmentResolutionError(attachment.filename,`artifact storage is unavailable, so this attachment (key: ${attachment.storageKey}) cannot be downloaded`);let filename=attachment.filename||(0,import_node_path13.basename)(attachment.storageKey),content;try{content=await options.storage.download(attachment.storageKey)}catch(err){throw new AttachmentResolutionError(attachment.filename,`failed to download from storage (key: ${attachment.storageKey}): ${err instanceof Error?err.message:String(err)}`)}return await(0,import_promises8.writeFile)((0,import_node_path13.join)(inputsDir,filename),content),{filename,relativePath:(0,import_node_path13.join)(STIGMER_LOCAL_STATE_DIR,INPUTS_SUBDIR,filename)}}var import_promises8,import_node_path13,INPUTS_SUBDIR,AttachmentResolutionError,init_attachment_resolver=__esm({"dist/activities/execute-cursor/attachment-resolver.js"(){"use strict";import_promises8=require("node:fs/promises"),import_node_path13=require("node:path");init_platform_dir();init_stigmer_link();INPUTS_SUBDIR="inputs",AttachmentResolutionError=class extends Error{attachmentFilename;reason;constructor(attachmentFilename,reason){super(`Attachment '${attachmentFilename}': ${reason}`),this.name="AttachmentResolutionError",this.attachmentFilename=attachmentFilename,this.reason=reason}}}});var PLAN_MODE_DIRECTIVE,init_plan_mode_prompt=__esm({"dist/shared/plan-mode-prompt.js"(){"use strict";PLAN_MODE_DIRECTIVE=["IMPORTANT: You are in Plan mode \u2014 a read-only analysis turn whose deliverable is an implementation plan.","","Constraints:","- Do NOT create, edit, or delete any files.","- Do NOT run commands that modify the filesystem or any external state.","- Only read, search, and analyze.","","Deliverable \u2014 your FINAL message IS the plan. It is published verbatim as a plan document that the user reviews and builds from, so:","- Write it as a complete, well-structured markdown document: start with a single `#` title and organize the work under `##` section headings. Use lists and tables where they aid scanning.",'- Give the `#` title a concise, descriptive name for the work itself; do NOT prefix it with "Plan:" (this document is already a plan \u2014 the prefix is redundant and leaks into the plan\'s filename).',"- Reference concrete file paths and describe the specific changes planned for each.","- Do NOT wrap the document in a code fence.","- When quoting content that itself contains fenced code blocks (e.g. a proposed file section with a code sample inside), open the outer fence with MORE backticks than any inner fence (four or more) \u2014 a same-length inner closer would terminate the outer fence early and corrupt the rendered document.","- Fenced ```mermaid blocks at the top level of the document render as diagrams in the plan viewer. When a diagram helps communicate the design (architecture, flows), include it directly in the plan body \u2014 not only inside quoted file content, where it stays unrendered source.",`- Do NOT end with conversational closers ("Let me know...", "Shall I proceed?") \u2014 the next step is the user's Build action, and trailing chat would be published as part of the document.`].join(`
|
|
163
|
+
`),console.log(`CursorEventRecorder: flushed ${this.lines.length} events to ${filePath}`)}}}});function resolvePlaceholders(template,envVars,context3){return template.replace(PLACEHOLDER_RE,(match,varName)=>{if(varName in envVars)return envVars[varName];throw new PlaceholderResolutionError(varName,context3)})}function resolveHeaders(headers,envVars){let resolved={};for(let[key,value]of Object.entries(headers))resolved[key]=resolvePlaceholders(value,envVars,`header "${key}"`);return resolved}function filterEnvToDeclaredKeys(declaredEnv,envVars,serverSlug){if(!declaredEnv||Object.keys(declaredEnv).length===0)return Object.keys(envVars).length>0&&console.log(`MCP server '${serverSlug}' has no env declarations \u2014 dropping ${Object.keys(envVars).length} env var(s)`),{};let declaredKeys=new Set(Object.keys(declaredEnv)),filtered={};for(let[key,value]of Object.entries(envVars))declaredKeys.has(key)&&(filtered[key]=value);let dropped=Object.keys(envVars).length-Object.keys(filtered).length;dropped>0&&console.log(`MCP server '${serverSlug}': passing ${Object.keys(filtered).length} declared env var(s), filtered out ${dropped} undeclared key(s)`);let missing=[...declaredKeys].filter(k=>!(k in filtered));return missing.length>0&&console.warn(`MCP server '${serverSlug}': env declares [${missing.sort().join(", ")}] but they are not present in the resolved environment`),filtered}var PLACEHOLDER_RE,PlaceholderResolutionError,init_placeholder_resolver=__esm({"dist/activities/execute-cursor/placeholder-resolver.js"(){"use strict";PLACEHOLDER_RE=/\$\{([A-Za-z_][A-Za-z0-9_]*)\}/g,PlaceholderResolutionError=class extends Error{variableName;context;constructor(variableName,context3){let where=context3?` in ${context3}`:"";super(`Unresolved placeholder \${${variableName}}${where}: variable is not present in the execution environment`),this.variableName=variableName,this.context=context3,this.name="PlaceholderResolutionError"}}}});async function resolveMcpServers(client2,usages,envVars={}){let resolved=[];for(let usage of usages){let ref=usage.mcpServerRef;if(ref?.slug)try{let mcpServer=await client2.getMcpServerByReference(ref),serverEnv=filterEnvToDeclaredKeys(mcpServer.spec?.env,envVars,ref.slug),server=mcpServerToResolved(mcpServer,ref.slug,serverEnv);server&&resolved.push(server)}catch(err){err instanceof PlaceholderResolutionError?console.error(`MCP server ${ref.org}/${ref.slug}: ${err.message}`):console.warn(`Failed to resolve MCP server ${ref.org}/${ref.slug}: ${err instanceof Error?err.message:err}`)}}return{cursorConfig:toCursorMcpConfig(resolved),resolvedServers:resolved}}function mcpServerToResolved(server,slug,envVars){let spec=server.spec;if(!spec)return null;let status=server.status,toolApprovals=status?.toolApprovals??[],pinnedToolApprovals=spec.pinnedToolApprovals??[],discoveredCapabilitiesEmpty=!status?.discoveredCapabilities||status.discoveredCapabilities.tools.length===0&&status.discoveredCapabilities.resourceTemplates.length===0,base={toolApprovals,pinnedToolApprovals,discoveredCapabilitiesEmpty};switch(spec.serverType.case){case"stdio":{let stdio=spec.serverType.value;if(!stdio.command)return null;let resolvedArgs=stdio.args.length>0?stdio.args.map((arg,i2)=>resolvePlaceholders(arg,envVars,`stdio arg[${i2}]`)):void 0;return{slug,connectionType:"stdio",command:stdio.command,args:resolvedArgs,env:Object.keys(envVars).length>0?{...envVars}:void 0,cwd:stdio.workingDir||void 0,...base}}case"http":{let http3=spec.serverType.value;if(!http3.url)return null;let rawHeaders=Object.keys(http3.headers).length>0?http3.headers:void 0,resolved=rawHeaders?resolveHeaders(Object.fromEntries(Object.entries(rawHeaders)),envVars):void 0;return{slug,connectionType:"http",url:http3.url,headers:resolved,...base}}default:return null}}function toCursorMcpConfig(servers){let result={};for(let server of servers)if(server.connectionType==="stdio"){if(!server.command)continue;result[server.slug]={type:"stdio",command:server.command,args:server.args,env:server.env,cwd:server.cwd}}else{if(!server.url)continue;result[server.slug]={type:server.connectionType,url:server.url,headers:server.headers}}return result}function validateMcpServerEnv(servers,usages,envVars){let warnings=[];for(let usage of usages){let slug=usage.mcpServerRef?.slug;if(!slug)continue;let resolved=servers.find(s=>s.slug===slug);if(!resolved){warnings.push(`MCP server '${slug}': failed to resolve (server may not exist or is inaccessible)`);continue}if(resolved.connectionType==="stdio"&&resolved.env){let emptyKeys=Object.entries(resolved.env).filter(([,v])=>!v).map(([k])=>k);emptyKeys.length>0&&warnings.push(`MCP server '${slug}': env vars [${emptyKeys.join(", ")}] are empty \u2014 server subprocess will likely fail to connect`)}}return warnings}var init_mcp_resolver=__esm({"dist/activities/execute-cursor/mcp-resolver.js"(){"use strict";init_placeholder_resolver();init_placeholder_resolver()}});function resolvePlaceholders2(template,envVars,context3){return template.replace(PLACEHOLDER_RE2,(match,varName)=>{if(varName in envVars)return envVars[varName];throw new PlaceholderResolutionError2(varName,context3)})}function resolveHeaders2(headers,envVars){let resolved={};for(let[key,value]of Object.entries(headers))resolved[key]=resolvePlaceholders2(value,envVars,`header "${key}"`);return resolved}function filterEnvToDeclaredKeys2(declaredEnv,envVars,serverSlug){if(!declaredEnv||Object.keys(declaredEnv).length===0)return Object.keys(envVars).length>0&&console.log(`MCP server '${serverSlug}' has no env declarations \u2014 dropping ${Object.keys(envVars).length} env var(s)`),{};let declaredKeys=new Set(Object.keys(declaredEnv)),filtered={};for(let[key,value]of Object.entries(envVars))declaredKeys.has(key)&&(filtered[key]=value);let dropped=Object.keys(envVars).length-Object.keys(filtered).length;dropped>0&&console.log(`MCP server '${serverSlug}': passing ${Object.keys(filtered).length} declared env var(s), filtered out ${dropped} undeclared key(s)`);let missing=[...declaredKeys].filter(k=>!(k in filtered));return missing.length>0&&console.warn(`MCP server '${serverSlug}': env declares [${missing.sort().join(", ")}] but they are not present in the resolved environment`),filtered}var PLACEHOLDER_RE2,PlaceholderResolutionError2,init_placeholder_resolver2=__esm({"dist/shared/placeholder-resolver.js"(){"use strict";PLACEHOLDER_RE2=/\$\{([A-Za-z_][A-Za-z0-9_]*)\}/g,PlaceholderResolutionError2=class extends Error{variableName;context;constructor(variableName,context3){let where=context3?` in ${context3}`:"";super(`Unresolved placeholder \${${variableName}}${where}: variable is not present in the execution environment`),this.variableName=variableName,this.context=context3,this.name="PlaceholderResolutionError"}}}});async function resolveMcpServers2(client2,usages,envVars={}){let resolved=[];for(let usage of usages){let ref=usage.mcpServerRef;if(ref?.slug)try{let mcpServer=await client2.getMcpServerByReference(ref),serverEnv=filterEnvToDeclaredKeys2(mcpServer.spec?.env,envVars,ref.slug),server=mcpServerToResolved2(mcpServer,ref.slug,serverEnv);server&&resolved.push(server)}catch(err){err instanceof PlaceholderResolutionError2?console.error(`MCP server ${ref.org}/${ref.slug}: ${err.message}`):console.warn(`Failed to resolve MCP server ${ref.org}/${ref.slug}: ${err instanceof Error?err.message:err}`)}}return{resolvedServers:resolved}}function mcpServerToResolved2(server,slug,envVars){let spec=server.spec;if(!spec)return null;let status=server.status,toolApprovals=status?.toolApprovals??[],pinnedToolApprovals=spec.pinnedToolApprovals??[],discoveredCapabilitiesEmpty=!status?.discoveredCapabilities||status.discoveredCapabilities.tools.length===0&&status.discoveredCapabilities.resourceTemplates.length===0,base={toolApprovals,pinnedToolApprovals,discoveredCapabilitiesEmpty};switch(spec.serverType.case){case"stdio":{let stdio=spec.serverType.value;if(!stdio.command)return null;let resolvedArgs=stdio.args.length>0?stdio.args.map((arg,i2)=>resolvePlaceholders2(arg,envVars,`stdio arg[${i2}]`)):void 0;return{slug,connectionType:"stdio",command:stdio.command,args:resolvedArgs,env:Object.keys(envVars).length>0?{...envVars}:void 0,cwd:stdio.workingDir||void 0,...base}}case"http":{let http3=spec.serverType.value;if(!http3.url)return null;let rawHeaders=Object.keys(http3.headers).length>0?http3.headers:void 0,resolved=rawHeaders?resolveHeaders2(Object.fromEntries(Object.entries(rawHeaders)),envVars):void 0;return{slug,connectionType:"http",url:http3.url,headers:resolved,...base}}default:return null}}var init_mcp_resolver2=__esm({"dist/shared/mcp-resolver.js"(){"use strict";init_placeholder_resolver2();init_placeholder_resolver2()}});function needsBackfill(server){return SKIP_BACKFILL?!1:server.discoveredCapabilitiesEmpty}async function backfillMcpServersIfNeeded(client2,currentServers,usages,envVars,org,onHeartbeat,secretKeys){let serversNeedingBackfill=currentServers.filter(needsBackfill);if(serversNeedingBackfill.length===0)return currentServers;console.log(`[connect-backfill] Backfill needed for ${serversNeedingBackfill.length} MCP server(s): `+serversNeedingBackfill.map(s=>s.slug).join(", "));let anyBackfilled=!1;for(let server of serversNeedingBackfill)try{let serverRef=usages.find(u=>u.mcpServerRef?.slug===server.slug);if(!serverRef?.mcpServerRef)continue;let fullServer=await client2.getMcpServerByReference(serverRef.mcpServerRef),serverId=fullServer.metadata?.id;if(!serverId)continue;let runtimeEnv=extractRuntimeEnvForServer(fullServer,envVars,secretKeys);console.log(`[connect-backfill] Triggering connect for "${server.slug}" (${serverId})`),onHeartbeat?.();let updated=await Promise.race([client2.connectMcpServer(serverId,org,runtimeEnv),new Promise((_,reject)=>setTimeout(()=>reject(new Error(`Connect timed out after ${CONNECT_TIMEOUT_MS/1e3}s`)),CONNECT_TIMEOUT_MS))]),toolCount=updated.status?.discoveredCapabilities?.tools.length??0,approvalCount=updated.status?.toolApprovals?.length??0;console.log(`[connect-backfill] "${server.slug}" \u2014 discovered ${toolCount} tool(s), classified ${approvalCount} approval policy(ies)`),anyBackfilled=!0,onHeartbeat?.()}catch(err){console.warn(`[connect-backfill] Failed for "${server.slug}": ${err instanceof Error?err.message:err}. Continuing with empty approval policies for this server.`)}return anyBackfilled?(await resolveMcpServers2(client2,usages,envVars)).resolvedServers:currentServers}function extractRuntimeEnvForServer(server,mergedEnv,secretKeys){let envDecls=server.spec?.env;if(!envDecls||Object.keys(envDecls).length===0)return;let runtime={};for(let key of Object.keys(envDecls))if(key in mergedEnv){let isSecret=envDecls[key]?.isSecret??secretKeys?.has(key)??!1;runtime[key]={value:mergedEnv[key],isSecret}}return Object.keys(runtime).length>0?runtime:void 0}var CONNECT_TIMEOUT_MS,SKIP_BACKFILL,init_connect_backfill=__esm({"dist/shared/connect-backfill.js"(){"use strict";init_mcp_resolver2();CONNECT_TIMEOUT_MS=6e4,SKIP_BACKFILL=process.env.SKIP_MCP_CONNECT_BACKFILL==="true"}});async function backfillMcpServersIfNeeded2(client2,currentResult,usages,envVars,org,onHeartbeat,secretKeys){let updatedServers=await backfillMcpServersIfNeeded(client2,currentResult.resolvedServers,usages,envVars,org,onHeartbeat,secretKeys);return updatedServers===currentResult.resolvedServers?currentResult:{cursorConfig:toCursorMcpConfig(updatedServers),resolvedServers:updatedServers}}var init_connect_backfill2=__esm({"dist/activities/execute-cursor/connect-backfill.js"(){"use strict";init_mcp_resolver();init_connect_backfill()}});async function resolveExecutionEnv(client2,executionId){let execCtx;try{execCtx=await client2.getExecutionContextByExecutionId(executionId)}catch(err){if(err?.code===5)return console.log(`No ExecutionContext found for execution ${executionId} \u2014 proceeding with empty environment.`),{envVars:{},secretKeys:new Set};throw err}let envVars={},secretKeys=new Set,data=execCtx.spec?.data;if(data)for(let[key,execValue]of Object.entries(data))envVars[key]=execValue.value,execValue.isSecret&&secretKeys.add(key);return console.log(`Resolved environment from ExecutionContext: context_id=${execCtx.metadata?.id}, env_count=${Object.keys(envVars).length}, secret_count=${secretKeys.size}, keys=[${Object.keys(envVars).sort().join(", ")}]`),{envVars,secretKeys}}var init_env_resolver=__esm({"dist/activities/execute-cursor/env-resolver.js"(){"use strict"}});async function resolveBlueprint(client2,session,fallbackWorkspaceDir){let sessionSpec=session.spec,agentId=(await client2.getAgentInstance(sessionSpec.agentInstanceId)).spec.agentId,agent=await client2.getAgent(agentId),agentSpec=agent.spec,mergedMcpServerUsages=mergeMcpServerUsages(agentSpec.mcpServerUsages,sessionSpec.mcpServerUsages),mergedSkillRefs=mergeSkillRefs(agentSpec.skillRefs,sessionSpec.skillRefs),workspaceDirs=resolveWorkspaceDirs(sessionSpec,fallbackWorkspaceDir),cloudRepos=resolveCloudRepos(sessionSpec.workspaceEntries);return{agent,agentSpec,session,sessionSpec,instructions:agentSpec.instructions,subAgents:agentSpec.subAgents,mergedMcpServerUsages,mergedSkillRefs,workspaceDirs,cloudRepos}}function resolveCloudRepos(workspaceEntries){let repos=[];for(let entry of workspaceEntries)if(entry.source?.source.case==="gitRepo"){let git2=entry.source.source.value;repos.push({url:git2.url,startingRef:git2.branch||void 0})}return repos}function mergeMcpServerUsages(agentUsages,sessionUsages){let bySlug=new Map;for(let usage of agentUsages){let slug=usage.mcpServerRef?.slug;slug&&bySlug.set(slug,usage)}for(let usage of sessionUsages){let slug=usage.mcpServerRef?.slug;slug&&bySlug.set(slug,usage)}return[...bySlug.values()]}function mergeSkillRefs(agentRefs,sessionRefs){let bySlug=new Map;for(let ref of agentRefs)ref.slug&&bySlug.set(ref.slug,ref);for(let ref of sessionRefs)ref.slug&&bySlug.set(ref.slug,ref);return[...bySlug.values()]}function resolveWorkspaceDirs(sessionSpec,fallbackDir){let safeFallback=validateWorkspaceDir(fallbackDir)?fallbackDir:logAndSkipRunnerDir(fallbackDir,"fallback config");if(!sessionSpec.workspaceEntries.length)return safeFallback?[safeFallback]:[];let dirs=[];for(let entry of sessionSpec.workspaceEntries)if(entry.source?.source.case==="localPath"){let path6=entry.source.source.value.path;validateWorkspaceDir(path6)?dirs.push(path6):logAndSkipRunnerDir(path6,"session workspace entry")}return dirs.length>0?dirs:safeFallback?[safeFallback]:[]}function validateWorkspaceDir(dir){let absolute=(0,import_node_path9.resolve)(dir);return!RUNNER_INTERNAL_MARKERS.some(marker=>absolute.includes(marker))}function logAndSkipRunnerDir(dir,source){console.warn(`Workspace dir from ${source} ("${dir}") is a runner-internal path \u2014 rejecting to prevent implementation detail leakage.`)}var import_node_path9,RUNNER_INTERNAL_MARKERS,init_blueprint_resolver=__esm({"dist/activities/execute-cursor/blueprint-resolver.js"(){"use strict";import_node_path9=require("node:path"),RUNNER_INTERNAL_MARKERS=["/runtimes/cursor-runner/","/runtimes/agent-runner/"]}});function buildCursorSubAgentDefinitions(subAgents){if(subAgents.length===0)return;let agents={};for(let sa of subAgents){let name2=sa.name?.trim();if(!name2)continue;let prompt=sa.instructions?.trim()||sa.description?.trim()||name2;agents[name2]={description:sa.description??"",prompt,model:sa.modelOverride?{id:sa.modelOverride}:"inherit"}}return Object.keys(agents).length>0?agents:void 0}var init_subagent_config=__esm({"dist/activities/execute-cursor/subagent-config.js"(){"use strict"}});function getStigmerHome(){return process.env.HOME||process.env.USERPROFILE||(0,import_node_os3.homedir)()}function getSessionDir(sessionId){return(0,import_node_path10.join)(getStigmerHome(),".stigmer","sessions",sessionId)}function getHitlGateDir(workspaceRoot){let key=(0,import_node_crypto8.createHash)("sha256").update(workspaceRoot).digest("hex").slice(0,16);return(0,import_node_path10.join)(getStigmerHome(),".stigmer","hitl-gate",key)}async function ensureHitlGateDir(workspaceRoot){let dir=getHitlGateDir(workspaceRoot);return await(0,import_promises5.mkdir)(dir,{recursive:!0}),dir}function getPlatformDir(sessionId){return(0,import_node_path10.join)(getSessionDir(sessionId),"platform")}async function ensurePlatformDir(sessionId){let dir=getPlatformDir(sessionId);return await(0,import_promises5.mkdir)(dir,{recursive:!0}),dir}function getHitlDir(sessionId){return(0,import_node_path10.join)(getSessionDir(sessionId),"hitl")}async function ensureHitlDir(sessionId){let dir=getHitlDir(sessionId);return await(0,import_promises5.mkdir)(dir,{recursive:!0}),dir}var import_node_path10,import_promises5,import_node_os3,import_node_crypto8,init_platform_dir=__esm({"dist/shared/workspace/platform-dir.js"(){"use strict";import_node_path10=require("node:path"),import_promises5=require("node:fs/promises"),import_node_os3=require("node:os"),import_node_crypto8=require("node:crypto")}});async function extractZipFileEntries(zipBytes,options){if(zipBytes.length<4)return[];let entries;try{entries=parseZipEntries(zipBytes)}catch{return[]}let excludeSet=new Set(options?.exclude??[]),results=[];for(let entry of entries){if(entry.isDirectory||isExcluded(entry.name,excludeSet))continue;let content=await decompressEntry(entry);results.push({path:entry.name,content})}return results}function isExcluded(name2,excludeSet){if(excludeSet.size===0)return!1;if(excludeSet.has(name2))return!0;let basename7=name2.includes("/")?name2.slice(name2.lastIndexOf("/")+1):name2;return excludeSet.has(basename7)}function parseZipEntries(data){let entries=[],view2=new DataView(data.buffer,data.byteOffset,data.byteLength),offset=0;for(;offset<data.length-4&&view2.getUint32(offset,!0)===67324752;){let hasDataDescriptor=(view2.getUint16(offset+6,!0)&8)!==0,compressionMethod=view2.getUint16(offset+8,!0),compressedSize=view2.getUint32(offset+18,!0),uncompressedSize=view2.getUint32(offset+22,!0),fileNameLength=view2.getUint16(offset+26,!0),extraFieldLength=view2.getUint16(offset+28,!0),fileNameStart=offset+30,fileName=new TextDecoder().decode(data.subarray(fileNameStart,fileNameStart+fileNameLength)),dataStart=fileNameStart+fileNameLength+extraFieldLength;if(hasDataDescriptor&&compressedSize===0){let sizes=findDataDescriptor(data,view2,dataStart,compressionMethod);compressedSize=sizes.compressedSize,uncompressedSize=sizes.uncompressedSize}let compressedData=data.subarray(dataStart,dataStart+compressedSize);entries.push({name:fileName,isDirectory:fileName.endsWith("/"),compressedData,compressionMethod,uncompressedSize});let nextOffset=dataStart+compressedSize;hasDataDescriptor&&(nextOffset+4<=data.length&&view2.getUint32(nextOffset,!0)===134695760?nextOffset+=16:nextOffset+=12),offset=nextOffset}return entries}function findDataDescriptor(data,view2,dataStart,_compressionMethod){for(let pos=dataStart;pos<data.length-16;pos++){let sig=view2.getUint32(pos,!0);if(sig===134695760)return{compressedSize:view2.getUint32(pos+8,!0),uncompressedSize:view2.getUint32(pos+12,!0)};if(sig===67324752||sig===33639248){let descStart=pos-12;if(descStart>=dataStart)return{compressedSize:view2.getUint32(descStart+4,!0),uncompressedSize:view2.getUint32(descStart+8,!0)};break}}for(let pos=dataStart;pos<data.length-4;pos++){let sig=view2.getUint32(pos,!0);if(sig===67324752||sig===33639248||sig===134695760)return{compressedSize:sig===134695760?view2.getUint32(pos+8,!0):pos-dataStart,uncompressedSize:0}}return{compressedSize:data.length-dataStart,uncompressedSize:0}}async function decompressEntry(entry){if(entry.compressionMethod===0)return new TextDecoder().decode(entry.compressedData);if(entry.compressionMethod===8)return new Promise((resolve7,reject)=>{let inflate=(0,import_node_zlib.createInflateRaw)(),chunks=[];inflate.on("data",chunk=>chunks.push(chunk)),inflate.on("end",()=>resolve7(Buffer.concat(chunks).toString("utf-8"))),inflate.on("error",reject),inflate.end(Buffer.from(entry.compressedData))});throw new Error(`Unsupported ZIP compression method: ${entry.compressionMethod}`)}var import_node_zlib,init_zip_extract=__esm({"dist/shared/zip-extract.js"(){"use strict";import_node_zlib=require("node:zlib")}});async function ensureStigmerSymlink(workspaceDir,platformDir){let linkPath=(0,import_node_path11.join)(workspaceDir,STIGMER_LOCAL_STATE_DIR);try{if(await(0,import_promises6.readlink)(linkPath)===platformDir)return;await(0,import_promises6.unlink)(linkPath)}catch(err){if(err.code!=="ENOENT")if(err.code==="EINVAL")await(0,import_promises6.rm)(linkPath,{recursive:!0,force:!0});else throw err}await(0,import_promises6.symlink)(platformDir,linkPath,"dir")}async function removeStigmerSymlink(workspaceDir){let linkPath=(0,import_node_path11.join)(workspaceDir,STIGMER_LOCAL_STATE_DIR);try{(await(0,import_promises6.lstat)(linkPath)).isSymbolicLink()&&await(0,import_promises6.unlink)(linkPath)}catch(err){err?.code!=="ENOENT"&&console.warn(`removeStigmerSymlink: failed to remove ${linkPath} (non-fatal): ${err instanceof Error?err.message:err}`)}}var import_promises6,import_node_path11,STIGMER_LOCAL_STATE_DIR,init_stigmer_link=__esm({"dist/shared/workspace/stigmer-link.js"(){"use strict";import_promises6=require("node:fs/promises"),import_node_path11=require("node:path"),STIGMER_LOCAL_STATE_DIR=".stigmer"}});async function resolveSkills(client2,skillRefs,options){if(console.log(`[resolveSkills] sessionId=${options.sessionId}, primaryWorkspaceDir=${options.primaryWorkspaceDir??"(undefined)"}, skillRefCount=${skillRefs.length}, refs=[${skillRefs.map(r=>`${r.org||"(default)"}/${r.slug}`).join(", ")}]`),skillRefs.length===0)return[];let platformDir=getPlatformDir(options.sessionId),skillsDir=(0,import_node_path12.join)(platformDir,SKILLS_SUBDIR);await(0,import_promises7.mkdir)(skillsDir,{recursive:!0}),await ensureStigmerSymlink(options.primaryWorkspaceDir,platformDir),console.log(`[resolveSkills] symlink created: ${(0,import_node_path12.join)(options.primaryWorkspaceDir,STIGMER_LOCAL_STATE_DIR)} -> ${platformDir}`);let results=[];for(let ref of skillRefs)try{let skill=await client2.getSkillByReference(ref),artifactBytes;if(skill.status?.artifactStorageKey)try{let resp=await client2.getSkillArtifact(skill.status.artifactStorageKey);resp.artifact&&resp.artifact.length>0&&(artifactBytes=resp.artifact)}catch(err){console.warn(`[resolveSkills] artifact download failed for ${ref.slug}, falling back to SKILL.md only: ${err instanceof Error?err.message:err}`)}let meta3=await writeSkill(skill,skillsDir,options.primaryWorkspaceDir,artifactBytes);meta3?(results.push(meta3),console.log(`[resolveSkills] wrote skill: ${meta3.name} -> ${meta3.path}`)):console.warn(`[resolveSkills] skill ${ref.org}/${ref.slug} fetched but had no skillMd content`)}catch(err){console.warn(`[resolveSkills] failed to resolve skill ${ref.org}/${ref.slug}: ${err instanceof Error?err.message:err}`)}return console.log(`[resolveSkills] completed: ${results.length}/${skillRefs.length} skills resolved`),results}async function writeSkill(skill,skillsDir,workspaceDir,artifactBytes){let spec=skill.spec;if(!spec?.skillMd)return null;let name2=spec.name||skill.metadata?.slug||"unknown",skillDir=(0,import_node_path12.join)(skillsDir,name2);await(0,import_promises7.mkdir)(skillDir,{recursive:!0});let skillMdPath=(0,import_node_path12.join)(skillDir,"SKILL.md");if(await(0,import_promises7.writeFile)(skillMdPath,spec.skillMd,"utf-8"),artifactBytes&&artifactBytes.length>0){let entries=await extractZipFileEntries(artifactBytes,{exclude:["SKILL.md"]});for(let entry of entries){let filePath=(0,import_node_path12.join)(skillDir,entry.path);await(0,import_promises7.mkdir)((0,import_node_path12.dirname)(filePath),{recursive:!0}),await(0,import_promises7.writeFile)(filePath,entry.content,"utf-8")}}let relativePath=(0,import_node_path12.join)(STIGMER_LOCAL_STATE_DIR,SKILLS_SUBDIR,name2,"SKILL.md");return{name:name2,description:spec.description||`Skill: ${name2}`,path:relativePath}}var import_promises7,import_node_path12,SKILLS_SUBDIR,init_skill_resolver=__esm({"dist/activities/execute-cursor/skill-resolver.js"(){"use strict";import_promises7=require("node:fs/promises"),import_node_path12=require("node:path");init_platform_dir();init_zip_extract();init_stigmer_link();SKILLS_SUBDIR="skills"}});async function resolveAttachments(attachments,options){if(attachments.length===0)return[];let platformDir=getPlatformDir(options.sessionId),inputsDir=(0,import_node_path13.join)(platformDir,INPUTS_SUBDIR);await(0,import_promises8.mkdir)(inputsDir,{recursive:!0}),await ensureStigmerSymlink(options.primaryWorkspaceDir,platformDir);let results=[];for(let attachment of attachments)results.push(await resolveAttachment(attachment,inputsDir,options));return console.log(`[attachment-resolver] resolved ${results.length} attachment(s): `+results.map(r=>r.relativePath).join(", ")),results}async function resolveAttachment(attachment,inputsDir,options){if(options.mode==="local"&&attachment.localPath){let filename2=attachment.filename||(0,import_node_path13.basename)(attachment.localPath);try{await(0,import_promises8.copyFile)(attachment.localPath,(0,import_node_path13.join)(inputsDir,filename2))}catch(err){throw new AttachmentResolutionError(attachment.filename,`failed to copy local file '${attachment.localPath}': ${err instanceof Error?err.message:String(err)}`)}return{filename:filename2,relativePath:(0,import_node_path13.join)(STIGMER_LOCAL_STATE_DIR,INPUTS_SUBDIR,filename2)}}if(!attachment.storageKey)throw new AttachmentResolutionError(attachment.filename,"missing storageKey \u2014 cannot download attachment from storage");if(!options.storage)throw new AttachmentResolutionError(attachment.filename,`artifact storage is unavailable, so this attachment (key: ${attachment.storageKey}) cannot be downloaded`);let filename=attachment.filename||(0,import_node_path13.basename)(attachment.storageKey),content;try{content=await options.storage.download(attachment.storageKey)}catch(err){throw new AttachmentResolutionError(attachment.filename,`failed to download from storage (key: ${attachment.storageKey}): ${err instanceof Error?err.message:String(err)}`)}return await(0,import_promises8.writeFile)((0,import_node_path13.join)(inputsDir,filename),content),{filename,relativePath:(0,import_node_path13.join)(STIGMER_LOCAL_STATE_DIR,INPUTS_SUBDIR,filename)}}var import_promises8,import_node_path13,INPUTS_SUBDIR,AttachmentResolutionError,init_attachment_resolver=__esm({"dist/activities/execute-cursor/attachment-resolver.js"(){"use strict";import_promises8=require("node:fs/promises"),import_node_path13=require("node:path");init_platform_dir();init_stigmer_link();INPUTS_SUBDIR="inputs",AttachmentResolutionError=class extends Error{attachmentFilename;reason;constructor(attachmentFilename,reason){super(`Attachment '${attachmentFilename}': ${reason}`),this.name="AttachmentResolutionError",this.attachmentFilename=attachmentFilename,this.reason=reason}}}});var PLAN_MODE_DIRECTIVE,init_plan_mode_prompt=__esm({"dist/shared/plan-mode-prompt.js"(){"use strict";PLAN_MODE_DIRECTIVE=["IMPORTANT: You are in Plan mode \u2014 a read-only analysis turn whose deliverable is an implementation plan.","","Constraints:","- Do NOT create, edit, or delete any files.","- Do NOT run commands that modify the filesystem or any external state.","- Only read, search, and analyze.","","Deliverable \u2014 your FINAL message IS the plan. It is published verbatim as a plan document that the user reviews and builds from, so:","- Write it as a complete, well-structured markdown document: start with a single `#` title and organize the work under `##` section headings. Use lists and tables where they aid scanning.",'- Give the `#` title a concise, descriptive name for the work itself; do NOT prefix it with "Plan:" (this document is already a plan \u2014 the prefix is redundant and leaks into the plan\'s filename).',"- Reference concrete file paths and describe the specific changes planned for each.","- Do NOT wrap the document in a code fence.","- When quoting content that itself contains fenced code blocks (e.g. a proposed file section with a code sample inside), open the outer fence with MORE backticks than any inner fence (four or more) \u2014 a same-length inner closer would terminate the outer fence early and corrupt the rendered document.","- Fenced ```mermaid blocks at the top level of the document render as diagrams in the plan viewer. When a diagram helps communicate the design (architecture, flows), include it directly in the plan body \u2014 not only inside quoted file content, where it stays unrendered source.",`- Do NOT end with conversational closers ("Let me know...", "Shall I proceed?") \u2014 the next step is the user's Build action, and trailing chat would be published as part of the document.`].join(`
|
|
164
164
|
`)}});function findApprovedPlanPath(attachmentPaths){return attachmentPaths.find(p=>{let name2=p.split("/").pop();return name2!==void 0&&isPlanArtifactName(name2)})}function buildImplementPlanDirective(planPath){return planPath?["IMPORTANT: This turn implements a plan the user has reviewed and APPROVED.","",`The approved plan document is attached at \`${planPath}\`. Read it FIRST, then implement it step by step.`,"","That document is the authoritative version of the plan \u2014 the user may have edited it after it was proposed, so where it differs from the conversation above, follow the document.","",TRACK_PROGRESS_INSTRUCTION].join(`
|
|
165
165
|
`):["IMPORTANT: This turn implements a plan the user has reviewed and APPROVED.","","Implement the plan proposed in the conversation above, step by step.","",TRACK_PROGRESS_INSTRUCTION].join(`
|
|
166
166
|
`)}var TRACK_PROGRESS_INSTRUCTION,init_implement_plan_prompt=__esm({"dist/shared/implement-plan-prompt.js"(){"use strict";init_plan_artifact();TRACK_PROGRESS_INSTRUCTION=["Track your progress with your to-do list so the user can follow the build:","- Before you start, break the plan into a concrete, ordered to-do list \u2014 roughly one item per implementation step.","- As you work, keep it current: mark each item in progress when you begin it and completed when it is done."].join(`
|
|
@@ -548,7 +548,13 @@ Base commit: ${metadata.baseCommit}`,gitMetadata:metadata,entryName:""}}async fu
|
|
|
548
548
|
`+missing.join(`
|
|
549
549
|
`)+`
|
|
550
550
|
`)}catch{}}async function configureGitCredentialStore(backend,cloneDir,url3,token){let exec2=cmd=>backend.execute(cmd,{cwd:cloneDir}),credFile=(0,import_node_path24.join)(cloneDir,".git",".git-credentials"),cleanUrl=stripToken(url3);try{await exec2(`git remote set-url origin '${cleanUrl}'`)}catch(err){return console.warn(`[git] Failed to clean remote URL (non-fatal): ${err}`),!1}try{await exec2(`git config credential.helper 'store --file=${credFile}'`)}catch(err){return console.warn(`[git] Failed to configure credential helper (non-fatal): ${err}`),!1}let credEntry=`https://x-access-token:${token}@github.com
|
|
551
|
-
`;try{await backend.writeFile(credFile,credEntry)}catch(err){return console.warn(`[git] Failed to write credential file (non-fatal): ${err}`),!1}return!0}function injectToken(url3,token){return url3.replace("https://",`https://x-access-token:${token}@`)}function stripToken(url3){return url3.replace(/https:\/\/[^@]+@/,"https://")}var import_node_path24,GITHUB_HOST,GIT_EXCLUDE_ENTRIES,init_git=__esm({"dist/shared/workspace/sources/git.js"(){"use strict";import_node_path24=require("node:path");init_types6();GITHUB_HOST="github.com";GIT_EXCLUDE_ENTRIES=[".stigmer","lost+found"]}});function mergeConsumedKeys(sourceKeys,prefixKeys){if(prefixKeys.length===0)return[...sourceKeys];let merged=new Map;for(let k of sourceKeys)merged.set(k,!0);for(let k of prefixKeys)merged.set(k,!0);return[...merged.keys()]}var PROVISION_KEY_PREFIX,WorkspaceProvisioner,init_provisioner=__esm({"dist/shared/workspace/provisioner.js"(){"use strict";init_empty();init_local_path();init_git();PROVISION_KEY_PREFIX="WORKSPACE_PROVISION_",WorkspaceProvisioner=class{async provision(workspaceSource,backend,mergedEnv,isLocalMode,options){let result=await this.dispatch(workspaceSource,backend,mergedEnv,isLocalMode,options),prefixKeys=Object.keys(mergedEnv).filter(k=>k.startsWith(PROVISION_KEY_PREFIX)),allConsumed=mergeConsumedKeys(result.consumedKeys,prefixKeys);return allConsumed.length!==result.consumedKeys.length?{...result,consumedKeys:allConsumed}:result}async provisionAll(entries,backend,mergedEnv,isLocalMode,configureCredentials=!1){if(entries.length===0)return[];let useSubdirs=entries.length>1,results=[];for(let entry of entries){let targetSubdir=useSubdirs?entry.name:void 0,result=await this.provision(entry.source,backend,mergedEnv,isLocalMode,{targetSubdir,configureCredentials});results.push({...result,entryName:entry.name})}return results}async dispatch(workspaceSource,backend,mergedEnv,isLocalMode,options){if(!workspaceSource||!workspaceSource.source?.case)return provisionEmpty(backend);switch(workspaceSource.source.case){case"gitRepo":{let gitSource=workspaceSource.source.value;return provisionGit({url:gitSource.url,branch:gitSource.branch,backend,envVars:mergedEnv,isLocalMode,targetSubdir:options?.targetSubdir,configureCredentials:options?.configureCredentials})}case"localPath":{let localSource=workspaceSource.source.value;return provisionLocalPath({path:localSource.path,isLocalMode,targetSubdir:options?.targetSubdir,backendRootDir:options?.targetSubdir?backend.rootDir:void 0})}default:return provisionEmpty(backend)}}}}});async function resolveSessionWorkspaceRoot(workspaceRootDir,workspaceEntries,sessionId){if(workspaceEntries.length>0)return workspaceRootDir;if(!sessionId)throw new Error("resolveSessionWorkspaceRoot: sessionId is required for a session with no workspace entries; an empty value would collapse every such session onto one shared directory.");let sessionRoot=(0,import_node_path25.join)(workspaceRootDir,"sessions",sessionId);return await(0,import_promises16.mkdir)(sessionRoot,{recursive:!0}),sessionRoot}var import_node_path25,import_promises16,init_session_root=__esm({"dist/shared/workspace/session-root.js"(){"use strict";import_node_path25=require("node:path"),import_promises16=require("node:fs/promises")}});async function provisionCursorWorkspace(config4,session,envVars,sessionId){let entries=session.spec?.workspaceEntries??[];if(entries.length===0)return[await resolveSessionWorkspaceRoot(config4.workspaceRootDir,entries,sessionId)];let platformDir=await ensurePlatformDir(sessionId),backend=new LocalWorkspaceBackend(config4.workspaceRootDir,platformDir),dirs=(await new WorkspaceProvisioner().provisionAll(entries.map(entry=>({name:entry.name,source:entry.source})),backend,envVars,config4.mode==="local",config4.mode!=="local")).map(result=>result.rootDir).filter(dir=>!!dir);return dirs.length>0?dirs:[config4.workspaceRootDir]}var init_workspace_provision=__esm({"dist/activities/execute-cursor/workspace-provision.js"(){"use strict";init_provisioner();init_local_backend();init_platform_dir();init_session_root()}});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}
|
|
551
|
+
`;try{await backend.writeFile(credFile,credEntry)}catch(err){return console.warn(`[git] Failed to write credential file (non-fatal): ${err}`),!1}return!0}function injectToken(url3,token){return url3.replace("https://",`https://x-access-token:${token}@`)}function stripToken(url3){return url3.replace(/https:\/\/[^@]+@/,"https://")}var import_node_path24,GITHUB_HOST,GIT_EXCLUDE_ENTRIES,init_git=__esm({"dist/shared/workspace/sources/git.js"(){"use strict";import_node_path24=require("node:path");init_types6();GITHUB_HOST="github.com";GIT_EXCLUDE_ENTRIES=[".stigmer","lost+found"]}});function mergeConsumedKeys(sourceKeys,prefixKeys){if(prefixKeys.length===0)return[...sourceKeys];let merged=new Map;for(let k of sourceKeys)merged.set(k,!0);for(let k of prefixKeys)merged.set(k,!0);return[...merged.keys()]}var PROVISION_KEY_PREFIX,WorkspaceProvisioner,init_provisioner=__esm({"dist/shared/workspace/provisioner.js"(){"use strict";init_empty();init_local_path();init_git();PROVISION_KEY_PREFIX="WORKSPACE_PROVISION_",WorkspaceProvisioner=class{async provision(workspaceSource,backend,mergedEnv,isLocalMode,options){let result=await this.dispatch(workspaceSource,backend,mergedEnv,isLocalMode,options),prefixKeys=Object.keys(mergedEnv).filter(k=>k.startsWith(PROVISION_KEY_PREFIX)),allConsumed=mergeConsumedKeys(result.consumedKeys,prefixKeys);return allConsumed.length!==result.consumedKeys.length?{...result,consumedKeys:allConsumed}:result}async provisionAll(entries,backend,mergedEnv,isLocalMode,configureCredentials=!1){if(entries.length===0)return[];let useSubdirs=entries.length>1,results=[];for(let entry of entries){let targetSubdir=useSubdirs?entry.name:void 0,result=await this.provision(entry.source,backend,mergedEnv,isLocalMode,{targetSubdir,configureCredentials});results.push({...result,entryName:entry.name})}return results}async dispatch(workspaceSource,backend,mergedEnv,isLocalMode,options){if(!workspaceSource||!workspaceSource.source?.case)return provisionEmpty(backend);switch(workspaceSource.source.case){case"gitRepo":{let gitSource=workspaceSource.source.value;return provisionGit({url:gitSource.url,branch:gitSource.branch,backend,envVars:mergedEnv,isLocalMode,targetSubdir:options?.targetSubdir,configureCredentials:options?.configureCredentials})}case"localPath":{let localSource=workspaceSource.source.value;return provisionLocalPath({path:localSource.path,isLocalMode,targetSubdir:options?.targetSubdir,backendRootDir:options?.targetSubdir?backend.rootDir:void 0})}default:return provisionEmpty(backend)}}}}});async function resolveSessionWorkspaceRoot(workspaceRootDir,workspaceEntries,sessionId){if(workspaceEntries.length>0)return workspaceRootDir;if(!sessionId)throw new Error("resolveSessionWorkspaceRoot: sessionId is required for a session with no workspace entries; an empty value would collapse every such session onto one shared directory.");let sessionRoot=(0,import_node_path25.join)(workspaceRootDir,"sessions",sessionId);return await(0,import_promises16.mkdir)(sessionRoot,{recursive:!0}),sessionRoot}var import_node_path25,import_promises16,init_session_root=__esm({"dist/shared/workspace/session-root.js"(){"use strict";import_node_path25=require("node:path"),import_promises16=require("node:fs/promises")}});async function provisionCursorWorkspace(config4,session,envVars,sessionId){let entries=session.spec?.workspaceEntries??[],platformDir=await ensurePlatformDir(sessionId);if(entries.length===0){let sessionRoot=await resolveSessionWorkspaceRoot(config4.workspaceRootDir,entries,sessionId);return{workspaceDirs:[sessionRoot],provisionResults:[],workspaceBackend:new LocalWorkspaceBackend(sessionRoot,platformDir)}}let backend=new LocalWorkspaceBackend(config4.workspaceRootDir,platformDir),results=await new WorkspaceProvisioner().provisionAll(entries.map(entry=>({name:entry.name,source:entry.source})),backend,envVars,config4.mode==="local",config4.mode!=="local"),dirs=results.map(result=>result.rootDir).filter(dir=>!!dir);return{workspaceDirs:dirs.length>0?dirs:[config4.workspaceRootDir],provisionResults:results,workspaceBackend:backend}}var init_workspace_provision=__esm({"dist/activities/execute-cursor/workspace-provision.js"(){"use strict";init_provisioner();init_local_backend();init_platform_dir();init_session_root()}});function gitCommitAsAgent(commitMsg){return`git ${AGENT_GIT_IDENTITY_FLAGS} commit -m "${commitMsg}"`}var AGENT_GIT_AUTHOR_NAME,AGENT_GIT_AUTHOR_EMAIL,AGENT_GIT_IDENTITY_FLAGS,init_git_identity=__esm({"dist/shared/workspace/git-identity.js"(){"use strict";AGENT_GIT_AUTHOR_NAME="Stigmer Agent",AGENT_GIT_AUTHOR_EMAIL="noreply@stigmer.ai",AGENT_GIT_IDENTITY_FLAGS=`-c user.name='${AGENT_GIT_AUTHOR_NAME}' -c user.email='${AGENT_GIT_AUTHOR_EMAIL}'`}});function parseGithubRepo(repoUrl){let httpsMatch=repoUrl.match(/github\.com[/:]([^/]+)\/([^/.]+?)(?:\.git)?$/);if(httpsMatch)return{owner:httpsMatch[1],repo:httpsMatch[2]};throw new Error(`Cannot parse GitHub owner/repo from URL: ${repoUrl}`)}var WRITE_BACK_ENABLED_MODES,GITHUB_API,WriteBackCoordinator,init_writeback_coordinator=__esm({"dist/shared/workspace/writeback-coordinator.js"(){"use strict";init_esm4();init_writeback_pb();init_writeback_pb();init_enum_pb4();init_types6();init_git_identity();WRITE_BACK_ENABLED_MODES=new Set([GitWriteBackMode.GIT_WRITE_BACK_MODE_UNSPECIFIED,GitWriteBackMode.GIT_WRITE_BACK_BRANCH_AND_PR]),GITHUB_API="https://api.github.com",WriteBackCoordinator=class{statusWriter;executionId;workspaceBackend;branchName;githubToken;eligible=new Map;state=new Map;locks=new Map;constructor(opts){this.statusWriter=opts.statusWriter,this.executionId=opts.executionId,this.workspaceBackend=opts.workspaceBackend,this.githubToken=opts.githubToken,this.branchName=`stigmer/${opts.sessionId}`,this.initEligibleEntries(opts.provisionResults,opts.workspaceEntries)}get hasEligibleEntries(){return this.eligible.size>0}async onFileModified(path6){try{let entryName=this.resolveEntry(path6);if(!entryName)return;await this.withLock(entryName,()=>this.writeBackEntry(entryName))}catch(err){console.warn(`[WriteBack] execution=${this.executionId} \u2014 onFileModified error for '${path6}': ${err}`)}}async finalize(){for(let entryName of this.eligible.keys())try{await this.withLock(entryName,()=>this.writeBackEntry(entryName))}catch(err){console.warn(`[WriteBack] execution=${this.executionId} entry=${entryName} \u2014 finalize error: ${err}`)}}initEligibleEntries(provisionResults,workspaceEntries){let modeMap=new Map;for(let entry of workspaceEntries){let source=entry.source;source?.source.case==="gitRepo"&&modeMap.set(entry.name,source.source.value.writeBackMode)}for(let pr of provisionResults){if(pr.sourceType!==SourceType.GIT_REPO||!pr.gitMetadata||!pr.gitMetadata.gitCredentialsConfigured)continue;let mode=modeMap.get(pr.entryName)??GitWriteBackMode.GIT_WRITE_BACK_MODE_UNSPECIFIED;WRITE_BACK_ENABLED_MODES.has(mode)&&(this.eligible.set(pr.entryName,{provisionResult:pr,baseBranch:pr.gitMetadata.branch,rootDir:pr.rootDir,entryName:pr.entryName}),this.state.set(pr.entryName,{branchReady:!1,prCreated:!1,prUrl:"",prNumber:0,commitCount:0,lastCommitSha:"",githubOwner:"",githubRepo:""}))}this.eligible.size>0&&console.log(`[WriteBack] execution=${this.executionId} \u2014 coordinator initialized with ${this.eligible.size} eligible workspace(s): ${[...this.eligible.keys()].join(", ")}`)}resolveEntry(path6){if(this.eligible.size===0)return null;if(this.eligible.size===1)return this.eligible.keys().next().value;let normalized=path6.replace(/^\/+/,"");for(let entryName of this.eligible.keys())if(normalized.startsWith(entryName+"/")||normalized===entryName)return entryName;return null}async writeBackEntry(entryName){let entry=this.eligible.get(entryName),entryState=this.state.get(entryName),rootDir=entry.rootDir,exec2=async cmd=>this.workspaceBackend.execute(`cd ${rootDir} && ${cmd}`);try{if(!await this.hasChanges(exec2))return;entryState.branchReady||await this.ensureBranch(entryName,entryState,exec2),await this.commitAndPush(entryName,entryState,exec2)}catch(err){console.warn(`[WriteBack] execution=${this.executionId} entry=${entryName} \u2014 commit/push error: ${err}`);let wb=create(WorkspaceWriteBackSchema,{workspaceEntryName:entryName,baseBranch:entry.baseBranch,branchName:entryState.branchReady?this.branchName:"",phase:WorkspaceWriteBackPhase.WORKSPACE_WRITE_BACK_FAILED,error:String(err)});entryState.prCreated&&(wb.pullRequestUrl=entryState.prUrl,wb.pullRequestNumber=entryState.prNumber),this.statusWriter.addWriteBack(wb);return}let prError="";if(!entryState.prCreated)try{await this.ensurePr(entryName,entryState,entry)}catch(err){console.warn(`[WriteBack] execution=${this.executionId} entry=${entryName} \u2014 PR error (branch is pushed): ${err}`),prError=String(err)}await this.updateStatus(entryName,entryState,entry,exec2,prError)}async hasChanges(exec2){let diff=await exec2("git diff --stat").catch(()=>""),staged=await exec2("git diff --cached --stat").catch(()=>"");return diff.trim()||staged.trim()?!0:(await exec2("git ls-files --others --exclude-standard").catch(()=>"")).trim().length>0}async ensureBranch(entryName,entryState,exec2){if((await exec2("git branch --show-current").catch(()=>"")).trim()===this.branchName){entryState.branchReady=!0;return}await exec2(`git rev-parse --verify --quiet refs/heads/${this.branchName}`).then(out=>out.trim(),()=>"")?await exec2(`git checkout ${this.branchName}`):(await exec2(`git ls-remote --heads origin ${this.branchName}`).catch(()=>"")).trim()?(await exec2(`git fetch origin ${this.branchName}`),await exec2(`git checkout -b ${this.branchName} origin/${this.branchName}`)):await exec2(`git checkout -b ${this.branchName}`),entryState.branchReady=!0,console.log(`[WriteBack] execution=${this.executionId} entry=${entryName} \u2014 on branch ${this.branchName}`)}async commitAndPush(entryName,entryState,exec2){await exec2("git add -A"),await exec2(gitCommitAsAgent(`agent changes (${this.executionId})`)),entryState.commitCount++;let shaOutput=await exec2("git rev-parse HEAD");entryState.lastCommitSha=shaOutput.trim(),await exec2(`git push -u origin ${this.branchName}`),console.log(`[WriteBack] execution=${this.executionId} entry=${entryName} \u2014 commit pushed to ${this.branchName} (sha=${entryState.lastCommitSha.slice(0,12)})`)}async ensurePr(entryName,entryState,entry){let meta3=entry.provisionResult.gitMetadata;if(!entryState.githubOwner){let{owner,repo}=parseGithubRepo(meta3.repoUrl);entryState.githubOwner=owner,entryState.githubRepo=repo}if(!this.githubToken)throw new Error(`No GitHub token available to open a pull request. The branch '${this.branchName}' was pushed \u2014 open the PR manually, or configure GITHUB_TOKEN for the session so PRs are created automatically.`);let existing=await this.findOpenPr(entryState);if(existing){entryState.prCreated=!0,entryState.prUrl=existing.url,entryState.prNumber=existing.number,console.log(`[WriteBack] execution=${this.executionId} entry=${entryName} \u2014 adopted open PR #${existing.number}: ${existing.url}`);return}let shortSessionId=this.branchName.replace(/^stigmer\//,""),prBody=`Automated pull request from a Stigmer agent session.
|
|
552
|
+
|
|
553
|
+
**Session:** \`${shortSessionId}\`
|
|
554
|
+
**Workspace:** \`${entryName}\`
|
|
555
|
+
|
|
556
|
+
Each approved turn appends its commits to this pull request.
|
|
557
|
+
`,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}
|
|
552
558
|
|
|
553
559
|
Troubleshooting URL: https://docs.langchain.com/oss/javascript/langchain/errors/${lc_error_code}/
|
|
554
560
|
`,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(`
|
|
@@ -2284,11 +2290,7 @@ Your task: {description}`,BUILTIN_DESCRIPTIONS=new Map([["explore","Read-only co
|
|
|
2284
2290
|
`}});function jsonSchemaToZod(schema2){let type3=schema2.type;if(type3==="object"){let properties=schema2.properties,required3=new Set(schema2.required??[]);if(!properties)return external_exports.object({}).passthrough();let shape={};for(let[key,propSchema]of Object.entries(properties)){let fieldType=jsonSchemaToZod(propSchema);required3.has(key)||(fieldType=fieldType.nullable()),shape[key]=fieldType}return external_exports.object(shape).passthrough()}if(type3==="array"){let items=schema2.items;return external_exports.array(items?jsonSchemaToZod(items):external_exports.unknown())}if(type3==="string"){let enumValues=schema2.enum;return enumValues&&enumValues.length>0?external_exports.enum(enumValues):external_exports.string()}return type3==="number"||type3==="integer"?external_exports.number():type3==="boolean"?external_exports.boolean():type3==="null"?external_exports.null():external_exports.unknown()}var init_json_schema_to_zod=__esm({"dist/shared/json-schema-to-zod.js"(){"use strict";init_zod4()}});async function performSetup(deps){let{config:config4,client:client2,executionId,threadId}=deps,mcpConnection=null;try{await reportSetupProgress(client2,executionId,"Fetching execution\u2026");let execution=await client2.getExecution(executionId);console.log(`[setup] Execution fetched: agent_id=${execution.spec?.agentId}`),await reportSetupProgress(client2,executionId,"Resolving agent\u2026");let sessionId=execution.spec.sessionId;if(!sessionId)throw new Error(`Session ID is required for execution ${executionId}. Execution must have a valid session_id.`);let session=await client2.getSession(sessionId),agentInstance=await client2.getAgentInstance(session.spec.agentInstanceId),agent=await client2.getAgent(agentInstance.spec.agentId),instructions=agent.spec.instructions||"You are a helpful AI assistant.";console.log(`[setup] Chain resolved: session=${sessionId}, agent=${agent.metadata.name}`);let modelName=execution.spec.executionConfig?.modelName||await getDefaultModel(),checkpointer=await createCheckpointer({type:config4.checkpointerType,proxyEndpoint:config4.checkpointerProxyEndpoint??void 0,authToken:config4.stigmerToken??void 0});await reportSetupProgress(client2,executionId,"Resolving environment\u2026");let envResult=await resolveEnvironment(client2,executionId),artifactStorage=await resolveUsableArtifactStorage(loadArtifactStorageConfig(config4),{executionId});await reportSetupProgress(client2,executionId,"Initializing workspace\u2026");let{workspaceBackend,provisionResults}=await provisionWorkspace(config4,session,envResult.mergedEnvVars,sessionId),gitWorkspace=await isGitWorkTree(workspaceBackend.rootDir),captureMode=deriveCaptureMode(workspaceBackend.rootDir,gitWorkspace,!!artifactStorage),isCapturablePath=gitWorkspace?rawPath=>isPathCapturable(workspaceBackend.rootDir,resolveWorkspacePath(rawPath,workspaceBackend.rootDir,!0).path):_rawPath=>Promise.resolve(!1),casObserver=new CasCaptureObserver({rootDir:workspaceBackend.rootDir,isIgnored:gitWorkspace?async relPath=>!await isPathCapturable(workspaceBackend.rootDir,relPath):async()=>!0}),mcpServerUsages=[...agent.spec.mcpServerUsages||[],...session.spec.mcpServerUsages||[]],resolvedMcpServers=null;if(mcpServerUsages.length>0){await reportSetupProgress(client2,executionId,"Connecting tools\u2026"),resolvedMcpServers=await resolveMcpServers2(client2,mcpServerUsages,envResult.mergedEnvVars);let sessionOrg=session.metadata?.org??"";resolvedMcpServers={resolvedServers:await backfillMcpServersIfNeeded(client2,resolvedMcpServers.resolvedServers,mcpServerUsages,envResult.mergedEnvVars,sessionOrg,void 0,envResult.secretKeys)},mcpConnection=await connectMcpServers(resolvedMcpServers.resolvedServers,{isCloudMode:config4.cloudModeEnabled})}let skillRefs=mergeSkillRefs2(agent.spec.skillRefs||[],session.spec.skillRefs||[]),skillsPromptSection="";if(skillRefs.length>0){await reportSetupProgress(client2,executionId,"Loading skills\u2026");let skills=await fetchSkillsByRefs(client2,skillRefs);if(skills.length>0){let artifacts=await fetchSkillArtifacts(client2,skills),{paths:skillPaths}=await writeSkills(skills,workspaceBackend,artifacts),userMessage2=execution.spec.message||"",skillNames=skills.map(s=>s.spec?.name||s.metadata?.slug||"unknown"),skillDescriptions=skills.map(s=>s.spec?.description||"");if(skills.length>=8){let filterResult=filterSkills(userMessage2,skillNames,skillDescriptions);if(filterResult.excludedNames.length>0){let includedSkills=filterResult.includedIndices.map(i2=>skills[i2]);console.log(`[setup] Skill relevance filter: ${includedSkills.length} included, ${filterResult.excludedNames.length} excluded: ${filterResult.excludedNames.join(", ")}`),skillsPromptSection=generatePromptSection(includedSkills,skillPaths)+generateAlsoAvailableSection(filterResult.excludedNames)}else skillsPromptSection=generatePromptSection(skills,skillPaths)}else skillsPromptSection=generatePromptSection(skills,skillPaths);console.log(`[setup] Skills loaded: ${skills.length} total, prompt section ${skillsPromptSection.length} chars`)}}let attachments=execution.spec.attachments||[],injectedFiles=await injectAttachments({backend:workspaceBackend,attachments,storage:artifactStorage,isLocalMode:config4.mode==="local"}),systemPrompt=buildEnhancedSystemPrompt({instructions,provisionResults,containerRoot:workspaceBackend.rootDir,skillsPromptSection,workspaceFileRefs:execution.spec.workspaceFileRefs||[],workspaceRoot:workspaceBackend.rootDir,injectedFiles,interactionMode:execution.spec.executionConfig?.interactionMode,buildFromPlan:execution.spec.executionConfig?.buildFromPlan}),requestTimeoutMs=parseInt(process.env.STIGMER_LLM_REQUEST_TIMEOUT_MS??"0")||void 0,{model}=await buildChatModel({modelName,proxyEndpoint:config4.proxyEndpoint??void 0,stigmerToken:config4.stigmerToken??void 0,headerScope:{executionId},timeoutMs:requestTimeoutMs});await ensureLoaded2();let pricing=getModelPricing(modelName),execConfig=execution.spec.executionConfig,toolServerMap=new Map;if(mcpConnection)for(let[serverName,serverTools]of Object.entries(mcpConnection.serverToolMap))for(let t of serverTools)toolServerMap.set(t.name,serverName);let leases=deriveActiveLeases(execution),globalBypass=leases.global,agentOverrides=agent.spec.mcpServerUsages?.flatMap(u=>u.toolApprovalOverrides??[])??[],approvalPolicies=mergeApprovalPolicies(resolvedMcpServers?.resolvedServers??[],agentOverrides,leases),approvalGateConfig=globalBypass?null:{policies:approvalPolicies,leasedCategories:leases.categories,toolServerMap,fingerprintKey:deriveExecutionFingerprintKey(getRunnerHitlMasterSecret(),executionId),executionId,fileCaptureMode:captureMode,isCapturablePath,captureIgnored:captureMode&&!!artifactStorage,recordBlockedSecret:rawPath=>casObserver.recordBlockedSecret(rawPath)},maxCostUsd=execConfig?.maxCostUsd??0,{middleware,gracefulStop,costCap:costCapMiddleware}=buildMiddlewareStack({loopDetection:{historySize:20,consecutiveThreshold:7,totalThreshold:20},executionBudget:{recursionLimit:execConfig?.maxToolRounds?execConfig.maxToolRounds*6:6e3,warningPct:80},toolTruncation:{maxChars:execConfig?.maxToolResultChars||3e4},costCap:maxCostUsd>0?{maxCostUsd,inputPricePerMillion:pricing.inputPricePerMillion,outputPricePerMillion:pricing.outputPricePerMillion,cacheReadPricePerMillion:pricing.cacheReadPricePerMillion,warningPct:80}:null,otelSpans:{toolServerMap},approvalGate:approvalGateConfig}),tools3=[...mcpConnection?.tools??[],createThinkTool()],subAgentProtos=agent.spec.subAgents||[],compiledSubagents;if(subAgentProtos.length>0||workspaceBackend.rootDir){await reportSetupProgress(client2,executionId,"Configuring sub-agents\u2026");let parentMcpServerToolMap=new Map;if(mcpConnection)for(let[serverName,serverTools]of Object.entries(mcpConnection.serverToolMap))parentMcpServerToolMap.set(serverName,serverTools);compiledSubagents=await transformAndCompileSubagents({subAgents:subAgentProtos,parentMcpTools:mcpConnection?.tools??[],parentMcpServerToolMap,parentMcpUsages:mcpServerUsages,skillClient:client2,workspaceBackend,approvalGate:approvalGateConfig,casObserver,parentModelName:modelName,parentHasNativeThinking:_modelHasNativeThinking(modelName),costCap:costCapMiddleware??void 0,modelFactory:async m=>(await buildChatModel({modelName:m,proxyEndpoint:config4.proxyEndpoint??void 0,stigmerToken:config4.stigmerToken??void 0,headerScope:{executionId}})).model})}await reportSetupProgress(client2,executionId,"Creating agent\u2026");let outputSchema=execution.spec.executionConfig?.structuredOutputSchema,responseFormat;outputSchema&&(responseFormat=jsonSchemaToZod(outputSchema));let isPlanMode=execConfig?.interactionMode===InteractionMode.PLAN,planModePermissions=[{operations:["write"],paths:["/**"],mode:"deny"}],fileBackend=new CasCaptureFilesystemBackend({rootDir:workspaceBackend.rootDir},{observer:casObserver}),agentGraph=await createDeepAgent({model,checkpointer,backend:fileBackend,systemPrompt,tools:tools3,middleware,subagents:compiledSubagents??void 0,...responseFormat?{responseFormat}:{},...isPlanMode?{permissions:planModePermissions}:{}}),userMessage=execution.spec.message;outputSchema&&(userMessage+=`
|
|
2285
2291
|
|
|
2286
2292
|
---
|
|
2287
|
-
IMPORTANT: When your analysis is complete, provide your findings as structured output matching the required schema. The system will capture your structured response automatically.`);let langgraphInput={messages:[{role:"user",content:userMessage}]},langgraphConfig={configurable:{thread_id:threadId}},streamVersion=process.env.LANGGRAPH_STREAM_EVENTS_VERSION==="v2"?"v2":"v3";return console.log(`[setup] Complete: model=${modelName}, tools=${tools3.length}, middleware=${middleware.length}, thread_id=${threadId}, streamVersion=${streamVersion}`),{agentGraph,langgraphConfig,langgraphInput,execution,agent,session,workspaceBackend,mcpConnection,mergedEnvVars:envResult.mergedEnvVars,secretKeys:envResult.secretKeys,modelName,gracefulStop,artifactStorage,provisionResults,approvalPolicies,toolServerMap,leasedCategories:leases.categories,globalBypass,hasStructuredOutput:!!outputSchema,streamVersion,casObserver,captureMode,gitWorkspace}}catch(err){if(mcpConnection)try{await mcpConnection.client.close()}catch{}throw err}}async function provisionWorkspace(config4,session,mergedEnvVars,sessionId){let platformDir=await ensurePlatformDir(sessionId),workspaceEntries=session.spec.workspaceEntries||[];if(workspaceEntries.length===0){let sessionRoot=await resolveSessionWorkspaceRoot(config4.workspaceRootDir,workspaceEntries,sessionId);return{workspaceBackend:new LocalWorkspaceBackend(sessionRoot,platformDir),provisionResults:[]}}let workspaceBackend=new LocalWorkspaceBackend(config4.workspaceRootDir,platformDir),provisionResults=await new WorkspaceProvisioner().provisionAll(workspaceEntries.map(entry=>({name:entry.name,source:entry.source})),workspaceBackend,mergedEnvVars,config4.mode==="local",config4.mode!=="local");return provisionResults.length===1&&provisionResults[0].rootDir!==workspaceBackend.rootDir?{workspaceBackend:new LocalWorkspaceBackend(provisionResults[0].rootDir,platformDir),provisionResults}:{workspaceBackend,provisionResults}}function _modelHasNativeThinking(modelId){let lower=modelId.toLowerCase();return lower.includes("haiku")||lower.includes("gpt-4o-mini")?!1:!!(lower.includes("claude")&&(lower.includes("sonnet")||lower.includes("opus"))||lower.includes("o1")||lower.includes("o3")||lower.includes("o4"))}var init_setup=__esm({"dist/activities/execute-deep-agent/setup.js"(){"use strict";init_dist8();init_enum_pb();init_factory();init_mcp_manager();init_mcp_resolver2();init_connect_backfill();init_provisioner();init_local_backend();init_cas_capture_backend();init_cas_capture_observer();init_git_substrate();init_capture();init_file_change();init_platform_dir();init_session_root();init_status2();init_environment();init_prompt_builder2();init_middleware4();init_approval_fingerprint();init_fingerprint_secret();init_model_pricing2();init_model_registry();init_model_client();init_artifact_storage();init_approval_policy();init_skill_writer();init_skill_relevance();init_attachment_injector();init_subagent_transformer();init_json_schema_to_zod()}});var ExecutionState,init_execution_state=__esm({"dist/activities/execute-deep-agent/execution-state.js"(){"use strict";ExecutionState=class{proto;toolCalls=new Map;messagesByRun=new Map;currentAiMessage=new Map;lastLlmRunId=new Map;toolStartTimes=new Map;constructor(proto){this.proto=proto}resetEphemeralState(){this.messagesByRun.clear(),this.currentAiMessage.clear(),this.lastLlmRunId.clear(),this.toolStartTimes.clear()}rebuildToolCallIndex(){this.toolCalls.clear();for(let message of this.proto.messages)for(let tc of message.toolCalls)tc.id&&this.toolCalls.set(tc.id,tc)}}}});function toBigInt(value){return typeof value=="bigint"?value:typeof value=="number"&&Number.isFinite(value)?BigInt(Math.floor(value)):0n}function serializeToolContent(content){if(typeof content=="string")return content;if(Array.isArray(content))return JSON.stringify(content)}function extractToolResult(data){let output=data.output;if(typeof output=="string")return output;if(typeof output=="object"&&output!==null){let fromContent=serializeToolContent(output.content);if(fromContent!==void 0)return fromContent}try{return JSON.stringify(output??data)}catch{return"[serialization error]"}}function extractToolResultV3(output){if(typeof output=="string")return output;if(typeof output=="object"&&output!==null){let obj=output,kwargs=obj.kwargs;if(kwargs){let fromKwargs=serializeToolContent(kwargs.content);if(fromKwargs!==void 0)return fromKwargs}let fromContent=serializeToolContent(obj.content);if(fromContent!==void 0)return fromContent}try{return JSON.stringify(output)}catch{return"[serialization error]"}}function stampApprovalProvenance(tc,provider){if(!provider)return;let serverSlug=tc.mcpServerSlug||provider.toolServerMap.get(tc.name)||"",source=resolveApprovalProvenance(tc.name,serverSlug,provider.policies,provider.leasedCategories??NO_LEASED_CATEGORIES2,provider.globalBypass);tc.approvalPolicySource=toProtoPolicySource(source),source&&(tc.policyEngineVersion=POLICY_ENGINE_VERSION)}var UsageAccumulator2,NO_LEASED_CATEGORIES2,init_status_builder_shared=__esm({"dist/activities/execute-deep-agent/status-builder-shared.js"(){"use strict";init_esm4();init_usage_pb();init_status2();init_approval_policy();init_args_preview();UsageAccumulator2=class{inputTokens=0n;outputTokens=0n;cacheReadTokens=0n;cacheWriteTokens=0n;turnCount=0;lastObservedAt="";accumulate(meta3){this.inputTokens+=toBigInt(meta3.input_tokens),this.outputTokens+=toBigInt(meta3.output_tokens),this.cacheReadTokens+=toBigInt(meta3.cache_read_input_tokens),this.cacheWriteTokens+=toBigInt(meta3.cache_creation_input_tokens),this.turnCount++,this.lastObservedAt=utcTimestamp()}snapshot(){return{inputTokens:this.inputTokens,outputTokens:this.outputTokens,cacheReadTokens:this.cacheReadTokens,cacheWriteTokens:this.cacheWriteTokens,totalTokens:this.inputTokens+this.outputTokens+this.cacheReadTokens+this.cacheWriteTokens,turnCount:this.turnCount,observedAt:this.lastObservedAt}}toProto(){return create(StreamingUsageSummarySchema,this.snapshot())}};NO_LEASED_CATEGORIES2=new Set}});var StatusBuilder,init_status_builder=__esm({"dist/activities/execute-deep-agent/status-builder.js"(){"use strict";init_esm4();init_message_pb();init_enum_pb();init_approval_policy();init_tool_kind();init_todos();init_execution_state();init_status2();init_status_builder_shared();StatusBuilder=class{executionId;state;_forceNextUpdate=!1;approvalProvider=null;usageAccumulator;handlers;constructor(executionId,initialStatus){this.executionId=executionId,this.state=new ExecutionState(initialStatus),initialStatus.messages.length>0&&this.state.rebuildToolCallIndex(),initialStatus.phase=ExecutionPhase.EXECUTION_IN_PROGRESS,initialStatus.startedAt||(initialStatus.startedAt=utcTimestamp()),this.usageAccumulator=new UsageAccumulator2,this.handlers=new Map([["on_chat_model_stream",this.handleChatModelStream.bind(this)],["on_chat_model_end",this.handleChatModelEnd.bind(this)],["on_tool_start",this.handleToolStart.bind(this)],["on_tool_end",this.handleToolEnd.bind(this)]])}setApprovalProvider(provider){this.approvalProvider=provider}get currentStatus(){return this.state.proto}get forceNextUpdate(){return this._forceNextUpdate}clearForceFlag(){this._forceNextUpdate=!1}processEvent(event){let namespace=this.extractNamespace(event),handler=this.handlers.get(event.event);if(handler)try{handler(event,namespace)}catch(err){console.error(`[StatusBuilder] Event handler error: execution=${this.executionId} event=${event.event} run_id=${event.run_id}: ${err}`)}}addArtifact(artifact){let artifacts=this.state.proto.artifacts,idx=artifacts.findIndex(a=>a.sandboxPath===artifact.sandboxPath);if(idx>=0){artifacts[idx].contentHash!==artifact.contentHash&&(artifacts[idx]=artifact,this._forceNextUpdate=!0);return}artifacts.push(artifact),this._forceNextUpdate=!0}addWriteBack(wb){let backs=this.state.proto.workspaceWriteBacks,idx=backs.findIndex(b=>b.workspaceEntryName===wb.workspaceEntryName);idx>=0?backs[idx]=wb:backs.push(wb),this._forceNextUpdate=!0}handleChatModelStream(event,namespace){let chunk=event.data?.chunk;if(!chunk)return;let content=chunk.content;if(Array.isArray(content)){for(let block of content)if(typeof block=="object"&&block!==null){let b=block;b.type==="thinking"&&typeof b.thinking=="string"?this.appendThinkingContent(event.run_id,namespace,b.thinking):b.type==="text"&&typeof b.text=="string"&&this.appendTextContent(event.run_id,namespace,b.text)}}else typeof content=="string"&&content.length>0&&this.appendTextContent(event.run_id,namespace,content)}handleChatModelEnd(event,namespace){let output=event.data?.output,msg=this.state.messagesByRun.get(event.run_id);msg&&(msg.isStreaming=!1);let usageMeta=output?.usage_metadata??event.data?.usage_metadata;usageMeta&&(this.usageAccumulator.accumulate(usageMeta),this.syncUsageToProto())}handleToolStart(event,namespace){let toolName=event.name??"unknown_tool",seeded=this.findResumableSeededToolCall(toolName);if(seeded){seeded.status=ToolCallStatus.TOOL_CALL_RUNNING,this.state.toolCalls.set(event.run_id,seeded),this.state.toolStartTimes.set(event.run_id,performance.now()),this._forceNextUpdate=!0;return}let parentMsg=this.state.currentAiMessage.get(namespace)??this.ensureAiMessageForToolCall(event.run_id,namespace);if(!parentMsg)return;let rawArgs=event.data?.input,args=rawArgs??{},approvalReq=this.checkApprovalRequirement(toolName,args),tc=create(ToolCallSchema,{id:event.run_id,name:toolName,status:approvalReq.requiresApproval?ToolCallStatus.TOOL_CALL_WAITING_APPROVAL:ToolCallStatus.TOOL_CALL_RUNNING,startedAt:utcTimestamp()});if(rawArgs&&(tc.args=rawArgs),approvalReq.serverSlug&&(tc.mcpServerSlug=approvalReq.serverSlug),tc.toolKind=classifyTool(tc.name,tc.mcpServerSlug),stampApprovalProvenance(tc,this.approvalProvider),approvalReq.requiresApproval){tc.requiresApproval=!0,tc.approvalMessage=approvalReq.message,tc.approvalRequestedAt=utcTimestamp();let argsPreview=sanitizeArgsPreview(args);argsPreview&&(tc.argsPreview=argsPreview),this.state.proto.phase=ExecutionPhase.EXECUTION_WAITING_FOR_APPROVAL}parentMsg.toolCalls.push(tc),this.state.toolCalls.set(event.run_id,tc),this.state.toolStartTimes.set(event.run_id,performance.now()),this._forceNextUpdate=!0}findResumableSeededToolCall(toolName){for(let tc of this.state.toolCalls.values())if(tc.name===toolName&&tc.status===ToolCallStatus.TOOL_CALL_WAITING_APPROVAL)return tc}checkApprovalRequirement(toolName,args){if(!this.approvalProvider)return{requiresApproval:!1,message:"",serverSlug:""};let serverSlug=this.approvalProvider.toolServerMap.get(toolName)??"";if(this.approvalProvider.globalBypass)return{requiresApproval:!1,message:"",serverSlug};if(serverSlug){let key=`${serverSlug}/${toolName}`,policy=this.approvalProvider.policies.get(key);return policy?.requiresApproval?{requiresApproval:!0,message:resolveApprovalMessage(policy.approvalMessage,toolName,args),serverSlug}:{requiresApproval:!1,message:"",serverSlug}}return{requiresApproval:!1,message:"",serverSlug:""}}handleToolEnd(event,_namespace){let tc=this.state.toolCalls.get(event.run_id);if(!tc)return;let errorMsg=event.data?.output?.error;errorMsg?(tc.status=ToolCallStatus.TOOL_CALL_FAILED,tc.error=errorMsg):(tc.status=ToolCallStatus.TOOL_CALL_COMPLETED,tc.result=extractToolResult(event.data),tc.toolKind===ToolKind.TODO&&applyTodoUpdate(this.state.proto.todos,tc.args?.todos,{merge:!1})),tc.completedAt=utcTimestamp(),tc.isStreaming=!1,this.state.toolStartTimes.delete(event.run_id),this._forceNextUpdate=!0}appendTextContent(runId,namespace,text){let msg=this.ensureAiMessage(runId,namespace,MessageType.MESSAGE_AI);msg.content+=text,msg.isStreaming=!0}appendThinkingContent(runId,namespace,text){let thinkingKey=`thinking:${namespace}`,existingMsg=this.state.messagesByRun.get(thinkingKey);if(existingMsg&&existingMsg.type===MessageType.MESSAGE_THINKING){existingMsg.content+=text,existingMsg.isStreaming=!0;return}let msg=create(AgentMessageSchema,{type:MessageType.MESSAGE_THINKING,content:text,timestamp:utcTimestamp(),isStreaming:!0});this.state.proto.messages.push(msg),this.state.messagesByRun.set(thinkingKey,msg)}ensureAiMessage(runId,namespace,type3){let existingByRun=this.state.messagesByRun.get(runId);if(existingByRun)return existingByRun;let lastRunId=this.state.lastLlmRunId.get(namespace);if(lastRunId&&lastRunId!==runId){let existingMsg=this.state.currentAiMessage.get(namespace);existingMsg&&(existingMsg.isStreaming=!1)}let msg=create(AgentMessageSchema,{type:type3,content:"",timestamp:utcTimestamp(),isStreaming:!0});return this.state.proto.messages.push(msg),this.state.messagesByRun.set(runId,msg),this.state.currentAiMessage.set(namespace,msg),this.state.lastLlmRunId.set(namespace,runId),msg}ensureAiMessageForToolCall(_toolRunId,namespace){let lastRunId=this.state.lastLlmRunId.get(namespace);if(lastRunId){let existing=this.state.messagesByRun.get(lastRunId);if(existing)return this.state.currentAiMessage.set(namespace,existing),existing}let msg=create(AgentMessageSchema,{type:MessageType.MESSAGE_AI,content:"",timestamp:utcTimestamp(),isStreaming:!1});return this.state.proto.messages.push(msg),this.state.currentAiMessage.set(namespace,msg),msg}extractNamespace(event){let meta3=event.metadata;if(!meta3)return"";let ns3=meta3.langgraph_checkpoint_ns??meta3.checkpoint_ns??"";return typeof ns3=="string"?ns3:""}syncUsageToProto(){this.state.proto.streamingUsage=this.usageAccumulator.toProto()}}}});function handlePause(writer2,eventsProcessed,pendingPublishPromises,pendingWritebackPromises){let status=writer2.currentStatus;return status.phase=ExecutionPhase.EXECUTION_PAUSED,status.messages.push(create(AgentMessageSchema,{type:MessageType.MESSAGE_SYSTEM,content:"Execution paused by user. Use resume to continue from this checkpoint.",timestamp:utcTimestamp()})),{eventsProcessed,terminalStatus:slimStatus(status),pendingPublishPromises,pendingWritebackPromises}}function handleStop(writer2,eventsProcessed,pendingPublishPromises,pendingWritebackPromises){let status=writer2.currentStatus;return status.phase=ExecutionPhase.EXECUTION_COMPLETED,status.completedAt=utcTimestamp(),status.messages.push(create(AgentMessageSchema,{type:MessageType.MESSAGE_SYSTEM,content:"Execution stopped by the platform.",timestamp:utcTimestamp()})),{eventsProcessed,terminalStatus:slimStatus(status),pendingPublishPromises,pendingWritebackPromises}}function handleRecursionLimit(writer2,eventsProcessed,pendingPublishPromises,pendingWritebackPromises){let status=writer2.currentStatus;return status.phase=ExecutionPhase.EXECUTION_TERMINATED,status.completedAt=utcTimestamp(),status.error=`Agent reached the tool-call limit after processing ${eventsProcessed} events. Send another message to continue.`,status.messages.push(create(AgentMessageSchema,{type:MessageType.MESSAGE_SYSTEM,content:"The agent reached the tool-call limit for this message. Work completed so far has been saved. Send another message to continue where the agent left off.",timestamp:utcTimestamp()})),{eventsProcessed,terminalStatus:slimStatus(status),pendingPublishPromises,pendingWritebackPromises}}function isGraphRecursionError(err){return err instanceof Error?err.constructor.name==="GraphRecursionError"||err.message.includes("GraphRecursionError")||err.message.includes("Recursion limit"):!1}var init_streaming_terminal=__esm({"dist/activities/execute-deep-agent/streaming-terminal.js"(){"use strict";init_esm4();init_message_pb();init_enum_pb();init_status2()}});function createV2EventRecorder(executionId,recordDir){if(recordDir)return new FileV2EventRecorder(executionId,recordDir)}function safeClone2(obj){try{return JSON.parse(JSON.stringify(obj,bigintReplacer))}catch{return{_serializationError:!0,keys:Object.keys(obj)}}}function bigintReplacer(_key,value){return typeof value=="bigint"?value.toString():value}var import_promises22,import_node_path29,FileV2EventRecorder,init_event_recorder=__esm({"dist/activities/execute-deep-agent/event-recorder.js"(){"use strict";import_promises22=require("node:fs/promises"),import_node_path29=require("node:path");FileV2EventRecorder=class{executionId;outputDir;events=[];constructor(executionId,outputDir){this.executionId=executionId,this.outputDir=outputDir}record(event,seq2){this.events.push({seq:seq2,timestamp:new Date().toISOString(),event:event.event,name:event.name,run_id:event.run_id,data:safeClone2(event.data),metadata:event.metadata?safeClone2(event.metadata):void 0})}async flush(){if(this.events.length===0)return;await(0,import_promises22.mkdir)(this.outputDir,{recursive:!0});let filePath=(0,import_node_path29.join)(this.outputDir,`${this.executionId}.v2-events.json`),payload={executionId:this.executionId,recordedAt:new Date().toISOString(),eventCount:this.events.length,events:this.events};await(0,import_promises22.writeFile)(filePath,JSON.stringify(payload,bigintReplacer,2))}}}});function createV3EventRecorder(executionId,recordDir){if(recordDir)return new FileV3EventRecorder(executionId,recordDir)}function safeClone3(obj){try{return JSON.parse(JSON.stringify(obj,bigintReplacer2))}catch{return obj&&typeof obj=="object"?{_serializationError:!0,keys:Object.keys(obj)}:{_serializationError:!0}}}function bigintReplacer2(_key,value){return typeof value=="bigint"?value.toString():value}var import_promises23,import_node_path30,FileV3EventRecorder,init_v3_event_recorder=__esm({"dist/activities/execute-deep-agent/v3-event-recorder.js"(){"use strict";import_promises23=require("node:fs/promises"),import_node_path30=require("node:path");FileV3EventRecorder=class{executionId;outputDir;events=[];constructor(executionId,outputDir){this.executionId=executionId,this.outputDir=outputDir}record(event,seq2){this.events.push({seq:seq2,capturedAt:new Date().toISOString(),type:event.type,method:event.method,namespace:event.params.namespace,timestamp:event.params.timestamp,node:event.params.node,data:safeClone3(event.params.data)})}async flush(){if(this.events.length===0)return;await(0,import_promises23.mkdir)(this.outputDir,{recursive:!0});let filePath=(0,import_node_path30.join)(this.outputDir,`${this.executionId}.v3-events.json`),payload={executionId:this.executionId,recordedAt:new Date().toISOString(),eventCount:this.events.length,events:this.events};await(0,import_promises23.writeFile)(filePath,JSON.stringify(payload,bigintReplacer2,2))}}}});function formatNamespace(ns3){return ns3.length===0?"":ns3.join("|")}function namespaceDepth(namespace){if(!namespace)return 0;let count=1;for(let i2=0;i2<namespace.length;i2++)namespace[i2]==="|"&&count++;return count}var init_v3_events=__esm({"dist/activities/execute-deep-agent/v3-events.js"(){"use strict"}});function normalize3(event){switch(event.method){case"messages":return normalizeMessage(event);case"tools":return normalizeTool(event);case"lifecycle":return normalizeLifecycle(event);default:return[]}}function normalizeMessage(event){let data=event.params.data;if(!data)return[];let eventType=readEventType(data),base={seq:event.seq,namespace:formatNamespace(event.params.namespace),node:event.params.node},runId=data.run_id??"";switch(eventType){case"message-start":return[{kind:"message_start",...base,runId,messageId:data.id}];case"content-block-delta":return normalizeContentBlockDelta(event,data,base,runId);case"message-finish":return[{kind:"message_finish",...base,runId,usage:normalizeUsagePayload(data.usage),reason:data.reason}];case"usage":return[{kind:"usage",...base,runId,usage:normalizeUsagePayload(data.usage)}];case"provider":return[{kind:"provider",...base,provider:data.provider??"",model:extractModel(data)}];case"content-block-start":case"content-block-finish":return[];default:return logUnknown("messages",eventType),[]}}function normalizeContentBlockDelta(event,data,base,runId){let delta=data.delta;if(!delta)return[];let deltaType=delta.type;if(deltaType==="text-delta"){let text=delta.text??"";return text?[{kind:"text_delta",...base,runId,text}]:[]}if(deltaType==="reasoning-delta"){let text=delta.reasoning??"";return text?[{kind:"reasoning_delta",...base,runId,text}]:[]}if(deltaType==="block-delta"){let fields=delta.fields;if(!fields)return[];if(fields.type==="tool_call_chunk"){let callId=fields.id??"",argsChunk=fields.args??"";return!argsChunk&&!callId?[]:[{kind:"tool_call_arg_delta",...base,callId,argsChunk}]}}return[]}function normalizeTool(event){let data=event.params.data;if(!data)return[];let eventType=readEventType(data),base={seq:event.seq,namespace:formatNamespace(event.params.namespace),node:event.params.node};switch(eventType){case"tool-started":{let callId=readToolCallId(data),name2=readToolName(data),input=parseToolInput(data.input);return[{kind:"tool_started",...base,callId,name:name2,input}]}case"tool-finished":{let callId=readToolCallId(data);return[{kind:"tool_finished",...base,callId,output:data.output}]}case"tool-error":{let callId=readToolCallId(data),message=data.message??data.error??"";return[{kind:"tool_error",...base,callId,message}]}case"tool-output-delta":{let callId=readToolCallId(data),delta=data.delta??"";return[{kind:"tool_output_delta",...base,callId,delta:String(delta)}]}default:return logUnknown("tools",eventType),[]}}function normalizeLifecycle(event){let data=event.params.data;return data?[{kind:"lifecycle",seq:event.seq,namespace:formatNamespace(event.params.namespace),node:event.params.node,event:readEventType(data),graphName:data.graph_name??data.graphName}]:[]}function readEventType(data){return data.event??data.type??""}function readToolCallId(data){return data.tool_call_id??data.toolCallId??""}function readToolName(data){return data.tool_name??data.toolName??data.name??"unknown_tool"}function parseToolInput(raw){if(raw==null)return{};if(typeof raw=="object"&&!Array.isArray(raw))return raw;if(typeof raw=="string")try{return JSON.parse(raw)}catch{return{}}return{}}function normalizeUsagePayload(raw){if(!raw)return;let details=raw.input_token_details;return{input_tokens:raw.input_tokens,output_tokens:raw.output_tokens,total_tokens:raw.total_tokens,input_token_details:details?{cache_creation:details.cache_creation,cache_read:details.cache_read}:void 0}}function extractModel(data){return data.payload?.model}function logUnknown(method,eventType){let key=`${method}:${eventType}`;loggedUnknowns.has(key)||(loggedUnknowns.add(key),console.debug(`[V3Normalizer] Unknown event: method=${method} event=${eventType}`))}var loggedUnknowns,init_v3_protocol_normalizer=__esm({"dist/activities/execute-deep-agent/v3-protocol-normalizer.js"(){"use strict";init_v3_events();loggedUnknowns=new Set}});function extractFirstSegment(namespace){let pipeIdx=namespace.indexOf("|");return pipeIdx===-1?namespace:namespace.slice(0,pipeIdx)}function stripFirstSegment(namespace){let pipeIdx=namespace.indexOf("|");return pipeIdx===-1?"":namespace.slice(pipeIdx+1)}function safeString2(obj,key){let val=obj[key];return typeof val=="string"?val:""}var SubAgentTracker,init_subagent_tracker=__esm({"dist/activities/execute-deep-agent/subagent-tracker.js"(){"use strict";init_esm4();init_subagent_pb();init_message_pb();init_enum_pb();init_status2();init_tool_kind();init_status_builder_shared();SubAgentTracker=class{executions=[];stateByCallId=new Map;stateByPrefix=new Map;onTaskToolStarted(callId,args,routingPrefix){if(this.stateByCallId.has(callId))return;let name2=safeString2(args,"subagent_type")||"task",description2=safeString2(args,"description")||"",proto=create(SubAgentExecutionSchema,{id:callId,name:name2,subject:description2,input:description2,status:SubAgentStatus.SUB_AGENT_IN_PROGRESS,startedAt:utcTimestamp()}),state={proto,callId,namespacePrefix:routingPrefix,messagesByRun:new Map,currentAiMessage:new Map,lastLlmRunId:new Map,toolCalls:new Map,toolArgBuffers:new Map};this.executions.push(proto),this.stateByCallId.set(callId,state),this.stateByPrefix.set(routingPrefix,state)}onTaskToolFinished(callId,output){let state=this.stateByCallId.get(callId);state&&(state.proto.status=SubAgentStatus.SUB_AGENT_COMPLETED,state.proto.completedAt=utcTimestamp(),state.proto.output=extractToolResultV3(output),this.finalizeStreamingMessages(state))}onTaskToolError(callId,errorMessage){let state=this.stateByCallId.get(callId);state&&(state.proto.status=SubAgentStatus.SUB_AGENT_FAILED,state.proto.completedAt=utcTimestamp(),state.proto.error=errorMessage,this.finalizeStreamingMessages(state))}cancelAll(){for(let state of this.stateByCallId.values())state.proto.status===SubAgentStatus.SUB_AGENT_IN_PROGRESS&&(state.proto.status=SubAgentStatus.SUB_AGENT_CANCELLED,state.proto.completedAt=utcTimestamp(),state.proto.error="Cancelled: parent execution was cancelled",this.finalizeStreamingMessages(state))}isSubAgentNamespace(namespace){if(!namespace||!namespace.includes("|"))return!1;let firstSegment=extractFirstSegment(namespace);return this.stateByPrefix.has(firstSegment)}routeEvent(event){let firstSegment=extractFirstSegment(event.namespace),state=this.stateByPrefix.get(firstSegment);if(!state)return;let localNs=this.resolveAgentNamespace(stripFirstSegment(event.namespace));switch(event.kind){case"message_start":this.handleMessageStart(state,event.runId,localNs);break;case"text_delta":this.handleTextDelta(state,event.runId,localNs,event.text);break;case"reasoning_delta":this.handleReasoningDelta(state,event.runId,localNs,event.text);break;case"tool_call_arg_delta":this.handleToolCallArgDelta(state,event.callId,event.argsChunk);break;case"message_finish":this.handleMessageFinish(state,event.runId,event.usage);break;case"tool_started":this.handleToolStarted(state,event.callId,event.name,event.input,localNs);break;case"tool_finished":this.handleToolFinished(state,event.callId,event.output);break;case"tool_error":this.handleToolError(state,event.callId,event.message);break;case"tool_output_delta":this.handleToolOutputDelta(state,event.callId,event.delta);break;case"usage":case"lifecycle":case"provider":break}}getExecutions(){return this.executions}hasExecutions(){return this.executions.length>0}handleMessageStart(state,runId,localNs){let lastRunId=state.lastLlmRunId.get(localNs);if(lastRunId&&lastRunId!==runId){let existingMsg=state.currentAiMessage.get(localNs);existingMsg&&(existingMsg.isStreaming=!1)}state.lastLlmRunId.set(localNs,runId)}handleTextDelta(state,runId,localNs,text){let msg=this.ensureAiMessage(state,runId,localNs,MessageType.MESSAGE_AI);msg.content+=text,msg.isStreaming=!0}handleReasoningDelta(state,runId,localNs,text){let thinkingKey=`thinking:${localNs}`,existing=state.messagesByRun.get(thinkingKey);if(existing&&existing.type===MessageType.MESSAGE_THINKING){existing.content+=text,existing.isStreaming=!0;return}let msg=create(AgentMessageSchema,{type:MessageType.MESSAGE_THINKING,content:text,timestamp:utcTimestamp(),isStreaming:!0});state.proto.messages.push(msg),state.messagesByRun.set(thinkingKey,msg)}handleMessageFinish(state,runId,usage){let msg=state.messagesByRun.get(runId);msg&&(msg.isStreaming=!1)}handleToolStarted(state,callId,name2,input,localNs){let agentNs=this.resolveAgentNamespace(localNs),parentMsg=state.currentAiMessage.get(agentNs)??this.ensureAiMessageForToolCall(state,agentNs);if(!parentMsg)return;let tc=create(ToolCallSchema,{id:callId,name:name2,status:ToolCallStatus.TOOL_CALL_RUNNING,startedAt:utcTimestamp(),toolKind:classifyTool(name2)});Object.keys(input).length>0&&(tc.args=input),parentMsg.toolCalls.push(tc),state.toolCalls.set(callId,tc)}handleToolFinished(state,callId,output){let tc=state.toolCalls.get(callId);tc&&(tc.status=ToolCallStatus.TOOL_CALL_COMPLETED,tc.result=extractToolResultV3(output),tc.completedAt=utcTimestamp(),tc.isStreaming=!1,state.toolArgBuffers.delete(callId))}handleToolError(state,callId,message){let tc=state.toolCalls.get(callId);tc&&(tc.status=ToolCallStatus.TOOL_CALL_FAILED,tc.error=message,tc.completedAt=utcTimestamp(),tc.isStreaming=!1,state.toolArgBuffers.delete(callId))}handleToolCallArgDelta(state,callId,argsChunk){let tc=state.toolCalls.get(callId);if(!tc)return;let buffer=(state.toolArgBuffers.get(callId)??"")+argsChunk;state.toolArgBuffers.set(callId,buffer);try{tc.args=JSON.parse(buffer)}catch{}}handleToolOutputDelta(state,callId,delta){let tc=state.toolCalls.get(callId);tc&&(tc.result=(tc.result??"")+delta)}ensureAiMessage(state,runId,localNs,type3){let existing=state.messagesByRun.get(runId);if(existing)return existing;let lastRunId=state.lastLlmRunId.get(localNs);if(lastRunId&&lastRunId!==runId){let prev=state.currentAiMessage.get(localNs);prev&&(prev.isStreaming=!1)}let msg=create(AgentMessageSchema,{type:type3,content:"",timestamp:utcTimestamp(),isStreaming:!0});return state.proto.messages.push(msg),state.messagesByRun.set(runId,msg),state.currentAiMessage.set(localNs,msg),state.lastLlmRunId.set(localNs,runId),msg}ensureAiMessageForToolCall(state,localNs){let lastRunId=state.lastLlmRunId.get(localNs);if(lastRunId){let existing=state.messagesByRun.get(lastRunId);if(existing)return state.currentAiMessage.set(localNs,existing),existing}let msg=create(AgentMessageSchema,{type:MessageType.MESSAGE_AI,content:"",timestamp:utcTimestamp(),isStreaming:!1});return state.proto.messages.push(msg),state.currentAiMessage.set(localNs,msg),msg}resolveAgentNamespace(ns3){return ns3?ns3.split("|").filter(p=>!p.startsWith("tools:")&&!p.startsWith("model_request")).join("|"):""}finalizeStreamingMessages(state){for(let msg of state.currentAiMessage.values())msg.isStreaming=!1}}}});var V3StatusBuilder,init_v3_status_builder=__esm({"dist/activities/execute-deep-agent/v3-status-builder.js"(){"use strict";init_esm4();init_message_pb();init_enum_pb();init_approval_policy();init_tool_kind();init_todos();init_execution_state();init_status2();init_v3_events();init_status_builder_shared();init_subagent_tracker();V3StatusBuilder=class{executionId;state;_forceNextUpdate=!1;approvalProvider=null;usageAccumulator;subAgentTracker;toolArgBuffers=new Map;constructor(executionId,initialStatus){this.executionId=executionId,this.state=new ExecutionState(initialStatus),initialStatus.messages.length>0&&this.state.rebuildToolCallIndex(),initialStatus.phase=ExecutionPhase.EXECUTION_IN_PROGRESS,initialStatus.startedAt||(initialStatus.startedAt=utcTimestamp()),this.usageAccumulator=new UsageAccumulator2,this.subAgentTracker=new SubAgentTracker}setApprovalProvider(provider){this.approvalProvider=provider}get currentStatus(){return this.state.proto}get forceNextUpdate(){return this._forceNextUpdate}clearForceFlag(){this._forceNextUpdate=!1}processEvent(event){try{if(event.kind==="tool_started"&&event.name==="task"&&namespaceDepth(event.namespace)<=1){let routingPrefix=event.namespace||`tools:${event.callId}`;this.subAgentTracker.onTaskToolStarted(event.callId,event.input,routingPrefix),this.handleToolStarted(event.callId,event.name,event.input,event.namespace),this._forceNextUpdate=!0;return}if(event.kind==="tool_finished"&&this.isTrackedTaskTool(event.callId)){this.subAgentTracker.onTaskToolFinished(event.callId,event.output),this.handleToolFinished(event.callId,event.output),this._forceNextUpdate=!0;return}if(event.kind==="tool_error"&&this.isTrackedTaskTool(event.callId)){this.subAgentTracker.onTaskToolError(event.callId,event.message),this.handleToolError(event.callId,event.message),this._forceNextUpdate=!0;return}if(this.subAgentTracker.isSubAgentNamespace(event.namespace)){this.subAgentTracker.routeEvent(event);return}switch(event.kind){case"message_start":this.handleMessageStart(event.runId,event.namespace);break;case"text_delta":this.appendTextContent(event.runId,event.namespace,event.text);break;case"reasoning_delta":this.appendThinkingContent(event.runId,event.namespace,event.text);break;case"tool_call_arg_delta":this.handleToolCallArgDelta(event.callId,event.argsChunk);break;case"message_finish":this.handleMessageFinish(event.runId,event.namespace,event.usage);break;case"tool_started":this.handleToolStarted(event.callId,event.name,event.input,event.namespace);break;case"tool_finished":this.handleToolFinished(event.callId,event.output);break;case"tool_error":this.handleToolError(event.callId,event.message);break;case"tool_output_delta":this.handleToolOutputDelta(event.callId,event.delta);break;case"usage":case"lifecycle":case"provider":break}}catch(err){console.error(`[V3StatusBuilder] Event handler error: execution=${this.executionId} kind=${event.kind} seq=${event.seq}: ${err}`)}}addArtifact(artifact){let artifacts=this.state.proto.artifacts,idx=artifacts.findIndex(a=>a.sandboxPath===artifact.sandboxPath);if(idx>=0){artifacts[idx].contentHash!==artifact.contentHash&&(artifacts[idx]=artifact,this._forceNextUpdate=!0);return}artifacts.push(artifact),this._forceNextUpdate=!0}addWriteBack(wb){let backs=this.state.proto.workspaceWriteBacks,idx=backs.findIndex(b=>b.workspaceEntryName===wb.workspaceEntryName);idx>=0?backs[idx]=wb:backs.push(wb),this._forceNextUpdate=!0}handleMessageStart(runId,namespace){let lastRunId=this.state.lastLlmRunId.get(namespace);if(lastRunId&&lastRunId!==runId){let existingMsg=this.state.currentAiMessage.get(namespace);existingMsg&&(existingMsg.isStreaming=!1)}this.state.lastLlmRunId.set(namespace,runId)}handleMessageFinish(runId,_namespace,usage){let msg=this.state.messagesByRun.get(runId);msg&&(msg.isStreaming=!1),usage&&this.accumulateV3Usage(usage)}appendTextContent(runId,namespace,text){let msg=this.ensureAiMessage(runId,namespace,MessageType.MESSAGE_AI);msg.content+=text,msg.isStreaming=!0}appendThinkingContent(runId,namespace,text){let thinkingKey=`thinking:${namespace}`,existingMsg=this.state.messagesByRun.get(thinkingKey);if(existingMsg&&existingMsg.type===MessageType.MESSAGE_THINKING){existingMsg.content+=text,existingMsg.isStreaming=!0;return}let msg=create(AgentMessageSchema,{type:MessageType.MESSAGE_THINKING,content:text,timestamp:utcTimestamp(),isStreaming:!0});this.state.proto.messages.push(msg),this.state.messagesByRun.set(thinkingKey,msg)}handleToolStarted(callId,name2,input,namespace){let existing=this.state.toolCalls.get(callId);if(existing){existing.status===ToolCallStatus.TOOL_CALL_WAITING_APPROVAL&&(existing.status=ToolCallStatus.TOOL_CALL_RUNNING),Object.keys(input).length>0&&!existing.args&&(existing.args=input),this.state.toolStartTimes.set(callId,performance.now()),this._forceNextUpdate=!0;return}let agentNs=this.resolveAgentNamespace(namespace),parentMsg=this.state.currentAiMessage.get(agentNs)??this.ensureAiMessageForToolCall(agentNs);if(!parentMsg)return;let approvalReq=this.checkApprovalRequirement(name2,input),tc=create(ToolCallSchema,{id:callId,name:name2,status:approvalReq.requiresApproval?ToolCallStatus.TOOL_CALL_WAITING_APPROVAL:ToolCallStatus.TOOL_CALL_RUNNING,startedAt:utcTimestamp()});if(Object.keys(input).length>0&&(tc.args=input),approvalReq.serverSlug&&(tc.mcpServerSlug=approvalReq.serverSlug),tc.toolKind=classifyTool(tc.name,tc.mcpServerSlug),stampApprovalProvenance(tc,this.approvalProvider),approvalReq.requiresApproval){tc.requiresApproval=!0,tc.approvalMessage=approvalReq.message,tc.approvalRequestedAt=utcTimestamp();let argsPreview=sanitizeArgsPreview(input);argsPreview&&(tc.argsPreview=argsPreview),this.state.proto.phase=ExecutionPhase.EXECUTION_WAITING_FOR_APPROVAL}parentMsg.toolCalls.push(tc),this.state.toolCalls.set(callId,tc),this.state.toolStartTimes.set(callId,performance.now()),this._forceNextUpdate=!0}handleToolFinished(callId,output){let tc=this.state.toolCalls.get(callId);tc&&(tc.status=ToolCallStatus.TOOL_CALL_COMPLETED,tc.result=extractToolResultV3(output),tc.completedAt=utcTimestamp(),tc.isStreaming=!1,this.state.toolStartTimes.delete(callId),this.toolArgBuffers.delete(callId),tc.toolKind===ToolKind.TODO&&applyTodoUpdate(this.state.proto.todos,tc.args?.todos,{merge:!1}),this._forceNextUpdate=!0)}handleToolError(callId,message){let tc=this.state.toolCalls.get(callId);tc&&(tc.status=ToolCallStatus.TOOL_CALL_FAILED,tc.error=message,tc.completedAt=utcTimestamp(),tc.isStreaming=!1,this.state.toolStartTimes.delete(callId),this.toolArgBuffers.delete(callId),this._forceNextUpdate=!0)}handleToolCallArgDelta(callId,argsChunk){let tc=this.state.toolCalls.get(callId);if(!tc)return;let buffer=(this.toolArgBuffers.get(callId)??"")+argsChunk;this.toolArgBuffers.set(callId,buffer);try{tc.args=JSON.parse(buffer)}catch{}}handleToolOutputDelta(callId,delta){let tc=this.state.toolCalls.get(callId);tc&&(tc.result=(tc.result??"")+delta)}resolveAgentNamespace(ns3){return ns3?ns3.split("|").filter(p=>!p.startsWith("tools:")).join("|"):""}checkApprovalRequirement(toolName,args){if(!this.approvalProvider)return{requiresApproval:!1,message:"",serverSlug:""};let serverSlug=this.approvalProvider.toolServerMap.get(toolName)??"";if(this.approvalProvider.globalBypass)return{requiresApproval:!1,message:"",serverSlug};if(serverSlug){let key=`${serverSlug}/${toolName}`,policy=this.approvalProvider.policies.get(key);return policy?.requiresApproval?{requiresApproval:!0,message:resolveApprovalMessage(policy.approvalMessage,toolName,args),serverSlug}:{requiresApproval:!1,message:"",serverSlug}}return{requiresApproval:!1,message:"",serverSlug:""}}ensureAiMessage(runId,namespace,type3){let existingByRun=this.state.messagesByRun.get(runId);if(existingByRun)return existingByRun;let lastRunId=this.state.lastLlmRunId.get(namespace);if(lastRunId&&lastRunId!==runId){let existingMsg=this.state.currentAiMessage.get(namespace);existingMsg&&(existingMsg.isStreaming=!1)}let msg=create(AgentMessageSchema,{type:type3,content:"",timestamp:utcTimestamp(),isStreaming:!0});return this.state.proto.messages.push(msg),this.state.messagesByRun.set(runId,msg),this.state.currentAiMessage.set(namespace,msg),this.state.lastLlmRunId.set(namespace,runId),msg}ensureAiMessageForToolCall(namespace){let lastRunId=this.state.lastLlmRunId.get(namespace);if(lastRunId){let existing=this.state.messagesByRun.get(lastRunId);if(existing)return this.state.currentAiMessage.set(namespace,existing),existing}let msg=create(AgentMessageSchema,{type:MessageType.MESSAGE_AI,content:"",timestamp:utcTimestamp(),isStreaming:!1});return this.state.proto.messages.push(msg),this.state.currentAiMessage.set(namespace,msg),msg}accumulateV3Usage(usage){let meta3={input_tokens:usage.input_tokens,output_tokens:usage.output_tokens};usage.input_token_details&&(meta3.cache_read_input_tokens=usage.input_token_details.cache_read,meta3.cache_creation_input_tokens=usage.input_token_details.cache_creation),this.usageAccumulator.accumulate(meta3),this.state.proto.streamingUsage=this.usageAccumulator.toProto()}isTrackedTaskTool(callId){return this.state.toolCalls.get(callId)?.name==="task"}syncSubAgentExecutions(){this.subAgentTracker.hasExecutions()&&(this.state.proto.subAgentExecutions=this.subAgentTracker.getExecutions())}cancelSubAgents(){this.subAgentTracker.cancelAll(),this.syncSubAgentExecutions()}}}});var StreamingSideEffects,init_streaming_side_effects=__esm({"dist/activities/execute-deep-agent/streaming-side-effects.js"(){"use strict";init_file_tools();StreamingSideEffects=class{inputCache=new Map;inlinePublisher;writebackCoordinator;pendingPublishPromises=[];pendingWritebackPromises=[];constructor(opts){this.inlinePublisher=opts.inlinePublisher,this.writebackCoordinator=opts.writebackCoordinator}onProtocolEvent(event){if(event.method!=="tools"||!this.inlinePublisher&&!this.writebackCoordinator)return;let data=event.params.data;if(!data)return;let eventType=data.event??data.type,callId=data.tool_call_id??data.toolCallId;if(callId){if(eventType==="tool-started"){let toolName=data.tool_name??data.toolName??data.name??"",rawInput=data.input,input={};if(typeof rawInput=="string")try{input=JSON.parse(rawInput)}catch{}else rawInput&&typeof rawInput=="object"&&!Array.isArray(rawInput)&&(input=rawInput);this.inputCache.set(callId,{toolName,input});return}if(eventType==="tool-finished"){let cached4=this.inputCache.get(callId);if(this.inputCache.delete(callId),!cached4||!isFileModifyingTool(cached4.toolName))return;let filePath=extractFilePath(cached4.input);if(!filePath)return;this.inlinePublisher&&this.pendingPublishPromises.push(this.inlinePublisher.publish(filePath)),this.writebackCoordinator&&this.pendingWritebackPromises.push(this.writebackCoordinator.onFileModified(filePath))}}}}}});async function streamExecutionV3(deps){let{agentGraph,langgraphInput,langgraphConfig,executionId,client:client2,initialStatus,streamingConfig,retryOptions,offload,stallTimeoutMs=DEFAULT_STALL_TIMEOUT_MS,heartbeatFn,isCancelledFn,gracefulStop,inlinePublisher,writebackCoordinator,approvalProvider}=deps,statusBuilder=new V3StatusBuilder(executionId,initialStatus);approvalProvider&&statusBuilder.setApprovalProvider(approvalProvider);let scheduler=new StreamingUpdateScheduler(streamingConfig),recorder=createV3EventRecorder(executionId,process.env.V3_EVENT_RECORD_DIR),abortController=new AbortController,sideEffects=new StreamingSideEffects({inlinePublisher,writebackCoordinator});sendHeartbeat(heartbeatFn,executionId,0,statusBuilder);let run=await agentGraph.streamEvents(langgraphInput,{...langgraphConfig,version:"v3",signal:abortController.signal}),eventsProcessed=0,lastActivityAt2=performance.now(),heartbeatTimer=setInterval(()=>{sendHeartbeat(heartbeatFn,executionId,eventsProcessed,statusBuilder)},HEARTBEAT_INTERVAL_MS);try{for await(let event of run){if(isCancelledFn?.())return abortController.abort("Cancelled by platform"),statusBuilder.cancelSubAgents(),handlePause(statusBuilder,eventsProcessed,sideEffects.pendingPublishPromises,sideEffects.pendingWritebackPromises);lastActivityAt2=performance.now(),recorder?.record(event,eventsProcessed);for(let normalized of normalize3(event))statusBuilder.processEvent(normalized);if(sideEffects.onProtocolEvent(event),eventsProcessed++,statusBuilder.forceNextUpdate||scheduler.shouldSendUpdate(eventsProcessed)){statusBuilder.forceNextUpdate&&statusBuilder.clearForceFlag(),statusBuilder.syncSubAgentExecutions();let statusToPersist=statusBuilder.currentStatus;await deps.beforePersist?.(statusToPersist);let signal=await persistStatus(client2,executionId,statusToPersist,{offload,retry:retryOptions});if(scheduler.markUpdateSent(eventsProcessed),signal===ExecutionControlSignal.STOP)if(console.warn(`[streaming-v3] STOP signal received for execution ${executionId}`),gracefulStop)gracefulStop.activate("Platform STOP signal");else return handleStop(statusBuilder,eventsProcessed,sideEffects.pendingPublishPromises,sideEffects.pendingWritebackPromises)}checkStallTimeout(lastActivityAt2,stallTimeoutMs,executionId)}}catch(err){if(isGraphRecursionError(err))return await recorder?.flush(),handleRecursionLimit(statusBuilder,eventsProcessed,sideEffects.pendingPublishPromises,sideEffects.pendingWritebackPromises);throw err}finally{clearInterval(heartbeatTimer)}if(await recorder?.flush(),eventsProcessed===0)throw new Error("Stream completed without processing any events. This may indicate a configuration error or v3 API incompatibility.");if(statusBuilder.syncSubAgentExecutions(),initialStatus.phase===ExecutionPhase.EXECUTION_WAITING_FOR_APPROVAL)return console.log(`[streaming-v3] execution=${executionId} stream ended with WAITING_FOR_APPROVAL. Not setting COMPLETED. pending_approvals computed server-side.`),{eventsProcessed,terminalStatus:slimStatus(initialStatus),pendingPublishPromises:sideEffects.pendingPublishPromises,pendingWritebackPromises:sideEffects.pendingWritebackPromises};console.log(`[streaming-v3] execution=${executionId} stream finished \u2014 processed ${eventsProcessed} events`);let runOutput=await extractRunOutput(run,executionId);return{eventsProcessed,runOutput,pendingPublishPromises:sideEffects.pendingPublishPromises,pendingWritebackPromises:sideEffects.pendingWritebackPromises}}async function extractRunOutput(run,executionId){try{let finalState=await Promise.race([run.output,timeoutPromise(RUN_OUTPUT_TIMEOUT_MS)]);if(finalState===TIMEOUT_SENTINEL){console.warn(`[streaming-v3] execution=${executionId} \u2014 run.output did not resolve within ${RUN_OUTPUT_TIMEOUT_MS}ms. Proceeding without final state.`);return}let output=finalState;return console.log(`[streaming-v3] execution=${executionId} \u2014 run.output resolved. Keys: [${Object.keys(output??{}).join(", ")}]. hasStructuredResponse=${output?.structuredResponse!==void 0}`),output}catch(err){console.warn(`[streaming-v3] execution=${executionId} \u2014 run.output rejected: ${err}`);return}}function timeoutPromise(ms){return new Promise(resolve7=>setTimeout(()=>resolve7(TIMEOUT_SENTINEL),ms))}function sendHeartbeat(fn,executionId,eventsProcessed,sb){if(fn)try{fn({executionId,eventsProcessed,messages:sb.currentStatus.messages.length,phase:sb.currentStatus.phase})}catch{}}function checkStallTimeout(lastActivityAt2,stallTimeoutMs,executionId){let elapsed2=performance.now()-lastActivityAt2;if(elapsed2>stallTimeoutMs)throw new StallTimeoutError2(`Agent stream stalled: no events received for ${Math.round(elapsed2/1e3)}s for execution ${executionId}`)}var DEFAULT_STALL_TIMEOUT_MS,HEARTBEAT_INTERVAL_MS,RUN_OUTPUT_TIMEOUT_MS,TIMEOUT_SENTINEL,init_streaming_v3=__esm({"dist/activities/execute-deep-agent/streaming-v3.js"(){"use strict";init_streaming5();init_enum_pb();init_v3_event_recorder();init_v3_protocol_normalizer();init_v3_status_builder();init_streaming_scheduler();init_status2();init_streaming_side_effects();init_streaming_terminal();DEFAULT_STALL_TIMEOUT_MS=12e4,HEARTBEAT_INTERVAL_MS=2e3,RUN_OUTPUT_TIMEOUT_MS=3e4;TIMEOUT_SENTINEL=Symbol("timeout")}});async function streamExecution(deps){return deps.streamVersion==="v3"?streamExecutionV3(deps):streamExecutionV2(deps)}async function streamExecutionV2(deps){let{agentGraph,langgraphInput,langgraphConfig,executionId,client:client2,initialStatus,streamingConfig,retryOptions,offload,stallTimeoutMs=DEFAULT_STALL_TIMEOUT_MS2,heartbeatFn,isCancelledFn,gracefulStop,inlinePublisher,writebackCoordinator,approvalProvider}=deps,statusBuilder=new StatusBuilder(executionId,initialStatus);approvalProvider&&statusBuilder.setApprovalProvider(approvalProvider);let scheduler=new StreamingUpdateScheduler(streamingConfig),recorder=createV2EventRecorder(executionId,process.env.V2_EVENT_RECORD_DIR),eventsProcessed=0,lastEventTime=performance.now(),lastHeartbeatTime=performance.now(),heartbeatIntervalMs=2e3,pendingPublishPromises=[],pendingWritebackPromises=[];try{let stream=agentGraph.streamEvents(langgraphInput,langgraphConfig,{version:"v2"});for await(let event of stream){if(isCancelledFn?.())return handlePause(statusBuilder,eventsProcessed,pendingPublishPromises,pendingWritebackPromises);if(lastEventTime=performance.now(),recorder?.record(event,eventsProcessed),statusBuilder.processEvent(event),eventsProcessed++,event.event==="on_tool_end"&&(inlinePublisher||writebackCoordinator)){let filePath=extractFilePathFromToolEnd(event);filePath&&(inlinePublisher&&pendingPublishPromises.push(inlinePublisher.publish(filePath)),writebackCoordinator&&pendingWritebackPromises.push(writebackCoordinator.onFileModified(filePath)))}let now=performance.now();if(heartbeatFn&&now-lastHeartbeatTime>=heartbeatIntervalMs&&(sendHeartbeat2(heartbeatFn,executionId,eventsProcessed,statusBuilder),lastHeartbeatTime=now),statusBuilder.forceNextUpdate||scheduler.shouldSendUpdate(eventsProcessed)){statusBuilder.forceNextUpdate&&statusBuilder.clearForceFlag();let statusToPersist=statusBuilder.currentStatus;await deps.beforePersist?.(statusToPersist);let signal=await persistStatus(client2,executionId,statusToPersist,{offload,retry:retryOptions});if(scheduler.markUpdateSent(eventsProcessed),signal===ExecutionControlSignal.STOP)if(console.warn(`[streaming] STOP signal received for execution ${executionId}`),gracefulStop)gracefulStop.activate("Platform STOP signal");else return handleStop(statusBuilder,eventsProcessed,pendingPublishPromises,pendingWritebackPromises)}checkStallTimeout2(lastEventTime,stallTimeoutMs,executionId)}}catch(err){if(isGraphRecursionError(err))return handleRecursionLimit(statusBuilder,eventsProcessed,pendingPublishPromises,pendingWritebackPromises);throw err}if(await recorder?.flush(),eventsProcessed===0)throw new Error("Stream completed without processing any events. This may indicate a configuration error.");return initialStatus.phase===ExecutionPhase.EXECUTION_WAITING_FOR_APPROVAL?(console.log(`[streaming] execution=${executionId} stream ended with WAITING_FOR_APPROVAL. Not setting COMPLETED. pending_approvals computed server-side.`),{eventsProcessed,terminalStatus:slimStatus(initialStatus),pendingPublishPromises,pendingWritebackPromises}):(console.log(`[streaming] execution=${executionId} stream finished \u2014 processed ${eventsProcessed} events`),{eventsProcessed,pendingPublishPromises,pendingWritebackPromises})}function sendHeartbeat2(fn,executionId,eventsProcessed,sb){try{fn({executionId,eventsProcessed,messages:sb.currentStatus.messages.length,phase:sb.currentStatus.phase})}catch(err){console.warn(`[streaming] Heartbeat failed for ${executionId}:`,err)}}function checkStallTimeout2(lastEventTime,stallTimeoutMs,executionId){let elapsed2=performance.now()-lastEventTime;if(elapsed2>stallTimeoutMs)throw new StallTimeoutError2(`Agent stream stalled: no events received for ${Math.round(elapsed2/1e3)}s for execution ${executionId}`)}function extractFilePathFromToolEnd(event){let toolName=event.name??"";if(!isFileModifyingTool(toolName))return null;let input=event.data?.input;return input?extractFilePath(input):null}var DEFAULT_STALL_TIMEOUT_MS2,StallTimeoutError2,init_streaming5=__esm({"dist/activities/execute-deep-agent/streaming.js"(){"use strict";init_enum_pb();init_status_builder();init_streaming_terminal();init_streaming_scheduler();init_status2();init_event_recorder();init_streaming_v3();init_file_tools();DEFAULT_STALL_TIMEOUT_MS2=12e4;StallTimeoutError2=class extends Error{constructor(message){super(message),this.name="StallTimeoutError"}}}});function normalizePath(path6){return path6.replace(/^\/+/,"")}function sha2563(content){return(0,import_node_crypto15.createHash)("sha256").update(content).digest("hex")}function guessContentType(filename){let ext=filename.slice(filename.lastIndexOf(".")).toLowerCase();return CONTENT_TYPE_MAP[ext]??"application/octet-stream"}var import_node_crypto15,import_node_path31,InlinePublisher,CONTENT_TYPE_MAP,init_inline_publisher=__esm({"dist/activities/execute-deep-agent/inline-publisher.js"(){"use strict";import_node_crypto15=require("node:crypto"),import_node_path31=require("node:path");init_esm4();init_artifact_pb();init_enum_pb();init_status2();init_secret_paths();InlinePublisher=class{workspaceBackend;artifactStorage;statusWriter;executionId;published=new Map;constructor(opts){this.workspaceBackend=opts.workspaceBackend,this.artifactStorage=opts.artifactStorage,this.statusWriter=opts.statusWriter,this.executionId=opts.executionId}get publishedPaths(){return new Set(this.published.keys())}async publish(path6){if(this.artifactStorage)try{let sandboxPath=normalizePath(path6);if(isSecretLikePath(sandboxPath)){console.log(`[InlinePublisher] execution=${this.executionId} \u2014 withheld '${sandboxPath}' (secret-like; never published to artifact storage)`);return}let content=await this.workspaceBackend.readFile(sandboxPath),contentBuffer=Buffer.from(content,"utf-8"),contentHash=sha2563(contentBuffer);if(this.published.get(sandboxPath)===contentHash)return;let fileName=(0,import_node_path31.basename)(sandboxPath),storageKey=`artifacts/${this.executionId}/${fileName}`;await this.artifactStorage.upload(storageKey,contentBuffer,guessContentType(fileName));let artifact=create(ExecutionArtifactSchema,{name:fileName,sandboxPath,kind:ExecutionArtifactKind.FILE,sizeBytes:BigInt(contentBuffer.length),storageKey,createdAt:utcTimestamp(),contentHash});this.statusWriter.addArtifact(artifact),this.published.set(sandboxPath,contentHash),console.log(`[InlinePublisher] execution=${this.executionId} \u2014 published '${sandboxPath}' (${contentBuffer.length} bytes, hash=${contentHash.slice(0,12)})`)}catch(err){console.warn(`[InlinePublisher] execution=${this.executionId} \u2014 failed to publish '${path6}' (non-fatal): ${err}`)}}};CONTENT_TYPE_MAP={".txt":"text/plain",".md":"text/markdown",".json":"application/json",".js":"application/javascript",".ts":"application/typescript",".py":"text/x-python",".html":"text/html",".css":"text/css",".xml":"text/xml",".yaml":"text/yaml",".yml":"text/yaml",".csv":"text/csv",".pdf":"application/pdf",".zip":"application/zip",".png":"image/png",".jpg":"image/jpeg",".jpeg":"image/jpeg",".gif":"image/gif",".svg":"image/svg+xml"}}});function parseGithubRepo(repoUrl){let httpsMatch=repoUrl.match(/github\.com[/:]([^/]+)\/([^/.]+?)(?:\.git)?$/);if(httpsMatch)return{owner:httpsMatch[1],repo:httpsMatch[2]};throw new Error(`Cannot parse GitHub owner/repo from URL: ${repoUrl}`)}function extractGithubToken(repoUrl){let match=repoUrl.match(/https?:\/\/([^@]+)@github\.com/);if(match)return match[1];let envToken=process.env.GITHUB_TOKEN;if(envToken)return envToken;throw new Error("Cannot extract GitHub token from repo URL and GITHUB_TOKEN is not set")}var WRITE_BACK_ENABLED_MODES,WriteBackCoordinator,init_writeback_coordinator=__esm({"dist/activities/execute-deep-agent/writeback-coordinator.js"(){"use strict";init_esm4();init_writeback_pb();init_writeback_pb();init_enum_pb4();init_types6();WRITE_BACK_ENABLED_MODES=new Set([GitWriteBackMode.GIT_WRITE_BACK_MODE_UNSPECIFIED,GitWriteBackMode.GIT_WRITE_BACK_BRANCH_AND_PR]),WriteBackCoordinator=class{statusWriter;executionId;workspaceBackend;shortId;branchName;eligible=new Map;state=new Map;locks=new Map;constructor(opts){this.statusWriter=opts.statusWriter,this.executionId=opts.executionId,this.workspaceBackend=opts.workspaceBackend,this.shortId=opts.executionId.slice(0,8),this.branchName=`stigmer/${this.shortId}`,this.initEligibleEntries(opts.provisionResults,opts.workspaceEntries)}get hasEligibleEntries(){return this.eligible.size>0}async onFileModified(path6){try{let entryName=this.resolveEntry(path6);if(!entryName)return;await this.withLock(entryName,()=>this.incrementalWriteBack(entryName))}catch(err){console.warn(`[WriteBack] execution=${this.executionId} \u2014 onFileModified error for '${path6}': ${err}`)}}async finalize(){for(let entryName of this.eligible.keys())try{await this.withLock(entryName,()=>this.incrementalWriteBack(entryName))}catch(err){console.warn(`[WriteBack] execution=${this.executionId} entry=${entryName} \u2014 finalize error: ${err}`)}}initEligibleEntries(provisionResults,workspaceEntries){let modeMap=new Map;for(let entry of workspaceEntries){let source=entry.source;source?.source.case==="gitRepo"&&modeMap.set(entry.name,source.source.value.writeBackMode)}for(let pr of provisionResults){if(pr.sourceType!==SourceType.GIT_REPO||!pr.gitMetadata||!pr.gitMetadata.gitCredentialsConfigured)continue;let mode=modeMap.get(pr.entryName)??GitWriteBackMode.GIT_WRITE_BACK_MODE_UNSPECIFIED;WRITE_BACK_ENABLED_MODES.has(mode)&&(this.eligible.set(pr.entryName,{provisionResult:pr,baseBranch:pr.gitMetadata.branch,rootDir:pr.rootDir,entryName:pr.entryName}),this.state.set(pr.entryName,{branchCreated:!1,prCreated:!1,prUrl:"",prNumber:0,commitCount:0,lastCommitSha:"",githubToken:"",githubOwner:"",githubRepo:""}))}this.eligible.size>0&&console.log(`[WriteBack] execution=${this.executionId} \u2014 coordinator initialized with ${this.eligible.size} eligible workspace(s): ${[...this.eligible.keys()].join(", ")}`)}resolveEntry(path6){if(this.eligible.size===0)return null;if(this.eligible.size===1)return this.eligible.keys().next().value;let normalized=path6.replace(/^\/+/,"");for(let entryName of this.eligible.keys())if(normalized.startsWith(entryName+"/")||normalized===entryName)return entryName;return null}async incrementalWriteBack(entryName){let entry=this.eligible.get(entryName),entryState=this.state.get(entryName),rootDir=entry.rootDir,exec2=async cmd=>this.workspaceBackend.execute(`cd ${rootDir} && ${cmd}`),mutationStarted=!1;try{if(!await this.hasChanges(exec2))return;mutationStarted=!0,entryState.branchCreated||await this.createBranch(entryName,entryState,exec2);let commitMsg=`agent changes (${entryState.commitCount+1})`;await this.commitAndPush(entryName,entryState,exec2,commitMsg),entryState.prCreated||await this.createPr(entryName,entryState,entry,exec2),await this.updateStatus(entryName,entryState,entry,exec2)}catch(err){if(console.warn(`[WriteBack] execution=${this.executionId} entry=${entryName} \u2014 incremental error: ${err}`),!mutationStarted)return;let wb=create(WorkspaceWriteBackSchema,{workspaceEntryName:entryName,baseBranch:entry.baseBranch,branchName:entryState.branchCreated?this.branchName:"",phase:WorkspaceWriteBackPhase.WORKSPACE_WRITE_BACK_FAILED,error:String(err)});entryState.prCreated&&(wb.pullRequestUrl=entryState.prUrl,wb.pullRequestNumber=entryState.prNumber),this.statusWriter.addWriteBack(wb)}}async hasChanges(exec2){let diff=await exec2("git diff --stat").catch(()=>""),staged=await exec2("git diff --cached --stat").catch(()=>"");return diff.trim()||staged.trim()?!0:(await exec2("git ls-files --others --exclude-standard").catch(()=>"")).trim().length>0}async createBranch(entryName,entryState,exec2){await exec2(`git checkout -b ${this.branchName}`),entryState.branchCreated=!0,console.log(`[WriteBack] execution=${this.executionId} entry=${entryName} \u2014 created branch ${this.branchName}`)}async commitAndPush(entryName,entryState,exec2,commitMsg){await exec2("git add -A"),await exec2(`git commit -m "${commitMsg}"`),entryState.commitCount++;let shaOutput=await exec2("git rev-parse HEAD");entryState.lastCommitSha=shaOutput.trim(),entryState.commitCount===1?await exec2(`git push -u origin ${this.branchName}`):await exec2("git push"),console.log(`[WriteBack] execution=${this.executionId} entry=${entryName} \u2014 commit #${entryState.commitCount} pushed (sha=${entryState.lastCommitSha.slice(0,12)})`)}async createPr(entryName,entryState,entry,_exec){let meta3=entry.provisionResult.gitMetadata,{owner,repo}=parseGithubRepo(meta3.repoUrl);entryState.githubToken||(entryState.githubToken=extractGithubToken(meta3.repoUrl),entryState.githubOwner=owner,entryState.githubRepo=repo);let prTitle=`Agent changes (${this.shortId})`,prBody=`Automated pull request from Stigmer agent execution.
|
|
2288
|
-
|
|
2289
|
-
**Execution:** \`${this.executionId}\`
|
|
2290
|
-
**Workspace:** \`${entryName}\`
|
|
2291
|
-
`,resp=await fetch(`https://api.github.com/repos/${entryState.githubOwner}/${entryState.githubRepo}/pulls`,{method:"POST",headers:{Authorization:`Bearer ${entryState.githubToken}`,Accept:"application/vnd.github+json","Content-Type":"application/json"},body:JSON.stringify({title:prTitle,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 updateStatus(entryName,entryState,entry,exec2){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});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}}}});async function autoPublishWrittenFiles(status,inlinePublisher){let alreadyPublished=inlinePublisher.publishedPaths,pathsToPublish=[];for(let message of status.messages)for(let tc of message.toolCalls){if(!FILE_MODIFYING_TOOLS2.has(tc.name))continue;let filePath=extractFilePath2(tc.args);if(!filePath)continue;let normalized=filePath.replace(/^\/+/,"");alreadyPublished.has(normalized)||pathsToPublish.includes(normalized)||pathsToPublish.push(normalized)}let count=0;for(let path6 of pathsToPublish)try{await inlinePublisher.publish(path6),count++}catch{}return count>0&&console.log(`[autoPublish] Published ${count} additional artifact(s) via safety net`),count}function extractFilePath2(args){return args?typeof args.path=="string"?args.path:typeof args.file_path=="string"?args.file_path:typeof args.filename=="string"?args.filename:typeof args.file=="string"?args.file:null:null}var FILE_MODIFYING_TOOLS2,init_auto_publish=__esm({"dist/activities/execute-deep-agent/auto-publish.js"(){"use strict";FILE_MODIFYING_TOOLS2=new Set(["write_file","edit_file","create_file","write","edit","create","str_replace_editor"])}});async function processPostStream(opts){let{status,inlinePublisher,writebackCoordinator,pendingPublishPromises,pendingWritebackPromises,executionId}=opts;if(status.phase===ExecutionPhase.EXECUTION_WAITING_FOR_APPROVAL||status.phase===ExecutionPhase.EXECUTION_PAUSED){let phaseName=status.phase===ExecutionPhase.EXECUTION_PAUSED?"PAUSED":"WAITING_FOR_APPROVAL";(pendingPublishPromises.length>0||pendingWritebackPromises.length>0)&&(await Promise.allSettled([...pendingPublishPromises,...pendingWritebackPromises]),console.log(`[postStream] execution=${executionId} \u2014 drained pending promises (phase is ${phaseName})`));return}if(pendingPublishPromises.length>0)try{await Promise.allSettled(pendingPublishPromises),console.log(`[postStream] execution=${executionId} \u2014 drained ${pendingPublishPromises.length} pending publish task(s)`)}catch(err){console.warn(`[postStream] execution=${executionId} \u2014 error draining publish tasks: ${err}`)}if(pendingWritebackPromises.length>0)try{await Promise.allSettled(pendingWritebackPromises),console.log(`[postStream] execution=${executionId} \u2014 drained ${pendingWritebackPromises.length} pending writeback task(s)`)}catch(err){console.warn(`[postStream] execution=${executionId} \u2014 error draining writeback tasks: ${err}`)}try{await autoPublishWrittenFiles(status,inlinePublisher)}catch(err){console.warn(`[postStream] execution=${executionId} \u2014 auto-publish safety net error: ${err}`)}if(writebackCoordinator)try{await writebackCoordinator.finalize(),console.log(`[postStream] execution=${executionId} \u2014 writeback finalize complete`)}catch(err){console.warn(`[postStream] execution=${executionId} \u2014 writeback finalize error: ${err}`)}}var init_post_stream=__esm({"dist/activities/execute-deep-agent/post-stream.js"(){"use strict";init_enum_pb();init_auto_publish()}});function resolveResumeInput(execution,graphState,userMessage){let pendingInterrupts=extractPendingInterrupts(graphState);if(pendingInterrupts.length===0)return{graphInput:{messages:[{role:"user",content:userMessage}]},isResumeFromApproval:!1,hasRejection:!1,rejectionReason:""};let decisions=extractApprovalDecisions(execution);if(decisions.size===0)return{graphInput:{messages:[{role:"user",content:userMessage}]},isResumeFromApproval:!1,hasRejection:!1,rejectionReason:""};let resumeDict={},hasRejection=!1,rejectionReason="";for(let intr of pendingInterrupts){let toolCallId=intr.toolCallId,decision=decisions.get(toolCallId);if(!decision)continue;let actionStr=ACTION_MAP.get(decision.action);actionStr&&(resumeDict[intr.interruptId]={action:actionStr,...decision.comment?{comment:decision.comment}:{}},decision.action===ApprovalAction.REJECT&&(hasRejection=!0,rejectionReason=decision.comment||"Rejected by user"))}return Object.keys(resumeDict).length===0?{graphInput:{messages:[{role:"user",content:userMessage}]},isResumeFromApproval:!1,hasRejection:!1,rejectionReason:""}:(console.log(`[hitl] Building resume for ${Object.keys(resumeDict).length} interrupt(s), rejection=${hasRejection}`),{graphInput:new Command({resume:resumeDict}),isResumeFromApproval:!0,hasRejection,rejectionReason})}function extractPendingInterrupts(state){let result=[];for(let task2 of state.tasks)if(task2.interrupts)for(let intr of task2.interrupts){if(intr.resumeValue!==void 0)continue;let value=intr.value;if(typeof value=="object"&&value!==null){let toolCallId=value.tool_call_id;typeof toolCallId=="string"&&toolCallId&&result.push({interruptId:intr.id??task2.id,toolCallId})}}return result}function extractApprovalDecisions(execution){let decisions=new Map,status=execution.status;if(!status)return decisions;for(let message of status.messages)for(let tc of message.toolCalls)tc.approvalAction!==ApprovalAction.UNSPECIFIED&&tc.status===ToolCallStatus.TOOL_CALL_WAITING_APPROVAL&&decisions.set(tc.id,{action:tc.approvalAction,comment:""});return decisions}var ACTION_MAP,init_hitl2=__esm({"dist/activities/execute-deep-agent/hitl.js"(){"use strict";init_dist4();init_enum_pb();ACTION_MAP=new Map([[ApprovalAction.APPROVE,"approve"],[ApprovalAction.APPROVE_ALL,"approve"],[ApprovalAction.SKIP,"skip"],[ApprovalAction.REJECT,"reject"]])}});function findAiMessageToolCallArgs(messages,toolCallId){for(let msg of messages){if(!msg||typeof msg!="object")continue;let toolCalls=msg.tool_calls;if(Array.isArray(toolCalls))for(let tc of toolCalls){if(!tc||typeof tc!="object")continue;let entry=tc;if(entry.id===toolCallId)return entry.args&&typeof entry.args=="object"&&!Array.isArray(entry.args)?entry.args:{}}}}function captureApprovalArtifacts(opts){let args=findAiMessageToolCallArgs(opts.messages,opts.toolCallId);return!args||Object.keys(args).length===0?{}:{argsPreview:sanitizeArgsPreview(args)||void 0}}var init_approval_file_change=__esm({"dist/activities/execute-deep-agent/approval-file-change.js"(){"use strict";init_status_builder_shared()}});function stampFlowedFileEditRows2(messages,changeSetId,skipToolCallIds){for(let msg of messages)for(let tc of msg.toolCalls){if(tc.fileChangeSetId||skipToolCallIds?.has(tc.id)||isToolCallRowHidden(tc))continue;let category=toolApprovalCategory(tc.name);category!=="write"&&category!=="delete"||stampFileEditRow(tc,changeSetId)}}function stampFlowedSubAgentFileEditRows(subAgents,changeSetId,priorToolCallIds){for(let sa of subAgents)stampFlowedFileEditRows2(sa.messages,changeSetId,priorToolCallIds)}var init_stamp_flowed_rows=__esm({"dist/activities/execute-deep-agent/stamp-flowed-rows.js"(){"use strict";init_tool_kind();init_tool_row()}});function deriveTurnCommandProvenance2(inputs){let{status,priorSettledToolCallIds,priorSubAgentToolCallIds,globalBypass}=inputs;for(let id of collectSubAgentToolCallIds(status.subAgentExecutions))if(!priorSubAgentToolCallIds.has(id))return;let messages=status.messages,turnToolCalls=messages.flatMap(m=>m.toolCalls).filter(tc=>!priorSettledToolCallIds.has(tc.id));return qualifyTurnCommandProvenance({turnToolCalls,messages,isExecutedCommand:tc=>tc.status===ToolCallStatus.TOOL_CALL_COMPLETED,resolveDirectConsent:tc=>tc.approvalAction===ApprovalAction.APPROVE||tc.approvalAction===ApprovalAction.APPROVE_ALL?tc.id:void 0,globalBypass})}var init_command_provenance3=__esm({"dist/activities/execute-deep-agent/command-provenance.js"(){"use strict";init_enum_pb();init_command_provenance();init_tool_row()}});var extract_json_exports={};__export(extract_json_exports,{extractJsonFromText:()=>extractJsonFromText});function extractJsonFromText(text){if(!text)return;let trimmed=text.trim(),direct=tryParse(trimmed);if(direct!==void 0)return direct;let fenced=extractFromCodeFences(trimmed);if(fenced!==void 0)return fenced;let braced=extractLastJsonObject(trimmed);if(braced!==void 0)return braced}function extractFromCodeFences(text){let fences=[],match;for(;(match=CODE_FENCE_RE.exec(text))!==null;)fences.push(match[1]);CODE_FENCE_RE.lastIndex=0;for(let i2=fences.length-1;i2>=0;i2--){let content=fences[i2].trim();if(!content.startsWith("{")&&!content.startsWith("["))continue;let result=tryParse(content);if(result!==void 0)return result}}function extractLastJsonObject(text){let lastClose=text.lastIndexOf("}");if(lastClose===-1)return;let depth=0,inString=!1,escaped=!1;for(let i2=lastClose;i2>=0;i2--){let ch=text[i2];if(inString){if(escaped){escaped=!1;continue}if(ch==="\\"){escaped=!0;continue}ch==='"'&&(inString=!1);continue}if(ch==='"'){inString=!0;continue}if(ch==="}")depth++;else if(ch==="{"&&(depth--,depth===0)){let candidate=text.slice(i2,lastClose+1);return tryParse(candidate)}}}function tryParse(candidate){try{return JSON.parse(candidate)}catch{}let repaired=stripTrailingCommas(candidate);if(repaired!==candidate)try{return JSON.parse(repaired)}catch{}}function stripTrailingCommas(json5){return json5.replace(/,\s*([}\]])/g,"$1")}var CODE_FENCE_RE,init_extract_json=__esm({"dist/shared/extract-json.js"(){"use strict";CODE_FENCE_RE=/```(?:json|JSON)?\s*\n([\s\S]*?)```/g}});var execute_deep_agent_exports={};__export(execute_deep_agent_exports,{createDeepAgentActivities:()=>createDeepAgentActivities});function createDeepAgentActivities(config4){let client2=new StigmerClient({endpoint:config4.stigmerBackendEndpoint,token:config4.stigmerToken,tokenRef:config4.stigmerTokenRef}),streamingConfig=loadStreamingConfig();return{ExecuteDeepAgent:async(arg0,arg1)=>{let{executionId,threadId,turnSeq}=normalizeActivityInput(arg0,arg1);activityStarted();let setup=null,releaseWorkspaceLock;try{console.log(`[ExecuteDeepAgent] Started for execution ${executionId}`),setup=await performSetup({config:config4,client:client2,executionId,threadId});let statusOffload=setup.artifactStorage?{artifactStorage:setup.artifactStorage,executionId}:void 0,graphState=await setup.agentGraph.getState(setup.langgraphConfig),initialStatus=shouldSeedFromPersistedTranscript(setup.execution)?seedStatusFromExecution(setup.execution):create(AgentExecutionStatusSchema,{}),statusBuilder=new StatusBuilder(executionId,initialStatus);statusBuilder.setApprovalProvider({policies:setup.approvalPolicies,toolServerMap:setup.toolServerMap,leasedCategories:setup.leasedCategories,globalBypass:setup.globalBypass});let resume=resolveResumeInput(setup.execution,graphState,setup.execution.spec.message);if(resume.hasRejection){let failedStatus=create(AgentExecutionStatusSchema,{phase:ExecutionPhase.EXECUTION_FAILED,error:`Execution rejected: ${resume.rejectionReason}`,completedAt:utcTimestamp(),messages:[create(AgentMessageSchema,{type:MessageType.MESSAGE_SYSTEM,content:`Execution rejected by user: ${resume.rejectionReason}`,timestamp:utcTimestamp()})]});return await persistStatus(client2,executionId,failedStatus,{offload:statusOffload}),slimStatus(failedStatus)}let effectiveInput=resume.isResumeFromApproval?resume.graphInput:setup.langgraphInput,inlinePublisher=new InlinePublisher({workspaceBackend:setup.workspaceBackend,artifactStorage:setup.artifactStorage,statusWriter:statusBuilder,executionId}),workspaceEntries=setup.session.spec?.workspaceEntries??[],writebackCoordinator=setup.provisionResults.length>0?new WriteBackCoordinator({statusWriter:statusBuilder,executionId,provisionResults:setup.provisionResults,workspaceEntries,workspaceBackend:setup.workspaceBackend}):null,gitRoot=setup.workspaceBackend.rootDir,changeSetId=`${executionId}:${turnSeq}`;try{releaseWorkspaceLock=await acquireWorkspaceLock(gitRoot,{onWaiting:()=>reportSetupProgress(client2,executionId,"Waiting for workspace \u2014 in use by another session"),heartbeat:()=>import_activity3.Context.current().heartbeat(),signal:import_activity3.Context.current().cancellationSignal,timeoutMs:config4.workspaceLockTimeoutMs})}catch(lockErr){if(lockErr instanceof WorkspaceLockCancelledError)throw new import_activity3.CancelledFailure("Activity cancelled while waiting for the workspace lock");if(lockErr instanceof WorkspaceLockTimeoutError){let failedStatus=create(AgentExecutionStatusSchema,{phase:ExecutionPhase.EXECUTION_FAILED,error:lockErr.message,completedAt:utcTimestamp(),messages:[create(AgentMessageSchema,{type:MessageType.MESSAGE_SYSTEM,content:`Execution failed: ${lockErr.message}`,timestamp:utcTimestamp()})]});return await persistStatus(client2,executionId,failedStatus,{offload:statusOffload}),slimStatus(failedStatus)}throw lockErr}if(setup.captureMode){let decidedSets=(setup.execution.status?.fileChangeSets??[]).filter(cs=>cs.status===FileChangeSetStatus.DECIDED),reconciledAny=!1,reconcileFailed=!1,reconcileFailureDetail="",casReadBlob=setup.artifactStorage?casBlobReader(setup.artifactStorage):void 0;for(let changeSet of decidedSets){let capResult=await applyCaptureDecisions({status:initialStatus,gitRoot,executionId,changeSet,harnessId:DEEP_AGENT_HARNESS_ID,storage:setup.artifactStorage,readBlob:casReadBlob,gitWorkspace:setup.gitWorkspace});capResult.isCaptureTurn&&(reconciledAny=!0,capResult.failed&&(reconcileFailed=!0,reconcileFailureDetail=capResult.failureDetail??"file review reconcile failed"))}if(reconciledAny){if(reconcileFailed)return initialStatus.phase=ExecutionPhase.EXECUTION_FAILED,initialStatus.error=`File review reconcile failed: ${reconcileFailureDetail}`,initialStatus.completedAt=utcTimestamp(),await persistStatus(client2,executionId,initialStatus,{offload:statusOffload}),slimStatus(initialStatus);if(!hasPendingToolApprovals(setup.execution)){initialStatus.phase=ExecutionPhase.EXECUTION_COMPLETED,initialStatus.completedAt=utcTimestamp(),writebackCoordinator&&await processCaptureWriteback(writebackCoordinator,executionId),await persistStatus(client2,executionId,initialStatus,{offload:statusOffload});let slim2=slimStatus(initialStatus),lastAi=[...initialStatus.messages].reverse().find(m=>m.type===MessageType.MESSAGE_AI);return lastAi?.content&&(slim2.final_text=lastAi.content),initialStatus.structuredOutput!==void 0&&(slim2.structured=initialStatus.structuredOutput),slim2}}}let captureBaselineTree="",priorSubAgentToolCallIds=collectSubAgentToolCallIds(initialStatus.subAgentExecutions),priorSettledToolCallIds=collectSettledToolCallIds(initialStatus.messages);setup.captureMode&&(captureBaselineTree=await captureBaselineToLedger({status:initialStatus,gitRoot,executionId,changeSetId,harnessId:DEEP_AGENT_HARNESS_ID,gitWorkspace:setup.gitWorkspace}));let progressState=newProgressCaptureState(),casObserver=setup.casObserver,readObserverTouched=()=>({before:new Map(casObserver.before),blockedSecretPaths:new Set(casObserver.blockedSecretPaths)}),progressSubstrate=setup.captureMode?setup.gitWorkspace?captureBaselineTree?createHybridProgressSubstrate(createGitProgressSubstrate({workspaceRoot:gitRoot,executionId,baselineTree:captureBaselineTree}),createCasProgressSubstrate({workspaceRoot:gitRoot,read:readObserverTouched})):void 0:createCasProgressSubstrate({workspaceRoot:gitRoot,read:readObserverTouched}):void 0,cancellationSignal=import_activity3.Context.current().cancellationSignal,result=await streamExecution({agentGraph:setup.agentGraph,langgraphInput:effectiveInput,langgraphConfig:setup.langgraphConfig,executionId,client:client2,initialStatus,streamingConfig,offload:statusOffload,gracefulStop:setup.gracefulStop,inlinePublisher,writebackCoordinator:setup.captureMode?void 0:writebackCoordinator??void 0,heartbeatFn:details=>import_activity3.Context.current().heartbeat(details),isCancelledFn:()=>cancellationSignal.aborted,approvalProvider:{policies:setup.approvalPolicies,toolServerMap:setup.toolServerMap,leasedCategories:setup.leasedCategories,globalBypass:setup.globalBypass},streamVersion:setup.streamVersion,beforePersist:async status=>{progressSubstrate&&await captureFileChangeProgress({status,changeSetId,substrate:progressSubstrate,state:progressState})}});await processPostStream({status:initialStatus,inlinePublisher,writebackCoordinator:setup.captureMode?null:writebackCoordinator,pendingPublishPromises:result.pendingPublishPromises,pendingWritebackPromises:result.pendingWritebackPromises,executionId}),withholdSecretContentFromMessages(initialStatus.messages,initialStatus.subAgentExecutions);let fileReviewPending=!1,abnormalTerminal=!!result.terminalStatus&&initialStatus.phase!==ExecutionPhase.EXECUTION_WAITING_FOR_APPROVAL;if(setup.captureMode&&!abnormalTerminal){let casCaptureClass=setup.gitWorkspace?FileCaptureClass.GIT_IGNORED_CAPTURED:FileCaptureClass.NON_GIT_CAS,{casCaptures,unreviewablePaths}=await buildCasTurnCaptures2(setup.casObserver,gitRoot,casCaptureClass),commandProvenance=deriveTurnCommandProvenance2({status:initialStatus,priorSettledToolCallIds,priorSubAgentToolCallIds,globalBypass:setup.globalBypass});commandProvenance&&console.log(`[ExecuteDeepAgent] capture: turn qualifies for approved-command auto-keep (consent rows: ${commandProvenance.consentToolCallIds.join(",")||"(auto_approve_all)"}); attaching provenance to candidate (execution=${executionId})`),await captureCandidateToLedger({status:initialStatus,gitRoot,executionId,changeSetId,baselineTree:captureBaselineTree,harnessId:DEEP_AGENT_HARNESS_ID,casCaptures,storage:setup.artifactStorage,unreviewablePaths,unreviewableCaptureClass:casCaptureClass,gitWorkspace:setup.gitWorkspace,commandProvenance}),fileReviewPending=hasCandidateCaptured(initialStatus,changeSetId),fileReviewPending&&(stampFlowedFileEditRows2(initialStatus.messages,changeSetId),stampFlowedSubAgentFileEditRows(initialStatus.subAgentExecutions,changeSetId,priorSubAgentToolCallIds))}if(result.terminalStatus){if(initialStatus.phase===ExecutionPhase.EXECUTION_PAUSED)throw await persistStatus(client2,executionId,initialStatus,{offload:statusOffload}),console.log(`[ExecuteDeepAgent] Paused for execution ${executionId}: events=${result.eventsProcessed}`),new import_activity3.CancelledFailure("Activity paused by orchestrator");return setup.captureMode&&!abnormalTerminal?(await persistStatus(client2,executionId,initialStatus,{offload:statusOffload}),slimStatus(initialStatus)):result.terminalStatus}if(!setup.globalBypass){let postStreamGraphState=await setup.agentGraph.getState(setup.langgraphConfig),graphMessages=postStreamGraphState.values.messages,aiMessages=Array.isArray(graphMessages)?graphMessages:[],pendingInterrupts=detectPendingInterrupts(postStreamGraphState);if(pendingInterrupts.length>0){console.log(`[ExecuteDeepAgent] Detected ${pendingInterrupts.length} pending interrupt(s) for execution ${executionId} \u2014 setting WAITING_FOR_APPROVAL`),initialStatus.phase=ExecutionPhase.EXECUTION_WAITING_FOR_APPROVAL;let aiMsg=create(AgentMessageSchema,{type:MessageType.MESSAGE_AI,content:"",timestamp:utcTimestamp(),isStreaming:!1});for(let intr of pendingInterrupts){let toolCall=create(ToolCallSchema,{id:intr.toolCallId,name:intr.toolName,status:ToolCallStatus.TOOL_CALL_WAITING_APPROVAL,requiresApproval:!0,approvalMessage:intr.message,approvalRequestedAt:utcTimestamp(),mcpServerSlug:intr.mcpServerSlug,startedAt:utcTimestamp(),toolKind:classifyTool(intr.toolName,intr.mcpServerSlug),approvalPolicySource:toProtoPolicySource(intr.policySource),policyEngineVersion:intr.policySource?POLICY_ENGINE_VERSION:""}),{argsPreview}=captureApprovalArtifacts({toolCallId:intr.toolCallId,messages:aiMessages});argsPreview&&(toolCall.argsPreview=argsPreview),aiMsg.toolCalls.push(toolCall)}return initialStatus.messages.push(aiMsg),await persistStatus(client2,executionId,initialStatus,{offload:statusOffload}),slimStatus(initialStatus)}}let completeNow=!fileReviewPending;initialStatus.phase=completeNow?ExecutionPhase.EXECUTION_COMPLETED:ExecutionPhase.EXECUTION_WAITING_FOR_APPROVAL,completeNow&&(initialStatus.completedAt=utcTimestamp());let structuredOutput,finalText,lastAiMsg=[...initialStatus.messages].reverse().find(m=>m.type===MessageType.MESSAGE_AI);if(lastAiMsg&&(finalText=lastAiMsg.content),setup.hasStructuredOutput){let sr=result.runOutput?.structuredResponse;if(sr!=null&&typeof sr=="object"&&!Array.isArray(sr)?structuredOutput=sr:sr!==void 0&&console.warn(`[ExecuteDeepAgent] structuredResponse is not a plain object for execution ${executionId}: type=${typeof sr}`),structuredOutput===void 0&&finalText){let{extractJsonFromText:extractJsonFromText2}=await Promise.resolve().then(()=>(init_extract_json(),extract_json_exports)),extracted=extractJsonFromText2(finalText);extracted!=null&&typeof extracted=="object"&&!Array.isArray(extracted)&&(structuredOutput=extracted,console.log(`[ExecuteDeepAgent] structured output extracted from final text for execution ${executionId}: finalTextLength=${finalText.length}`))}structuredOutput!==void 0&&(initialStatus.structuredOutput=structuredOutput)}if(setup.execution.spec?.executionConfig?.interactionMode===InteractionMode.PLAN&&finalText&&setup.artifactStorage&&await publishPlanArtifact({status:initialStatus,executionId,planText:finalText,artifactStorage:setup.artifactStorage}),setup.captureMode&&completeNow&&writebackCoordinator&&await processCaptureWriteback(writebackCoordinator,executionId),await persistStatus(client2,executionId,initialStatus,{offload:statusOffload}),console.log(`[ExecuteDeepAgent] ${completeNow?"Completed":"Awaiting file review for"} execution ${executionId}: events=${result.eventsProcessed}, messages=${initialStatus.messages.length}, artifacts=${initialStatus.artifacts.length}, writebacks=${initialStatus.workspaceWriteBacks.length}, hasStructuredOutput=${structuredOutput!==void 0}`),!completeNow)return slimStatus(initialStatus);let slim=slimStatus(initialStatus);return finalText!==void 0&&(slim.final_text=finalText),structuredOutput!==void 0&&(slim.structured=structuredOutput),slim}catch(err){if(err instanceof import_activity3.CancelledFailure){console.log(`[ExecuteDeepAgent] Cancelled (pause) for execution ${executionId}`);let pausedStatus=create(AgentExecutionStatusSchema,{phase:ExecutionPhase.EXECUTION_PAUSED});throw await persistStatus(client2,executionId,pausedStatus).catch(()=>{}),err}if(import_activity3.Context.current().cancellationSignal.aborted){console.log(`[ExecuteDeepAgent] Error during cancellation for ${executionId}, treating as pause: ${err}`);let pausedStatus=create(AgentExecutionStatusSchema,{phase:ExecutionPhase.EXECUTION_PAUSED});throw await persistStatus(client2,executionId,pausedStatus).catch(()=>{}),new import_activity3.CancelledFailure("Activity paused by orchestrator (error during cancellation)")}let errorMessage=err instanceof Error?err.message:String(err),errorType=err instanceof Error?err.constructor.name:"UnknownError";console.error(`[ExecuteDeepAgent] Failed for execution ${executionId}: [${errorType}] ${errorMessage}`);let failedStatus=create(AgentExecutionStatusSchema,{phase:ExecutionPhase.EXECUTION_FAILED,error:`Execution failed: [${errorType}] ${errorMessage}`,completedAt:utcTimestamp(),messages:[create(AgentMessageSchema,{type:MessageType.MESSAGE_SYSTEM,content:`Error: [${errorType}] ${errorMessage}`,timestamp:utcTimestamp()})]});return await persistStatus(client2,executionId,failedStatus),slimStatus(failedStatus)}finally{await cleanup(setup),await releaseWorkspaceLock?.(),activityFinished()}}}}function detectPendingInterrupts(graphState){return graphState.tasks?.flatMap(task2=>(task2.interrupts??[]).filter(intr=>intr.resumeValue===void 0).map(intr=>{let val=intr.value;return{toolCallId:val?.tool_call_id??"",toolName:val?.tool_name??"",mcpServerSlug:val?.mcp_server_slug??"",message:val?.message??"",policySource:val?.policy_source||void 0}}))??[]}function hasPendingToolApprovals(execution){let status=execution.status;if(!status)return!1;let anyWaiting=msgs=>msgs.some(m=>m.toolCalls.some(tc=>tc.status===ToolCallStatus.TOOL_CALL_WAITING_APPROVAL));return anyWaiting(status.messages)?!0:status.subAgentExecutions.some(sa=>anyWaiting(sa.messages))}async function buildCasTurnCaptures2(observer,workspaceRoot,captureClass){let{capturablePaths,unreviewablePaths}=partitionIgnoredPathsBySecret(observer.before.keys(),observer.blockedSecretPaths),casCaptures=[];for(let relPath of capturablePaths){let after=await readFileOrNull3((0,import_node_path32.join)(workspaceRoot,relPath));casCaptures.push({path:relPath,before:observer.before.get(relPath)??null,after,captureClass})}return{casCaptures,unreviewablePaths:[...unreviewablePaths]}}async function readFileOrNull3(absolutePath){try{return await(0,import_promises24.readFile)(absolutePath)}catch{return null}}async function processCaptureWriteback(writebackCoordinator,executionId){await writebackCoordinator.finalize(),console.log(`[ExecuteDeepAgent] capture writeback finalized for execution ${executionId}`)}function shouldSeedFromPersistedTranscript(execution){return(execution.status?.messages.length??0)>0}function seedStatusFromExecution(execution){let seeded=clone(AgentExecutionStatusSchema,execution.status);return seeded.completedAt="",seeded.error="",seeded}async function cleanup(setup){if(setup&&setup.mcpConnection)try{await setup.mcpConnection.client.close()}catch(err){console.warn("[ExecuteDeepAgent] MCP connection cleanup failed:",err)}}var import_promises24,import_node_path32,import_activity3,DEEP_AGENT_HARNESS_ID,init_execute_deep_agent=__esm({"dist/activities/execute-deep-agent/index.js"(){"use strict";import_promises24=require("node:fs/promises"),import_node_path32=require("node:path"),import_activity3=__toESM(require_lib4(),1);init_esm4();init_api_pb3();init_message_pb();init_enum_pb();init_idle_watchdog();init_activity_input();init_status2();init_workspace_lock();init_plan_artifact();init_tool_kind();init_approval_policy();init_stigmer_client();init_setup();init_streaming5();init_streaming_scheduler();init_status_builder();init_inline_publisher();init_writeback_coordinator();init_post_stream();init_hitl2();init_approval_file_change();init_capture();init_progress();init_cas_progress();init_events();init_cas_substrate();init_secret_paths();init_tool_row();init_stamp_flowed_rows();init_command_provenance3();DEEP_AGENT_HARNESS_ID="deep-agent"}});var ensure_thread_exports={};__export(ensure_thread_exports,{createEnsureThreadActivities:()=>createEnsureThreadActivities});function createEnsureThreadActivities(){return{EnsureThread:async(sessionId,agentId)=>{activityStarted();try{if(sessionId){let threadId2=`thread-${sessionId}`;return console.log(`[EnsureThread] Session-based thread: ${threadId2}`),threadId2}let threadId=`ephemeral-${agentId}-${(0,import_node_crypto16.randomUUID)().replace(/-/g,"").slice(0,8)}`;return console.log(`[EnsureThread] Ephemeral thread: ${threadId}`),threadId}finally{activityFinished()}}}}var import_node_crypto16,init_ensure_thread=__esm({"dist/activities/ensure-thread.js"(){"use strict";import_node_crypto16=require("node:crypto");init_idle_watchdog()}});var classify_tool_approvals_exports={};__export(classify_tool_approvals_exports,{buildToolsPayload:()=>buildToolsPayload,classifyTools:()=>classifyTools,createClassifyToolApprovalsActivities:()=>createClassifyToolApprovalsActivities,fallbackApprovals:()=>fallbackApprovals,reconcileBatchClassifications:()=>reconcileBatchClassifications});async function classifyTools(input,options){let{tools:tools3,serverName,serverDescription,mcpServerId}=input;if(tools3.length===0)return[];let model=await getSummarizationModel(options.primaryModel),batches=[];for(let i2=0;i2<tools3.length;i2+=BATCH_SIZE)batches.push(tools3.slice(i2,i2+BATCH_SIZE));console.log(`[ClassifyToolApprovals] Classifying ${tools3.length} tools for '${serverName}' using model '${model}' (${batches.length} batch(es) of up to ${BATCH_SIZE})`);let allApprovals=[];for(let batchIdx=0;batchIdx<batches.length;batchIdx++){let batch=batches[batchIdx];try{let batchResult=await classifyBatch({batch,serverName,serverDescription,model,proxyEndpoint:options.proxyEndpoint,stigmerToken:options.stigmerToken,mcpServerId:mcpServerId??null,batchIdx,totalBatches:batches.length}),{reconciled,failedClosedCount}=reconcileBatchClassifications(batch,batchResult);failedClosedCount>0&&console.warn(`[ClassifyToolApprovals] Batch ${batchIdx+1}/${batches.length} for '${serverName}': ${failedClosedCount} tool(s) missing from classifier output \u2014 failing closed (requires_approval=true)`),allApprovals.push(...reconciled)}catch(err){console.error(`[ClassifyToolApprovals] Batch ${batchIdx+1}/${batches.length} failed for '${serverName}' (${batch.length} tools) \u2014 falling back to requires_approval=true`,err),allApprovals.push(...fallbackApprovals(batch))}}let approved=allApprovals.filter(a=>a.requires_approval);return console.log(`[ClassifyToolApprovals] Classification complete for '${serverName}': ${approved.length}/${allApprovals.length} tools require approval`),approved}async function classifyBatch(params){let{batch,serverName,serverDescription,model,proxyEndpoint,stigmerToken,mcpServerId,batchIdx,totalBatches}=params,maxTokens=Math.max(MIN_MAX_TOKENS,batch.length*MAX_TOKENS_PER_TOOL),{model:llm}=await buildChatModel({modelName:model,proxyEndpoint,stigmerToken:stigmerToken??void 0,headerScope:{mcpServerId:mcpServerId??void 0},maxTokens}),structuredLlm=llm.withStructuredOutput(ClassifyToolApprovalsOutputSchema),toolsPayload=buildToolsPayload(batch),userPrompt=`MCP Server: ${serverName}
|
|
2293
|
+
IMPORTANT: When your analysis is complete, provide your findings as structured output matching the required schema. The system will capture your structured response automatically.`);let langgraphInput={messages:[{role:"user",content:userMessage}]},langgraphConfig={configurable:{thread_id:threadId}},streamVersion=process.env.LANGGRAPH_STREAM_EVENTS_VERSION==="v2"?"v2":"v3";return console.log(`[setup] Complete: model=${modelName}, tools=${tools3.length}, middleware=${middleware.length}, thread_id=${threadId}, streamVersion=${streamVersion}`),{agentGraph,langgraphConfig,langgraphInput,execution,agent,session,workspaceBackend,mcpConnection,mergedEnvVars:envResult.mergedEnvVars,secretKeys:envResult.secretKeys,modelName,gracefulStop,artifactStorage,provisionResults,approvalPolicies,toolServerMap,leasedCategories:leases.categories,globalBypass,hasStructuredOutput:!!outputSchema,streamVersion,casObserver,captureMode,gitWorkspace}}catch(err){if(mcpConnection)try{await mcpConnection.client.close()}catch{}throw err}}async function provisionWorkspace(config4,session,mergedEnvVars,sessionId){let platformDir=await ensurePlatformDir(sessionId),workspaceEntries=session.spec.workspaceEntries||[];if(workspaceEntries.length===0){let sessionRoot=await resolveSessionWorkspaceRoot(config4.workspaceRootDir,workspaceEntries,sessionId);return{workspaceBackend:new LocalWorkspaceBackend(sessionRoot,platformDir),provisionResults:[]}}let workspaceBackend=new LocalWorkspaceBackend(config4.workspaceRootDir,platformDir),provisionResults=await new WorkspaceProvisioner().provisionAll(workspaceEntries.map(entry=>({name:entry.name,source:entry.source})),workspaceBackend,mergedEnvVars,config4.mode==="local",config4.mode!=="local");return provisionResults.length===1&&provisionResults[0].rootDir!==workspaceBackend.rootDir?{workspaceBackend:new LocalWorkspaceBackend(provisionResults[0].rootDir,platformDir),provisionResults}:{workspaceBackend,provisionResults}}function _modelHasNativeThinking(modelId){let lower=modelId.toLowerCase();return lower.includes("haiku")||lower.includes("gpt-4o-mini")?!1:!!(lower.includes("claude")&&(lower.includes("sonnet")||lower.includes("opus"))||lower.includes("o1")||lower.includes("o3")||lower.includes("o4"))}var init_setup=__esm({"dist/activities/execute-deep-agent/setup.js"(){"use strict";init_dist8();init_enum_pb();init_factory();init_mcp_manager();init_mcp_resolver2();init_connect_backfill();init_provisioner();init_local_backend();init_cas_capture_backend();init_cas_capture_observer();init_git_substrate();init_capture();init_file_change();init_platform_dir();init_session_root();init_status2();init_environment();init_prompt_builder2();init_middleware4();init_approval_fingerprint();init_fingerprint_secret();init_model_pricing2();init_model_registry();init_model_client();init_artifact_storage();init_approval_policy();init_skill_writer();init_skill_relevance();init_attachment_injector();init_subagent_transformer();init_json_schema_to_zod()}});var ExecutionState,init_execution_state=__esm({"dist/activities/execute-deep-agent/execution-state.js"(){"use strict";ExecutionState=class{proto;toolCalls=new Map;messagesByRun=new Map;currentAiMessage=new Map;lastLlmRunId=new Map;toolStartTimes=new Map;constructor(proto){this.proto=proto}resetEphemeralState(){this.messagesByRun.clear(),this.currentAiMessage.clear(),this.lastLlmRunId.clear(),this.toolStartTimes.clear()}rebuildToolCallIndex(){this.toolCalls.clear();for(let message of this.proto.messages)for(let tc of message.toolCalls)tc.id&&this.toolCalls.set(tc.id,tc)}}}});function toBigInt(value){return typeof value=="bigint"?value:typeof value=="number"&&Number.isFinite(value)?BigInt(Math.floor(value)):0n}function serializeToolContent(content){if(typeof content=="string")return content;if(Array.isArray(content))return JSON.stringify(content)}function extractToolResult(data){let output=data.output;if(typeof output=="string")return output;if(typeof output=="object"&&output!==null){let fromContent=serializeToolContent(output.content);if(fromContent!==void 0)return fromContent}try{return JSON.stringify(output??data)}catch{return"[serialization error]"}}function extractToolResultV3(output){if(typeof output=="string")return output;if(typeof output=="object"&&output!==null){let obj=output,kwargs=obj.kwargs;if(kwargs){let fromKwargs=serializeToolContent(kwargs.content);if(fromKwargs!==void 0)return fromKwargs}let fromContent=serializeToolContent(obj.content);if(fromContent!==void 0)return fromContent}try{return JSON.stringify(output)}catch{return"[serialization error]"}}function stampApprovalProvenance(tc,provider){if(!provider)return;let serverSlug=tc.mcpServerSlug||provider.toolServerMap.get(tc.name)||"",source=resolveApprovalProvenance(tc.name,serverSlug,provider.policies,provider.leasedCategories??NO_LEASED_CATEGORIES2,provider.globalBypass);tc.approvalPolicySource=toProtoPolicySource(source),source&&(tc.policyEngineVersion=POLICY_ENGINE_VERSION)}var UsageAccumulator2,NO_LEASED_CATEGORIES2,init_status_builder_shared=__esm({"dist/activities/execute-deep-agent/status-builder-shared.js"(){"use strict";init_esm4();init_usage_pb();init_status2();init_approval_policy();init_args_preview();UsageAccumulator2=class{inputTokens=0n;outputTokens=0n;cacheReadTokens=0n;cacheWriteTokens=0n;turnCount=0;lastObservedAt="";accumulate(meta3){this.inputTokens+=toBigInt(meta3.input_tokens),this.outputTokens+=toBigInt(meta3.output_tokens),this.cacheReadTokens+=toBigInt(meta3.cache_read_input_tokens),this.cacheWriteTokens+=toBigInt(meta3.cache_creation_input_tokens),this.turnCount++,this.lastObservedAt=utcTimestamp()}snapshot(){return{inputTokens:this.inputTokens,outputTokens:this.outputTokens,cacheReadTokens:this.cacheReadTokens,cacheWriteTokens:this.cacheWriteTokens,totalTokens:this.inputTokens+this.outputTokens+this.cacheReadTokens+this.cacheWriteTokens,turnCount:this.turnCount,observedAt:this.lastObservedAt}}toProto(){return create(StreamingUsageSummarySchema,this.snapshot())}};NO_LEASED_CATEGORIES2=new Set}});var StatusBuilder,init_status_builder=__esm({"dist/activities/execute-deep-agent/status-builder.js"(){"use strict";init_esm4();init_message_pb();init_enum_pb();init_approval_policy();init_tool_kind();init_todos();init_execution_state();init_status2();init_status_builder_shared();StatusBuilder=class{executionId;state;_forceNextUpdate=!1;approvalProvider=null;usageAccumulator;handlers;constructor(executionId,initialStatus){this.executionId=executionId,this.state=new ExecutionState(initialStatus),initialStatus.messages.length>0&&this.state.rebuildToolCallIndex(),initialStatus.phase=ExecutionPhase.EXECUTION_IN_PROGRESS,initialStatus.startedAt||(initialStatus.startedAt=utcTimestamp()),this.usageAccumulator=new UsageAccumulator2,this.handlers=new Map([["on_chat_model_stream",this.handleChatModelStream.bind(this)],["on_chat_model_end",this.handleChatModelEnd.bind(this)],["on_tool_start",this.handleToolStart.bind(this)],["on_tool_end",this.handleToolEnd.bind(this)]])}setApprovalProvider(provider){this.approvalProvider=provider}get currentStatus(){return this.state.proto}get forceNextUpdate(){return this._forceNextUpdate}clearForceFlag(){this._forceNextUpdate=!1}processEvent(event){let namespace=this.extractNamespace(event),handler=this.handlers.get(event.event);if(handler)try{handler(event,namespace)}catch(err){console.error(`[StatusBuilder] Event handler error: execution=${this.executionId} event=${event.event} run_id=${event.run_id}: ${err}`)}}addArtifact(artifact){let artifacts=this.state.proto.artifacts,idx=artifacts.findIndex(a=>a.sandboxPath===artifact.sandboxPath);if(idx>=0){artifacts[idx].contentHash!==artifact.contentHash&&(artifacts[idx]=artifact,this._forceNextUpdate=!0);return}artifacts.push(artifact),this._forceNextUpdate=!0}addWriteBack(wb){let backs=this.state.proto.workspaceWriteBacks,idx=backs.findIndex(b=>b.workspaceEntryName===wb.workspaceEntryName);idx>=0?backs[idx]=wb:backs.push(wb),this._forceNextUpdate=!0}handleChatModelStream(event,namespace){let chunk=event.data?.chunk;if(!chunk)return;let content=chunk.content;if(Array.isArray(content)){for(let block of content)if(typeof block=="object"&&block!==null){let b=block;b.type==="thinking"&&typeof b.thinking=="string"?this.appendThinkingContent(event.run_id,namespace,b.thinking):b.type==="text"&&typeof b.text=="string"&&this.appendTextContent(event.run_id,namespace,b.text)}}else typeof content=="string"&&content.length>0&&this.appendTextContent(event.run_id,namespace,content)}handleChatModelEnd(event,namespace){let output=event.data?.output,msg=this.state.messagesByRun.get(event.run_id);msg&&(msg.isStreaming=!1);let usageMeta=output?.usage_metadata??event.data?.usage_metadata;usageMeta&&(this.usageAccumulator.accumulate(usageMeta),this.syncUsageToProto())}handleToolStart(event,namespace){let toolName=event.name??"unknown_tool",seeded=this.findResumableSeededToolCall(toolName);if(seeded){seeded.status=ToolCallStatus.TOOL_CALL_RUNNING,this.state.toolCalls.set(event.run_id,seeded),this.state.toolStartTimes.set(event.run_id,performance.now()),this._forceNextUpdate=!0;return}let parentMsg=this.state.currentAiMessage.get(namespace)??this.ensureAiMessageForToolCall(event.run_id,namespace);if(!parentMsg)return;let rawArgs=event.data?.input,args=rawArgs??{},approvalReq=this.checkApprovalRequirement(toolName,args),tc=create(ToolCallSchema,{id:event.run_id,name:toolName,status:approvalReq.requiresApproval?ToolCallStatus.TOOL_CALL_WAITING_APPROVAL:ToolCallStatus.TOOL_CALL_RUNNING,startedAt:utcTimestamp()});if(rawArgs&&(tc.args=rawArgs),approvalReq.serverSlug&&(tc.mcpServerSlug=approvalReq.serverSlug),tc.toolKind=classifyTool(tc.name,tc.mcpServerSlug),stampApprovalProvenance(tc,this.approvalProvider),approvalReq.requiresApproval){tc.requiresApproval=!0,tc.approvalMessage=approvalReq.message,tc.approvalRequestedAt=utcTimestamp();let argsPreview=sanitizeArgsPreview(args);argsPreview&&(tc.argsPreview=argsPreview),this.state.proto.phase=ExecutionPhase.EXECUTION_WAITING_FOR_APPROVAL}parentMsg.toolCalls.push(tc),this.state.toolCalls.set(event.run_id,tc),this.state.toolStartTimes.set(event.run_id,performance.now()),this._forceNextUpdate=!0}findResumableSeededToolCall(toolName){for(let tc of this.state.toolCalls.values())if(tc.name===toolName&&tc.status===ToolCallStatus.TOOL_CALL_WAITING_APPROVAL)return tc}checkApprovalRequirement(toolName,args){if(!this.approvalProvider)return{requiresApproval:!1,message:"",serverSlug:""};let serverSlug=this.approvalProvider.toolServerMap.get(toolName)??"";if(this.approvalProvider.globalBypass)return{requiresApproval:!1,message:"",serverSlug};if(serverSlug){let key=`${serverSlug}/${toolName}`,policy=this.approvalProvider.policies.get(key);return policy?.requiresApproval?{requiresApproval:!0,message:resolveApprovalMessage(policy.approvalMessage,toolName,args),serverSlug}:{requiresApproval:!1,message:"",serverSlug}}return{requiresApproval:!1,message:"",serverSlug:""}}handleToolEnd(event,_namespace){let tc=this.state.toolCalls.get(event.run_id);if(!tc)return;let errorMsg=event.data?.output?.error;errorMsg?(tc.status=ToolCallStatus.TOOL_CALL_FAILED,tc.error=errorMsg):(tc.status=ToolCallStatus.TOOL_CALL_COMPLETED,tc.result=extractToolResult(event.data),tc.toolKind===ToolKind.TODO&&applyTodoUpdate(this.state.proto.todos,tc.args?.todos,{merge:!1})),tc.completedAt=utcTimestamp(),tc.isStreaming=!1,this.state.toolStartTimes.delete(event.run_id),this._forceNextUpdate=!0}appendTextContent(runId,namespace,text){let msg=this.ensureAiMessage(runId,namespace,MessageType.MESSAGE_AI);msg.content+=text,msg.isStreaming=!0}appendThinkingContent(runId,namespace,text){let thinkingKey=`thinking:${namespace}`,existingMsg=this.state.messagesByRun.get(thinkingKey);if(existingMsg&&existingMsg.type===MessageType.MESSAGE_THINKING){existingMsg.content+=text,existingMsg.isStreaming=!0;return}let msg=create(AgentMessageSchema,{type:MessageType.MESSAGE_THINKING,content:text,timestamp:utcTimestamp(),isStreaming:!0});this.state.proto.messages.push(msg),this.state.messagesByRun.set(thinkingKey,msg)}ensureAiMessage(runId,namespace,type3){let existingByRun=this.state.messagesByRun.get(runId);if(existingByRun)return existingByRun;let lastRunId=this.state.lastLlmRunId.get(namespace);if(lastRunId&&lastRunId!==runId){let existingMsg=this.state.currentAiMessage.get(namespace);existingMsg&&(existingMsg.isStreaming=!1)}let msg=create(AgentMessageSchema,{type:type3,content:"",timestamp:utcTimestamp(),isStreaming:!0});return this.state.proto.messages.push(msg),this.state.messagesByRun.set(runId,msg),this.state.currentAiMessage.set(namespace,msg),this.state.lastLlmRunId.set(namespace,runId),msg}ensureAiMessageForToolCall(_toolRunId,namespace){let lastRunId=this.state.lastLlmRunId.get(namespace);if(lastRunId){let existing=this.state.messagesByRun.get(lastRunId);if(existing)return this.state.currentAiMessage.set(namespace,existing),existing}let msg=create(AgentMessageSchema,{type:MessageType.MESSAGE_AI,content:"",timestamp:utcTimestamp(),isStreaming:!1});return this.state.proto.messages.push(msg),this.state.currentAiMessage.set(namespace,msg),msg}extractNamespace(event){let meta3=event.metadata;if(!meta3)return"";let ns3=meta3.langgraph_checkpoint_ns??meta3.checkpoint_ns??"";return typeof ns3=="string"?ns3:""}syncUsageToProto(){this.state.proto.streamingUsage=this.usageAccumulator.toProto()}}}});function handlePause(writer2,eventsProcessed,pendingPublishPromises,pendingWritebackPromises){let status=writer2.currentStatus;return status.phase=ExecutionPhase.EXECUTION_PAUSED,status.messages.push(create(AgentMessageSchema,{type:MessageType.MESSAGE_SYSTEM,content:"Execution paused by user. Use resume to continue from this checkpoint.",timestamp:utcTimestamp()})),{eventsProcessed,terminalStatus:slimStatus(status),pendingPublishPromises,pendingWritebackPromises}}function handleStop(writer2,eventsProcessed,pendingPublishPromises,pendingWritebackPromises){let status=writer2.currentStatus;return status.phase=ExecutionPhase.EXECUTION_COMPLETED,status.completedAt=utcTimestamp(),status.messages.push(create(AgentMessageSchema,{type:MessageType.MESSAGE_SYSTEM,content:"Execution stopped by the platform.",timestamp:utcTimestamp()})),{eventsProcessed,terminalStatus:slimStatus(status),pendingPublishPromises,pendingWritebackPromises}}function handleRecursionLimit(writer2,eventsProcessed,pendingPublishPromises,pendingWritebackPromises){let status=writer2.currentStatus;return status.phase=ExecutionPhase.EXECUTION_TERMINATED,status.completedAt=utcTimestamp(),status.error=`Agent reached the tool-call limit after processing ${eventsProcessed} events. Send another message to continue.`,status.messages.push(create(AgentMessageSchema,{type:MessageType.MESSAGE_SYSTEM,content:"The agent reached the tool-call limit for this message. Work completed so far has been saved. Send another message to continue where the agent left off.",timestamp:utcTimestamp()})),{eventsProcessed,terminalStatus:slimStatus(status),pendingPublishPromises,pendingWritebackPromises}}function isGraphRecursionError(err){return err instanceof Error?err.constructor.name==="GraphRecursionError"||err.message.includes("GraphRecursionError")||err.message.includes("Recursion limit"):!1}var init_streaming_terminal=__esm({"dist/activities/execute-deep-agent/streaming-terminal.js"(){"use strict";init_esm4();init_message_pb();init_enum_pb();init_status2()}});function createV2EventRecorder(executionId,recordDir){if(recordDir)return new FileV2EventRecorder(executionId,recordDir)}function safeClone2(obj){try{return JSON.parse(JSON.stringify(obj,bigintReplacer))}catch{return{_serializationError:!0,keys:Object.keys(obj)}}}function bigintReplacer(_key,value){return typeof value=="bigint"?value.toString():value}var import_promises22,import_node_path29,FileV2EventRecorder,init_event_recorder=__esm({"dist/activities/execute-deep-agent/event-recorder.js"(){"use strict";import_promises22=require("node:fs/promises"),import_node_path29=require("node:path");FileV2EventRecorder=class{executionId;outputDir;events=[];constructor(executionId,outputDir){this.executionId=executionId,this.outputDir=outputDir}record(event,seq2){this.events.push({seq:seq2,timestamp:new Date().toISOString(),event:event.event,name:event.name,run_id:event.run_id,data:safeClone2(event.data),metadata:event.metadata?safeClone2(event.metadata):void 0})}async flush(){if(this.events.length===0)return;await(0,import_promises22.mkdir)(this.outputDir,{recursive:!0});let filePath=(0,import_node_path29.join)(this.outputDir,`${this.executionId}.v2-events.json`),payload={executionId:this.executionId,recordedAt:new Date().toISOString(),eventCount:this.events.length,events:this.events};await(0,import_promises22.writeFile)(filePath,JSON.stringify(payload,bigintReplacer,2))}}}});function createV3EventRecorder(executionId,recordDir){if(recordDir)return new FileV3EventRecorder(executionId,recordDir)}function safeClone3(obj){try{return JSON.parse(JSON.stringify(obj,bigintReplacer2))}catch{return obj&&typeof obj=="object"?{_serializationError:!0,keys:Object.keys(obj)}:{_serializationError:!0}}}function bigintReplacer2(_key,value){return typeof value=="bigint"?value.toString():value}var import_promises23,import_node_path30,FileV3EventRecorder,init_v3_event_recorder=__esm({"dist/activities/execute-deep-agent/v3-event-recorder.js"(){"use strict";import_promises23=require("node:fs/promises"),import_node_path30=require("node:path");FileV3EventRecorder=class{executionId;outputDir;events=[];constructor(executionId,outputDir){this.executionId=executionId,this.outputDir=outputDir}record(event,seq2){this.events.push({seq:seq2,capturedAt:new Date().toISOString(),type:event.type,method:event.method,namespace:event.params.namespace,timestamp:event.params.timestamp,node:event.params.node,data:safeClone3(event.params.data)})}async flush(){if(this.events.length===0)return;await(0,import_promises23.mkdir)(this.outputDir,{recursive:!0});let filePath=(0,import_node_path30.join)(this.outputDir,`${this.executionId}.v3-events.json`),payload={executionId:this.executionId,recordedAt:new Date().toISOString(),eventCount:this.events.length,events:this.events};await(0,import_promises23.writeFile)(filePath,JSON.stringify(payload,bigintReplacer2,2))}}}});function formatNamespace(ns3){return ns3.length===0?"":ns3.join("|")}function namespaceDepth(namespace){if(!namespace)return 0;let count=1;for(let i2=0;i2<namespace.length;i2++)namespace[i2]==="|"&&count++;return count}var init_v3_events=__esm({"dist/activities/execute-deep-agent/v3-events.js"(){"use strict"}});function normalize3(event){switch(event.method){case"messages":return normalizeMessage(event);case"tools":return normalizeTool(event);case"lifecycle":return normalizeLifecycle(event);default:return[]}}function normalizeMessage(event){let data=event.params.data;if(!data)return[];let eventType=readEventType(data),base={seq:event.seq,namespace:formatNamespace(event.params.namespace),node:event.params.node},runId=data.run_id??"";switch(eventType){case"message-start":return[{kind:"message_start",...base,runId,messageId:data.id}];case"content-block-delta":return normalizeContentBlockDelta(event,data,base,runId);case"message-finish":return[{kind:"message_finish",...base,runId,usage:normalizeUsagePayload(data.usage),reason:data.reason}];case"usage":return[{kind:"usage",...base,runId,usage:normalizeUsagePayload(data.usage)}];case"provider":return[{kind:"provider",...base,provider:data.provider??"",model:extractModel(data)}];case"content-block-start":case"content-block-finish":return[];default:return logUnknown("messages",eventType),[]}}function normalizeContentBlockDelta(event,data,base,runId){let delta=data.delta;if(!delta)return[];let deltaType=delta.type;if(deltaType==="text-delta"){let text=delta.text??"";return text?[{kind:"text_delta",...base,runId,text}]:[]}if(deltaType==="reasoning-delta"){let text=delta.reasoning??"";return text?[{kind:"reasoning_delta",...base,runId,text}]:[]}if(deltaType==="block-delta"){let fields=delta.fields;if(!fields)return[];if(fields.type==="tool_call_chunk"){let callId=fields.id??"",argsChunk=fields.args??"";return!argsChunk&&!callId?[]:[{kind:"tool_call_arg_delta",...base,callId,argsChunk}]}}return[]}function normalizeTool(event){let data=event.params.data;if(!data)return[];let eventType=readEventType(data),base={seq:event.seq,namespace:formatNamespace(event.params.namespace),node:event.params.node};switch(eventType){case"tool-started":{let callId=readToolCallId(data),name2=readToolName(data),input=parseToolInput(data.input);return[{kind:"tool_started",...base,callId,name:name2,input}]}case"tool-finished":{let callId=readToolCallId(data);return[{kind:"tool_finished",...base,callId,output:data.output}]}case"tool-error":{let callId=readToolCallId(data),message=data.message??data.error??"";return[{kind:"tool_error",...base,callId,message}]}case"tool-output-delta":{let callId=readToolCallId(data),delta=data.delta??"";return[{kind:"tool_output_delta",...base,callId,delta:String(delta)}]}default:return logUnknown("tools",eventType),[]}}function normalizeLifecycle(event){let data=event.params.data;return data?[{kind:"lifecycle",seq:event.seq,namespace:formatNamespace(event.params.namespace),node:event.params.node,event:readEventType(data),graphName:data.graph_name??data.graphName}]:[]}function readEventType(data){return data.event??data.type??""}function readToolCallId(data){return data.tool_call_id??data.toolCallId??""}function readToolName(data){return data.tool_name??data.toolName??data.name??"unknown_tool"}function parseToolInput(raw){if(raw==null)return{};if(typeof raw=="object"&&!Array.isArray(raw))return raw;if(typeof raw=="string")try{return JSON.parse(raw)}catch{return{}}return{}}function normalizeUsagePayload(raw){if(!raw)return;let details=raw.input_token_details;return{input_tokens:raw.input_tokens,output_tokens:raw.output_tokens,total_tokens:raw.total_tokens,input_token_details:details?{cache_creation:details.cache_creation,cache_read:details.cache_read}:void 0}}function extractModel(data){return data.payload?.model}function logUnknown(method,eventType){let key=`${method}:${eventType}`;loggedUnknowns.has(key)||(loggedUnknowns.add(key),console.debug(`[V3Normalizer] Unknown event: method=${method} event=${eventType}`))}var loggedUnknowns,init_v3_protocol_normalizer=__esm({"dist/activities/execute-deep-agent/v3-protocol-normalizer.js"(){"use strict";init_v3_events();loggedUnknowns=new Set}});function extractFirstSegment(namespace){let pipeIdx=namespace.indexOf("|");return pipeIdx===-1?namespace:namespace.slice(0,pipeIdx)}function stripFirstSegment(namespace){let pipeIdx=namespace.indexOf("|");return pipeIdx===-1?"":namespace.slice(pipeIdx+1)}function safeString2(obj,key){let val=obj[key];return typeof val=="string"?val:""}var SubAgentTracker,init_subagent_tracker=__esm({"dist/activities/execute-deep-agent/subagent-tracker.js"(){"use strict";init_esm4();init_subagent_pb();init_message_pb();init_enum_pb();init_status2();init_tool_kind();init_status_builder_shared();SubAgentTracker=class{executions=[];stateByCallId=new Map;stateByPrefix=new Map;onTaskToolStarted(callId,args,routingPrefix){if(this.stateByCallId.has(callId))return;let name2=safeString2(args,"subagent_type")||"task",description2=safeString2(args,"description")||"",proto=create(SubAgentExecutionSchema,{id:callId,name:name2,subject:description2,input:description2,status:SubAgentStatus.SUB_AGENT_IN_PROGRESS,startedAt:utcTimestamp()}),state={proto,callId,namespacePrefix:routingPrefix,messagesByRun:new Map,currentAiMessage:new Map,lastLlmRunId:new Map,toolCalls:new Map,toolArgBuffers:new Map};this.executions.push(proto),this.stateByCallId.set(callId,state),this.stateByPrefix.set(routingPrefix,state)}onTaskToolFinished(callId,output){let state=this.stateByCallId.get(callId);state&&(state.proto.status=SubAgentStatus.SUB_AGENT_COMPLETED,state.proto.completedAt=utcTimestamp(),state.proto.output=extractToolResultV3(output),this.finalizeStreamingMessages(state))}onTaskToolError(callId,errorMessage){let state=this.stateByCallId.get(callId);state&&(state.proto.status=SubAgentStatus.SUB_AGENT_FAILED,state.proto.completedAt=utcTimestamp(),state.proto.error=errorMessage,this.finalizeStreamingMessages(state))}cancelAll(){for(let state of this.stateByCallId.values())state.proto.status===SubAgentStatus.SUB_AGENT_IN_PROGRESS&&(state.proto.status=SubAgentStatus.SUB_AGENT_CANCELLED,state.proto.completedAt=utcTimestamp(),state.proto.error="Cancelled: parent execution was cancelled",this.finalizeStreamingMessages(state))}isSubAgentNamespace(namespace){if(!namespace||!namespace.includes("|"))return!1;let firstSegment=extractFirstSegment(namespace);return this.stateByPrefix.has(firstSegment)}routeEvent(event){let firstSegment=extractFirstSegment(event.namespace),state=this.stateByPrefix.get(firstSegment);if(!state)return;let localNs=this.resolveAgentNamespace(stripFirstSegment(event.namespace));switch(event.kind){case"message_start":this.handleMessageStart(state,event.runId,localNs);break;case"text_delta":this.handleTextDelta(state,event.runId,localNs,event.text);break;case"reasoning_delta":this.handleReasoningDelta(state,event.runId,localNs,event.text);break;case"tool_call_arg_delta":this.handleToolCallArgDelta(state,event.callId,event.argsChunk);break;case"message_finish":this.handleMessageFinish(state,event.runId,event.usage);break;case"tool_started":this.handleToolStarted(state,event.callId,event.name,event.input,localNs);break;case"tool_finished":this.handleToolFinished(state,event.callId,event.output);break;case"tool_error":this.handleToolError(state,event.callId,event.message);break;case"tool_output_delta":this.handleToolOutputDelta(state,event.callId,event.delta);break;case"usage":case"lifecycle":case"provider":break}}getExecutions(){return this.executions}hasExecutions(){return this.executions.length>0}handleMessageStart(state,runId,localNs){let lastRunId=state.lastLlmRunId.get(localNs);if(lastRunId&&lastRunId!==runId){let existingMsg=state.currentAiMessage.get(localNs);existingMsg&&(existingMsg.isStreaming=!1)}state.lastLlmRunId.set(localNs,runId)}handleTextDelta(state,runId,localNs,text){let msg=this.ensureAiMessage(state,runId,localNs,MessageType.MESSAGE_AI);msg.content+=text,msg.isStreaming=!0}handleReasoningDelta(state,runId,localNs,text){let thinkingKey=`thinking:${localNs}`,existing=state.messagesByRun.get(thinkingKey);if(existing&&existing.type===MessageType.MESSAGE_THINKING){existing.content+=text,existing.isStreaming=!0;return}let msg=create(AgentMessageSchema,{type:MessageType.MESSAGE_THINKING,content:text,timestamp:utcTimestamp(),isStreaming:!0});state.proto.messages.push(msg),state.messagesByRun.set(thinkingKey,msg)}handleMessageFinish(state,runId,usage){let msg=state.messagesByRun.get(runId);msg&&(msg.isStreaming=!1)}handleToolStarted(state,callId,name2,input,localNs){let agentNs=this.resolveAgentNamespace(localNs),parentMsg=state.currentAiMessage.get(agentNs)??this.ensureAiMessageForToolCall(state,agentNs);if(!parentMsg)return;let tc=create(ToolCallSchema,{id:callId,name:name2,status:ToolCallStatus.TOOL_CALL_RUNNING,startedAt:utcTimestamp(),toolKind:classifyTool(name2)});Object.keys(input).length>0&&(tc.args=input),parentMsg.toolCalls.push(tc),state.toolCalls.set(callId,tc)}handleToolFinished(state,callId,output){let tc=state.toolCalls.get(callId);tc&&(tc.status=ToolCallStatus.TOOL_CALL_COMPLETED,tc.result=extractToolResultV3(output),tc.completedAt=utcTimestamp(),tc.isStreaming=!1,state.toolArgBuffers.delete(callId))}handleToolError(state,callId,message){let tc=state.toolCalls.get(callId);tc&&(tc.status=ToolCallStatus.TOOL_CALL_FAILED,tc.error=message,tc.completedAt=utcTimestamp(),tc.isStreaming=!1,state.toolArgBuffers.delete(callId))}handleToolCallArgDelta(state,callId,argsChunk){let tc=state.toolCalls.get(callId);if(!tc)return;let buffer=(state.toolArgBuffers.get(callId)??"")+argsChunk;state.toolArgBuffers.set(callId,buffer);try{tc.args=JSON.parse(buffer)}catch{}}handleToolOutputDelta(state,callId,delta){let tc=state.toolCalls.get(callId);tc&&(tc.result=(tc.result??"")+delta)}ensureAiMessage(state,runId,localNs,type3){let existing=state.messagesByRun.get(runId);if(existing)return existing;let lastRunId=state.lastLlmRunId.get(localNs);if(lastRunId&&lastRunId!==runId){let prev=state.currentAiMessage.get(localNs);prev&&(prev.isStreaming=!1)}let msg=create(AgentMessageSchema,{type:type3,content:"",timestamp:utcTimestamp(),isStreaming:!0});return state.proto.messages.push(msg),state.messagesByRun.set(runId,msg),state.currentAiMessage.set(localNs,msg),state.lastLlmRunId.set(localNs,runId),msg}ensureAiMessageForToolCall(state,localNs){let lastRunId=state.lastLlmRunId.get(localNs);if(lastRunId){let existing=state.messagesByRun.get(lastRunId);if(existing)return state.currentAiMessage.set(localNs,existing),existing}let msg=create(AgentMessageSchema,{type:MessageType.MESSAGE_AI,content:"",timestamp:utcTimestamp(),isStreaming:!1});return state.proto.messages.push(msg),state.currentAiMessage.set(localNs,msg),msg}resolveAgentNamespace(ns3){return ns3?ns3.split("|").filter(p=>!p.startsWith("tools:")&&!p.startsWith("model_request")).join("|"):""}finalizeStreamingMessages(state){for(let msg of state.currentAiMessage.values())msg.isStreaming=!1}}}});var V3StatusBuilder,init_v3_status_builder=__esm({"dist/activities/execute-deep-agent/v3-status-builder.js"(){"use strict";init_esm4();init_message_pb();init_enum_pb();init_approval_policy();init_tool_kind();init_todos();init_execution_state();init_status2();init_v3_events();init_status_builder_shared();init_subagent_tracker();V3StatusBuilder=class{executionId;state;_forceNextUpdate=!1;approvalProvider=null;usageAccumulator;subAgentTracker;toolArgBuffers=new Map;constructor(executionId,initialStatus){this.executionId=executionId,this.state=new ExecutionState(initialStatus),initialStatus.messages.length>0&&this.state.rebuildToolCallIndex(),initialStatus.phase=ExecutionPhase.EXECUTION_IN_PROGRESS,initialStatus.startedAt||(initialStatus.startedAt=utcTimestamp()),this.usageAccumulator=new UsageAccumulator2,this.subAgentTracker=new SubAgentTracker}setApprovalProvider(provider){this.approvalProvider=provider}get currentStatus(){return this.state.proto}get forceNextUpdate(){return this._forceNextUpdate}clearForceFlag(){this._forceNextUpdate=!1}processEvent(event){try{if(event.kind==="tool_started"&&event.name==="task"&&namespaceDepth(event.namespace)<=1){let routingPrefix=event.namespace||`tools:${event.callId}`;this.subAgentTracker.onTaskToolStarted(event.callId,event.input,routingPrefix),this.handleToolStarted(event.callId,event.name,event.input,event.namespace),this._forceNextUpdate=!0;return}if(event.kind==="tool_finished"&&this.isTrackedTaskTool(event.callId)){this.subAgentTracker.onTaskToolFinished(event.callId,event.output),this.handleToolFinished(event.callId,event.output),this._forceNextUpdate=!0;return}if(event.kind==="tool_error"&&this.isTrackedTaskTool(event.callId)){this.subAgentTracker.onTaskToolError(event.callId,event.message),this.handleToolError(event.callId,event.message),this._forceNextUpdate=!0;return}if(this.subAgentTracker.isSubAgentNamespace(event.namespace)){this.subAgentTracker.routeEvent(event);return}switch(event.kind){case"message_start":this.handleMessageStart(event.runId,event.namespace);break;case"text_delta":this.appendTextContent(event.runId,event.namespace,event.text);break;case"reasoning_delta":this.appendThinkingContent(event.runId,event.namespace,event.text);break;case"tool_call_arg_delta":this.handleToolCallArgDelta(event.callId,event.argsChunk);break;case"message_finish":this.handleMessageFinish(event.runId,event.namespace,event.usage);break;case"tool_started":this.handleToolStarted(event.callId,event.name,event.input,event.namespace);break;case"tool_finished":this.handleToolFinished(event.callId,event.output);break;case"tool_error":this.handleToolError(event.callId,event.message);break;case"tool_output_delta":this.handleToolOutputDelta(event.callId,event.delta);break;case"usage":case"lifecycle":case"provider":break}}catch(err){console.error(`[V3StatusBuilder] Event handler error: execution=${this.executionId} kind=${event.kind} seq=${event.seq}: ${err}`)}}addArtifact(artifact){let artifacts=this.state.proto.artifacts,idx=artifacts.findIndex(a=>a.sandboxPath===artifact.sandboxPath);if(idx>=0){artifacts[idx].contentHash!==artifact.contentHash&&(artifacts[idx]=artifact,this._forceNextUpdate=!0);return}artifacts.push(artifact),this._forceNextUpdate=!0}addWriteBack(wb){let backs=this.state.proto.workspaceWriteBacks,idx=backs.findIndex(b=>b.workspaceEntryName===wb.workspaceEntryName);idx>=0?backs[idx]=wb:backs.push(wb),this._forceNextUpdate=!0}handleMessageStart(runId,namespace){let lastRunId=this.state.lastLlmRunId.get(namespace);if(lastRunId&&lastRunId!==runId){let existingMsg=this.state.currentAiMessage.get(namespace);existingMsg&&(existingMsg.isStreaming=!1)}this.state.lastLlmRunId.set(namespace,runId)}handleMessageFinish(runId,_namespace,usage){let msg=this.state.messagesByRun.get(runId);msg&&(msg.isStreaming=!1),usage&&this.accumulateV3Usage(usage)}appendTextContent(runId,namespace,text){let msg=this.ensureAiMessage(runId,namespace,MessageType.MESSAGE_AI);msg.content+=text,msg.isStreaming=!0}appendThinkingContent(runId,namespace,text){let thinkingKey=`thinking:${namespace}`,existingMsg=this.state.messagesByRun.get(thinkingKey);if(existingMsg&&existingMsg.type===MessageType.MESSAGE_THINKING){existingMsg.content+=text,existingMsg.isStreaming=!0;return}let msg=create(AgentMessageSchema,{type:MessageType.MESSAGE_THINKING,content:text,timestamp:utcTimestamp(),isStreaming:!0});this.state.proto.messages.push(msg),this.state.messagesByRun.set(thinkingKey,msg)}handleToolStarted(callId,name2,input,namespace){let existing=this.state.toolCalls.get(callId);if(existing){existing.status===ToolCallStatus.TOOL_CALL_WAITING_APPROVAL&&(existing.status=ToolCallStatus.TOOL_CALL_RUNNING),Object.keys(input).length>0&&!existing.args&&(existing.args=input),this.state.toolStartTimes.set(callId,performance.now()),this._forceNextUpdate=!0;return}let agentNs=this.resolveAgentNamespace(namespace),parentMsg=this.state.currentAiMessage.get(agentNs)??this.ensureAiMessageForToolCall(agentNs);if(!parentMsg)return;let approvalReq=this.checkApprovalRequirement(name2,input),tc=create(ToolCallSchema,{id:callId,name:name2,status:approvalReq.requiresApproval?ToolCallStatus.TOOL_CALL_WAITING_APPROVAL:ToolCallStatus.TOOL_CALL_RUNNING,startedAt:utcTimestamp()});if(Object.keys(input).length>0&&(tc.args=input),approvalReq.serverSlug&&(tc.mcpServerSlug=approvalReq.serverSlug),tc.toolKind=classifyTool(tc.name,tc.mcpServerSlug),stampApprovalProvenance(tc,this.approvalProvider),approvalReq.requiresApproval){tc.requiresApproval=!0,tc.approvalMessage=approvalReq.message,tc.approvalRequestedAt=utcTimestamp();let argsPreview=sanitizeArgsPreview(input);argsPreview&&(tc.argsPreview=argsPreview),this.state.proto.phase=ExecutionPhase.EXECUTION_WAITING_FOR_APPROVAL}parentMsg.toolCalls.push(tc),this.state.toolCalls.set(callId,tc),this.state.toolStartTimes.set(callId,performance.now()),this._forceNextUpdate=!0}handleToolFinished(callId,output){let tc=this.state.toolCalls.get(callId);tc&&(tc.status=ToolCallStatus.TOOL_CALL_COMPLETED,tc.result=extractToolResultV3(output),tc.completedAt=utcTimestamp(),tc.isStreaming=!1,this.state.toolStartTimes.delete(callId),this.toolArgBuffers.delete(callId),tc.toolKind===ToolKind.TODO&&applyTodoUpdate(this.state.proto.todos,tc.args?.todos,{merge:!1}),this._forceNextUpdate=!0)}handleToolError(callId,message){let tc=this.state.toolCalls.get(callId);tc&&(tc.status=ToolCallStatus.TOOL_CALL_FAILED,tc.error=message,tc.completedAt=utcTimestamp(),tc.isStreaming=!1,this.state.toolStartTimes.delete(callId),this.toolArgBuffers.delete(callId),this._forceNextUpdate=!0)}handleToolCallArgDelta(callId,argsChunk){let tc=this.state.toolCalls.get(callId);if(!tc)return;let buffer=(this.toolArgBuffers.get(callId)??"")+argsChunk;this.toolArgBuffers.set(callId,buffer);try{tc.args=JSON.parse(buffer)}catch{}}handleToolOutputDelta(callId,delta){let tc=this.state.toolCalls.get(callId);tc&&(tc.result=(tc.result??"")+delta)}resolveAgentNamespace(ns3){return ns3?ns3.split("|").filter(p=>!p.startsWith("tools:")).join("|"):""}checkApprovalRequirement(toolName,args){if(!this.approvalProvider)return{requiresApproval:!1,message:"",serverSlug:""};let serverSlug=this.approvalProvider.toolServerMap.get(toolName)??"";if(this.approvalProvider.globalBypass)return{requiresApproval:!1,message:"",serverSlug};if(serverSlug){let key=`${serverSlug}/${toolName}`,policy=this.approvalProvider.policies.get(key);return policy?.requiresApproval?{requiresApproval:!0,message:resolveApprovalMessage(policy.approvalMessage,toolName,args),serverSlug}:{requiresApproval:!1,message:"",serverSlug}}return{requiresApproval:!1,message:"",serverSlug:""}}ensureAiMessage(runId,namespace,type3){let existingByRun=this.state.messagesByRun.get(runId);if(existingByRun)return existingByRun;let lastRunId=this.state.lastLlmRunId.get(namespace);if(lastRunId&&lastRunId!==runId){let existingMsg=this.state.currentAiMessage.get(namespace);existingMsg&&(existingMsg.isStreaming=!1)}let msg=create(AgentMessageSchema,{type:type3,content:"",timestamp:utcTimestamp(),isStreaming:!0});return this.state.proto.messages.push(msg),this.state.messagesByRun.set(runId,msg),this.state.currentAiMessage.set(namespace,msg),this.state.lastLlmRunId.set(namespace,runId),msg}ensureAiMessageForToolCall(namespace){let lastRunId=this.state.lastLlmRunId.get(namespace);if(lastRunId){let existing=this.state.messagesByRun.get(lastRunId);if(existing)return this.state.currentAiMessage.set(namespace,existing),existing}let msg=create(AgentMessageSchema,{type:MessageType.MESSAGE_AI,content:"",timestamp:utcTimestamp(),isStreaming:!1});return this.state.proto.messages.push(msg),this.state.currentAiMessage.set(namespace,msg),msg}accumulateV3Usage(usage){let meta3={input_tokens:usage.input_tokens,output_tokens:usage.output_tokens};usage.input_token_details&&(meta3.cache_read_input_tokens=usage.input_token_details.cache_read,meta3.cache_creation_input_tokens=usage.input_token_details.cache_creation),this.usageAccumulator.accumulate(meta3),this.state.proto.streamingUsage=this.usageAccumulator.toProto()}isTrackedTaskTool(callId){return this.state.toolCalls.get(callId)?.name==="task"}syncSubAgentExecutions(){this.subAgentTracker.hasExecutions()&&(this.state.proto.subAgentExecutions=this.subAgentTracker.getExecutions())}cancelSubAgents(){this.subAgentTracker.cancelAll(),this.syncSubAgentExecutions()}}}});var StreamingSideEffects,init_streaming_side_effects=__esm({"dist/activities/execute-deep-agent/streaming-side-effects.js"(){"use strict";init_file_tools();StreamingSideEffects=class{inputCache=new Map;inlinePublisher;writebackCoordinator;pendingPublishPromises=[];pendingWritebackPromises=[];constructor(opts){this.inlinePublisher=opts.inlinePublisher,this.writebackCoordinator=opts.writebackCoordinator}onProtocolEvent(event){if(event.method!=="tools"||!this.inlinePublisher&&!this.writebackCoordinator)return;let data=event.params.data;if(!data)return;let eventType=data.event??data.type,callId=data.tool_call_id??data.toolCallId;if(callId){if(eventType==="tool-started"){let toolName=data.tool_name??data.toolName??data.name??"",rawInput=data.input,input={};if(typeof rawInput=="string")try{input=JSON.parse(rawInput)}catch{}else rawInput&&typeof rawInput=="object"&&!Array.isArray(rawInput)&&(input=rawInput);this.inputCache.set(callId,{toolName,input});return}if(eventType==="tool-finished"){let cached4=this.inputCache.get(callId);if(this.inputCache.delete(callId),!cached4||!isFileModifyingTool(cached4.toolName))return;let filePath=extractFilePath(cached4.input);if(!filePath)return;this.inlinePublisher&&this.pendingPublishPromises.push(this.inlinePublisher.publish(filePath)),this.writebackCoordinator&&this.pendingWritebackPromises.push(this.writebackCoordinator.onFileModified(filePath))}}}}}});async function streamExecutionV3(deps){let{agentGraph,langgraphInput,langgraphConfig,executionId,client:client2,initialStatus,streamingConfig,retryOptions,offload,stallTimeoutMs=DEFAULT_STALL_TIMEOUT_MS,heartbeatFn,isCancelledFn,gracefulStop,inlinePublisher,writebackCoordinator,approvalProvider}=deps,statusBuilder=new V3StatusBuilder(executionId,initialStatus);approvalProvider&&statusBuilder.setApprovalProvider(approvalProvider);let scheduler=new StreamingUpdateScheduler(streamingConfig),recorder=createV3EventRecorder(executionId,process.env.V3_EVENT_RECORD_DIR),abortController=new AbortController,sideEffects=new StreamingSideEffects({inlinePublisher,writebackCoordinator});sendHeartbeat(heartbeatFn,executionId,0,statusBuilder);let run=await agentGraph.streamEvents(langgraphInput,{...langgraphConfig,version:"v3",signal:abortController.signal}),eventsProcessed=0,lastActivityAt2=performance.now(),heartbeatTimer=setInterval(()=>{sendHeartbeat(heartbeatFn,executionId,eventsProcessed,statusBuilder)},HEARTBEAT_INTERVAL_MS);try{for await(let event of run){if(isCancelledFn?.())return abortController.abort("Cancelled by platform"),statusBuilder.cancelSubAgents(),handlePause(statusBuilder,eventsProcessed,sideEffects.pendingPublishPromises,sideEffects.pendingWritebackPromises);lastActivityAt2=performance.now(),recorder?.record(event,eventsProcessed);for(let normalized of normalize3(event))statusBuilder.processEvent(normalized);if(sideEffects.onProtocolEvent(event),eventsProcessed++,statusBuilder.forceNextUpdate||scheduler.shouldSendUpdate(eventsProcessed)){statusBuilder.forceNextUpdate&&statusBuilder.clearForceFlag(),statusBuilder.syncSubAgentExecutions();let statusToPersist=statusBuilder.currentStatus;await deps.beforePersist?.(statusToPersist);let signal=await persistStatus(client2,executionId,statusToPersist,{offload,retry:retryOptions});if(scheduler.markUpdateSent(eventsProcessed),signal===ExecutionControlSignal.STOP)if(console.warn(`[streaming-v3] STOP signal received for execution ${executionId}`),gracefulStop)gracefulStop.activate("Platform STOP signal");else return handleStop(statusBuilder,eventsProcessed,sideEffects.pendingPublishPromises,sideEffects.pendingWritebackPromises)}checkStallTimeout(lastActivityAt2,stallTimeoutMs,executionId)}}catch(err){if(isGraphRecursionError(err))return await recorder?.flush(),handleRecursionLimit(statusBuilder,eventsProcessed,sideEffects.pendingPublishPromises,sideEffects.pendingWritebackPromises);throw err}finally{clearInterval(heartbeatTimer)}if(await recorder?.flush(),eventsProcessed===0)throw new Error("Stream completed without processing any events. This may indicate a configuration error or v3 API incompatibility.");if(statusBuilder.syncSubAgentExecutions(),initialStatus.phase===ExecutionPhase.EXECUTION_WAITING_FOR_APPROVAL)return console.log(`[streaming-v3] execution=${executionId} stream ended with WAITING_FOR_APPROVAL. Not setting COMPLETED. pending_approvals computed server-side.`),{eventsProcessed,terminalStatus:slimStatus(initialStatus),pendingPublishPromises:sideEffects.pendingPublishPromises,pendingWritebackPromises:sideEffects.pendingWritebackPromises};console.log(`[streaming-v3] execution=${executionId} stream finished \u2014 processed ${eventsProcessed} events`);let runOutput=await extractRunOutput(run,executionId);return{eventsProcessed,runOutput,pendingPublishPromises:sideEffects.pendingPublishPromises,pendingWritebackPromises:sideEffects.pendingWritebackPromises}}async function extractRunOutput(run,executionId){try{let finalState=await Promise.race([run.output,timeoutPromise(RUN_OUTPUT_TIMEOUT_MS)]);if(finalState===TIMEOUT_SENTINEL){console.warn(`[streaming-v3] execution=${executionId} \u2014 run.output did not resolve within ${RUN_OUTPUT_TIMEOUT_MS}ms. Proceeding without final state.`);return}let output=finalState;return console.log(`[streaming-v3] execution=${executionId} \u2014 run.output resolved. Keys: [${Object.keys(output??{}).join(", ")}]. hasStructuredResponse=${output?.structuredResponse!==void 0}`),output}catch(err){console.warn(`[streaming-v3] execution=${executionId} \u2014 run.output rejected: ${err}`);return}}function timeoutPromise(ms){return new Promise(resolve7=>setTimeout(()=>resolve7(TIMEOUT_SENTINEL),ms))}function sendHeartbeat(fn,executionId,eventsProcessed,sb){if(fn)try{fn({executionId,eventsProcessed,messages:sb.currentStatus.messages.length,phase:sb.currentStatus.phase})}catch{}}function checkStallTimeout(lastActivityAt2,stallTimeoutMs,executionId){let elapsed2=performance.now()-lastActivityAt2;if(elapsed2>stallTimeoutMs)throw new StallTimeoutError2(`Agent stream stalled: no events received for ${Math.round(elapsed2/1e3)}s for execution ${executionId}`)}var DEFAULT_STALL_TIMEOUT_MS,HEARTBEAT_INTERVAL_MS,RUN_OUTPUT_TIMEOUT_MS,TIMEOUT_SENTINEL,init_streaming_v3=__esm({"dist/activities/execute-deep-agent/streaming-v3.js"(){"use strict";init_streaming5();init_enum_pb();init_v3_event_recorder();init_v3_protocol_normalizer();init_v3_status_builder();init_streaming_scheduler();init_status2();init_streaming_side_effects();init_streaming_terminal();DEFAULT_STALL_TIMEOUT_MS=12e4,HEARTBEAT_INTERVAL_MS=2e3,RUN_OUTPUT_TIMEOUT_MS=3e4;TIMEOUT_SENTINEL=Symbol("timeout")}});async function streamExecution(deps){return deps.streamVersion==="v3"?streamExecutionV3(deps):streamExecutionV2(deps)}async function streamExecutionV2(deps){let{agentGraph,langgraphInput,langgraphConfig,executionId,client:client2,initialStatus,streamingConfig,retryOptions,offload,stallTimeoutMs=DEFAULT_STALL_TIMEOUT_MS2,heartbeatFn,isCancelledFn,gracefulStop,inlinePublisher,writebackCoordinator,approvalProvider}=deps,statusBuilder=new StatusBuilder(executionId,initialStatus);approvalProvider&&statusBuilder.setApprovalProvider(approvalProvider);let scheduler=new StreamingUpdateScheduler(streamingConfig),recorder=createV2EventRecorder(executionId,process.env.V2_EVENT_RECORD_DIR),eventsProcessed=0,lastEventTime=performance.now(),lastHeartbeatTime=performance.now(),heartbeatIntervalMs=2e3,pendingPublishPromises=[],pendingWritebackPromises=[];try{let stream=agentGraph.streamEvents(langgraphInput,langgraphConfig,{version:"v2"});for await(let event of stream){if(isCancelledFn?.())return handlePause(statusBuilder,eventsProcessed,pendingPublishPromises,pendingWritebackPromises);if(lastEventTime=performance.now(),recorder?.record(event,eventsProcessed),statusBuilder.processEvent(event),eventsProcessed++,event.event==="on_tool_end"&&(inlinePublisher||writebackCoordinator)){let filePath=extractFilePathFromToolEnd(event);filePath&&(inlinePublisher&&pendingPublishPromises.push(inlinePublisher.publish(filePath)),writebackCoordinator&&pendingWritebackPromises.push(writebackCoordinator.onFileModified(filePath)))}let now=performance.now();if(heartbeatFn&&now-lastHeartbeatTime>=heartbeatIntervalMs&&(sendHeartbeat2(heartbeatFn,executionId,eventsProcessed,statusBuilder),lastHeartbeatTime=now),statusBuilder.forceNextUpdate||scheduler.shouldSendUpdate(eventsProcessed)){statusBuilder.forceNextUpdate&&statusBuilder.clearForceFlag();let statusToPersist=statusBuilder.currentStatus;await deps.beforePersist?.(statusToPersist);let signal=await persistStatus(client2,executionId,statusToPersist,{offload,retry:retryOptions});if(scheduler.markUpdateSent(eventsProcessed),signal===ExecutionControlSignal.STOP)if(console.warn(`[streaming] STOP signal received for execution ${executionId}`),gracefulStop)gracefulStop.activate("Platform STOP signal");else return handleStop(statusBuilder,eventsProcessed,pendingPublishPromises,pendingWritebackPromises)}checkStallTimeout2(lastEventTime,stallTimeoutMs,executionId)}}catch(err){if(isGraphRecursionError(err))return handleRecursionLimit(statusBuilder,eventsProcessed,pendingPublishPromises,pendingWritebackPromises);throw err}if(await recorder?.flush(),eventsProcessed===0)throw new Error("Stream completed without processing any events. This may indicate a configuration error.");return initialStatus.phase===ExecutionPhase.EXECUTION_WAITING_FOR_APPROVAL?(console.log(`[streaming] execution=${executionId} stream ended with WAITING_FOR_APPROVAL. Not setting COMPLETED. pending_approvals computed server-side.`),{eventsProcessed,terminalStatus:slimStatus(initialStatus),pendingPublishPromises,pendingWritebackPromises}):(console.log(`[streaming] execution=${executionId} stream finished \u2014 processed ${eventsProcessed} events`),{eventsProcessed,pendingPublishPromises,pendingWritebackPromises})}function sendHeartbeat2(fn,executionId,eventsProcessed,sb){try{fn({executionId,eventsProcessed,messages:sb.currentStatus.messages.length,phase:sb.currentStatus.phase})}catch(err){console.warn(`[streaming] Heartbeat failed for ${executionId}:`,err)}}function checkStallTimeout2(lastEventTime,stallTimeoutMs,executionId){let elapsed2=performance.now()-lastEventTime;if(elapsed2>stallTimeoutMs)throw new StallTimeoutError2(`Agent stream stalled: no events received for ${Math.round(elapsed2/1e3)}s for execution ${executionId}`)}function extractFilePathFromToolEnd(event){let toolName=event.name??"";if(!isFileModifyingTool(toolName))return null;let input=event.data?.input;return input?extractFilePath(input):null}var DEFAULT_STALL_TIMEOUT_MS2,StallTimeoutError2,init_streaming5=__esm({"dist/activities/execute-deep-agent/streaming.js"(){"use strict";init_enum_pb();init_status_builder();init_streaming_terminal();init_streaming_scheduler();init_status2();init_event_recorder();init_streaming_v3();init_file_tools();DEFAULT_STALL_TIMEOUT_MS2=12e4;StallTimeoutError2=class extends Error{constructor(message){super(message),this.name="StallTimeoutError"}}}});function normalizePath(path6){return path6.replace(/^\/+/,"")}function sha2563(content){return(0,import_node_crypto15.createHash)("sha256").update(content).digest("hex")}function guessContentType(filename){let ext=filename.slice(filename.lastIndexOf(".")).toLowerCase();return CONTENT_TYPE_MAP[ext]??"application/octet-stream"}var import_node_crypto15,import_node_path31,InlinePublisher,CONTENT_TYPE_MAP,init_inline_publisher=__esm({"dist/activities/execute-deep-agent/inline-publisher.js"(){"use strict";import_node_crypto15=require("node:crypto"),import_node_path31=require("node:path");init_esm4();init_artifact_pb();init_enum_pb();init_status2();init_secret_paths();InlinePublisher=class{workspaceBackend;artifactStorage;statusWriter;executionId;published=new Map;constructor(opts){this.workspaceBackend=opts.workspaceBackend,this.artifactStorage=opts.artifactStorage,this.statusWriter=opts.statusWriter,this.executionId=opts.executionId}get publishedPaths(){return new Set(this.published.keys())}async publish(path6){if(this.artifactStorage)try{let sandboxPath=normalizePath(path6);if(isSecretLikePath(sandboxPath)){console.log(`[InlinePublisher] execution=${this.executionId} \u2014 withheld '${sandboxPath}' (secret-like; never published to artifact storage)`);return}let content=await this.workspaceBackend.readFile(sandboxPath),contentBuffer=Buffer.from(content,"utf-8"),contentHash=sha2563(contentBuffer);if(this.published.get(sandboxPath)===contentHash)return;let fileName=(0,import_node_path31.basename)(sandboxPath),storageKey=`artifacts/${this.executionId}/${fileName}`;await this.artifactStorage.upload(storageKey,contentBuffer,guessContentType(fileName));let artifact=create(ExecutionArtifactSchema,{name:fileName,sandboxPath,kind:ExecutionArtifactKind.FILE,sizeBytes:BigInt(contentBuffer.length),storageKey,createdAt:utcTimestamp(),contentHash});this.statusWriter.addArtifact(artifact),this.published.set(sandboxPath,contentHash),console.log(`[InlinePublisher] execution=${this.executionId} \u2014 published '${sandboxPath}' (${contentBuffer.length} bytes, hash=${contentHash.slice(0,12)})`)}catch(err){console.warn(`[InlinePublisher] execution=${this.executionId} \u2014 failed to publish '${path6}' (non-fatal): ${err}`)}}};CONTENT_TYPE_MAP={".txt":"text/plain",".md":"text/markdown",".json":"application/json",".js":"application/javascript",".ts":"application/typescript",".py":"text/x-python",".html":"text/html",".css":"text/css",".xml":"text/xml",".yaml":"text/yaml",".yml":"text/yaml",".csv":"text/csv",".pdf":"application/pdf",".zip":"application/zip",".png":"image/png",".jpg":"image/jpeg",".jpeg":"image/jpeg",".gif":"image/gif",".svg":"image/svg+xml"}}});async function autoPublishWrittenFiles(status,inlinePublisher){let alreadyPublished=inlinePublisher.publishedPaths,pathsToPublish=[];for(let message of status.messages)for(let tc of message.toolCalls){if(!FILE_MODIFYING_TOOLS2.has(tc.name))continue;let filePath=extractFilePath2(tc.args);if(!filePath)continue;let normalized=filePath.replace(/^\/+/,"");alreadyPublished.has(normalized)||pathsToPublish.includes(normalized)||pathsToPublish.push(normalized)}let count=0;for(let path6 of pathsToPublish)try{await inlinePublisher.publish(path6),count++}catch{}return count>0&&console.log(`[autoPublish] Published ${count} additional artifact(s) via safety net`),count}function extractFilePath2(args){return args?typeof args.path=="string"?args.path:typeof args.file_path=="string"?args.file_path:typeof args.filename=="string"?args.filename:typeof args.file=="string"?args.file:null:null}var FILE_MODIFYING_TOOLS2,init_auto_publish=__esm({"dist/activities/execute-deep-agent/auto-publish.js"(){"use strict";FILE_MODIFYING_TOOLS2=new Set(["write_file","edit_file","create_file","write","edit","create","str_replace_editor"])}});async function processPostStream(opts){let{status,inlinePublisher,writebackCoordinator,pendingPublishPromises,pendingWritebackPromises,executionId}=opts;if(status.phase===ExecutionPhase.EXECUTION_WAITING_FOR_APPROVAL||status.phase===ExecutionPhase.EXECUTION_PAUSED){let phaseName=status.phase===ExecutionPhase.EXECUTION_PAUSED?"PAUSED":"WAITING_FOR_APPROVAL";(pendingPublishPromises.length>0||pendingWritebackPromises.length>0)&&(await Promise.allSettled([...pendingPublishPromises,...pendingWritebackPromises]),console.log(`[postStream] execution=${executionId} \u2014 drained pending promises (phase is ${phaseName})`));return}if(pendingPublishPromises.length>0)try{await Promise.allSettled(pendingPublishPromises),console.log(`[postStream] execution=${executionId} \u2014 drained ${pendingPublishPromises.length} pending publish task(s)`)}catch(err){console.warn(`[postStream] execution=${executionId} \u2014 error draining publish tasks: ${err}`)}if(pendingWritebackPromises.length>0)try{await Promise.allSettled(pendingWritebackPromises),console.log(`[postStream] execution=${executionId} \u2014 drained ${pendingWritebackPromises.length} pending writeback task(s)`)}catch(err){console.warn(`[postStream] execution=${executionId} \u2014 error draining writeback tasks: ${err}`)}try{await autoPublishWrittenFiles(status,inlinePublisher)}catch(err){console.warn(`[postStream] execution=${executionId} \u2014 auto-publish safety net error: ${err}`)}if(writebackCoordinator)try{await writebackCoordinator.finalize(),console.log(`[postStream] execution=${executionId} \u2014 writeback finalize complete`)}catch(err){console.warn(`[postStream] execution=${executionId} \u2014 writeback finalize error: ${err}`)}}var init_post_stream=__esm({"dist/activities/execute-deep-agent/post-stream.js"(){"use strict";init_enum_pb();init_auto_publish()}});function resolveResumeInput(execution,graphState,userMessage){let pendingInterrupts=extractPendingInterrupts(graphState);if(pendingInterrupts.length===0)return{graphInput:{messages:[{role:"user",content:userMessage}]},isResumeFromApproval:!1,hasRejection:!1,rejectionReason:""};let decisions=extractApprovalDecisions(execution);if(decisions.size===0)return{graphInput:{messages:[{role:"user",content:userMessage}]},isResumeFromApproval:!1,hasRejection:!1,rejectionReason:""};let resumeDict={},hasRejection=!1,rejectionReason="";for(let intr of pendingInterrupts){let toolCallId=intr.toolCallId,decision=decisions.get(toolCallId);if(!decision)continue;let actionStr=ACTION_MAP.get(decision.action);actionStr&&(resumeDict[intr.interruptId]={action:actionStr,...decision.comment?{comment:decision.comment}:{}},decision.action===ApprovalAction.REJECT&&(hasRejection=!0,rejectionReason=decision.comment||"Rejected by user"))}return Object.keys(resumeDict).length===0?{graphInput:{messages:[{role:"user",content:userMessage}]},isResumeFromApproval:!1,hasRejection:!1,rejectionReason:""}:(console.log(`[hitl] Building resume for ${Object.keys(resumeDict).length} interrupt(s), rejection=${hasRejection}`),{graphInput:new Command({resume:resumeDict}),isResumeFromApproval:!0,hasRejection,rejectionReason})}function extractPendingInterrupts(state){let result=[];for(let task2 of state.tasks)if(task2.interrupts)for(let intr of task2.interrupts){if(intr.resumeValue!==void 0)continue;let value=intr.value;if(typeof value=="object"&&value!==null){let toolCallId=value.tool_call_id;typeof toolCallId=="string"&&toolCallId&&result.push({interruptId:intr.id??task2.id,toolCallId})}}return result}function extractApprovalDecisions(execution){let decisions=new Map,status=execution.status;if(!status)return decisions;for(let message of status.messages)for(let tc of message.toolCalls)tc.approvalAction!==ApprovalAction.UNSPECIFIED&&tc.status===ToolCallStatus.TOOL_CALL_WAITING_APPROVAL&&decisions.set(tc.id,{action:tc.approvalAction,comment:""});return decisions}var ACTION_MAP,init_hitl2=__esm({"dist/activities/execute-deep-agent/hitl.js"(){"use strict";init_dist4();init_enum_pb();ACTION_MAP=new Map([[ApprovalAction.APPROVE,"approve"],[ApprovalAction.APPROVE_ALL,"approve"],[ApprovalAction.SKIP,"skip"],[ApprovalAction.REJECT,"reject"]])}});function findAiMessageToolCallArgs(messages,toolCallId){for(let msg of messages){if(!msg||typeof msg!="object")continue;let toolCalls=msg.tool_calls;if(Array.isArray(toolCalls))for(let tc of toolCalls){if(!tc||typeof tc!="object")continue;let entry=tc;if(entry.id===toolCallId)return entry.args&&typeof entry.args=="object"&&!Array.isArray(entry.args)?entry.args:{}}}}function captureApprovalArtifacts(opts){let args=findAiMessageToolCallArgs(opts.messages,opts.toolCallId);return!args||Object.keys(args).length===0?{}:{argsPreview:sanitizeArgsPreview(args)||void 0}}var init_approval_file_change=__esm({"dist/activities/execute-deep-agent/approval-file-change.js"(){"use strict";init_status_builder_shared()}});function stampFlowedFileEditRows2(messages,changeSetId,skipToolCallIds){for(let msg of messages)for(let tc of msg.toolCalls){if(tc.fileChangeSetId||skipToolCallIds?.has(tc.id)||isToolCallRowHidden(tc))continue;let category=toolApprovalCategory(tc.name);category!=="write"&&category!=="delete"||stampFileEditRow(tc,changeSetId)}}function stampFlowedSubAgentFileEditRows(subAgents,changeSetId,priorToolCallIds){for(let sa of subAgents)stampFlowedFileEditRows2(sa.messages,changeSetId,priorToolCallIds)}var init_stamp_flowed_rows=__esm({"dist/activities/execute-deep-agent/stamp-flowed-rows.js"(){"use strict";init_tool_kind();init_tool_row()}});function deriveTurnCommandProvenance2(inputs){let{status,priorSettledToolCallIds,priorSubAgentToolCallIds,globalBypass}=inputs;for(let id of collectSubAgentToolCallIds(status.subAgentExecutions))if(!priorSubAgentToolCallIds.has(id))return;let messages=status.messages,turnToolCalls=messages.flatMap(m=>m.toolCalls).filter(tc=>!priorSettledToolCallIds.has(tc.id));return qualifyTurnCommandProvenance({turnToolCalls,messages,isExecutedCommand:tc=>tc.status===ToolCallStatus.TOOL_CALL_COMPLETED,resolveDirectConsent:tc=>tc.approvalAction===ApprovalAction.APPROVE||tc.approvalAction===ApprovalAction.APPROVE_ALL?tc.id:void 0,globalBypass})}var init_command_provenance3=__esm({"dist/activities/execute-deep-agent/command-provenance.js"(){"use strict";init_enum_pb();init_command_provenance();init_tool_row()}});var extract_json_exports={};__export(extract_json_exports,{extractJsonFromText:()=>extractJsonFromText});function extractJsonFromText(text){if(!text)return;let trimmed=text.trim(),direct=tryParse(trimmed);if(direct!==void 0)return direct;let fenced=extractFromCodeFences(trimmed);if(fenced!==void 0)return fenced;let braced=extractLastJsonObject(trimmed);if(braced!==void 0)return braced}function extractFromCodeFences(text){let fences=[],match;for(;(match=CODE_FENCE_RE.exec(text))!==null;)fences.push(match[1]);CODE_FENCE_RE.lastIndex=0;for(let i2=fences.length-1;i2>=0;i2--){let content=fences[i2].trim();if(!content.startsWith("{")&&!content.startsWith("["))continue;let result=tryParse(content);if(result!==void 0)return result}}function extractLastJsonObject(text){let lastClose=text.lastIndexOf("}");if(lastClose===-1)return;let depth=0,inString=!1,escaped=!1;for(let i2=lastClose;i2>=0;i2--){let ch=text[i2];if(inString){if(escaped){escaped=!1;continue}if(ch==="\\"){escaped=!0;continue}ch==='"'&&(inString=!1);continue}if(ch==='"'){inString=!0;continue}if(ch==="}")depth++;else if(ch==="{"&&(depth--,depth===0)){let candidate=text.slice(i2,lastClose+1);return tryParse(candidate)}}}function tryParse(candidate){try{return JSON.parse(candidate)}catch{}let repaired=stripTrailingCommas(candidate);if(repaired!==candidate)try{return JSON.parse(repaired)}catch{}}function stripTrailingCommas(json5){return json5.replace(/,\s*([}\]])/g,"$1")}var CODE_FENCE_RE,init_extract_json=__esm({"dist/shared/extract-json.js"(){"use strict";CODE_FENCE_RE=/```(?:json|JSON)?\s*\n([\s\S]*?)```/g}});var execute_deep_agent_exports={};__export(execute_deep_agent_exports,{createDeepAgentActivities:()=>createDeepAgentActivities});function createDeepAgentActivities(config4){let client2=new StigmerClient({endpoint:config4.stigmerBackendEndpoint,token:config4.stigmerToken,tokenRef:config4.stigmerTokenRef}),streamingConfig=loadStreamingConfig();return{ExecuteDeepAgent:async(arg0,arg1)=>{let{executionId,threadId,turnSeq}=normalizeActivityInput(arg0,arg1);activityStarted();let setup=null,releaseWorkspaceLock;try{console.log(`[ExecuteDeepAgent] Started for execution ${executionId}`),setup=await performSetup({config:config4,client:client2,executionId,threadId});let statusOffload=setup.artifactStorage?{artifactStorage:setup.artifactStorage,executionId}:void 0,graphState=await setup.agentGraph.getState(setup.langgraphConfig),initialStatus=shouldSeedFromPersistedTranscript(setup.execution)?seedStatusFromExecution(setup.execution):create(AgentExecutionStatusSchema,{}),statusBuilder=new StatusBuilder(executionId,initialStatus);statusBuilder.setApprovalProvider({policies:setup.approvalPolicies,toolServerMap:setup.toolServerMap,leasedCategories:setup.leasedCategories,globalBypass:setup.globalBypass});let resume=resolveResumeInput(setup.execution,graphState,setup.execution.spec.message);if(resume.hasRejection){let failedStatus=create(AgentExecutionStatusSchema,{phase:ExecutionPhase.EXECUTION_FAILED,error:`Execution rejected: ${resume.rejectionReason}`,completedAt:utcTimestamp(),messages:[create(AgentMessageSchema,{type:MessageType.MESSAGE_SYSTEM,content:`Execution rejected by user: ${resume.rejectionReason}`,timestamp:utcTimestamp()})]});return await persistStatus(client2,executionId,failedStatus,{offload:statusOffload}),slimStatus(failedStatus)}let effectiveInput=resume.isResumeFromApproval?resume.graphInput:setup.langgraphInput,inlinePublisher=new InlinePublisher({workspaceBackend:setup.workspaceBackend,artifactStorage:setup.artifactStorage,statusWriter:statusBuilder,executionId}),workspaceEntries=setup.session.spec?.workspaceEntries??[],writebackCoordinator=setup.provisionResults.length>0?new WriteBackCoordinator({statusWriter:statusBuilder,executionId,sessionId:setup.session.metadata?.id??"",githubToken:setup.mergedEnvVars.GITHUB_TOKEN??"",provisionResults:setup.provisionResults,workspaceEntries,workspaceBackend:setup.workspaceBackend}):null,gitRoot=setup.workspaceBackend.rootDir,changeSetId=`${executionId}:${turnSeq}`;try{releaseWorkspaceLock=await acquireWorkspaceLock(gitRoot,{onWaiting:()=>reportSetupProgress(client2,executionId,"Waiting for workspace \u2014 in use by another session"),heartbeat:()=>import_activity3.Context.current().heartbeat(),signal:import_activity3.Context.current().cancellationSignal,timeoutMs:config4.workspaceLockTimeoutMs})}catch(lockErr){if(lockErr instanceof WorkspaceLockCancelledError)throw new import_activity3.CancelledFailure("Activity cancelled while waiting for the workspace lock");if(lockErr instanceof WorkspaceLockTimeoutError){let failedStatus=create(AgentExecutionStatusSchema,{phase:ExecutionPhase.EXECUTION_FAILED,error:lockErr.message,completedAt:utcTimestamp(),messages:[create(AgentMessageSchema,{type:MessageType.MESSAGE_SYSTEM,content:`Execution failed: ${lockErr.message}`,timestamp:utcTimestamp()})]});return await persistStatus(client2,executionId,failedStatus,{offload:statusOffload}),slimStatus(failedStatus)}throw lockErr}if(setup.workspaceBackend.platformDir&&await ensureStigmerSymlink(gitRoot,setup.workspaceBackend.platformDir),setup.captureMode){let decidedSets=(setup.execution.status?.fileChangeSets??[]).filter(cs=>cs.status===FileChangeSetStatus.DECIDED),reconciledAny=!1,reconcileFailed=!1,reconcileFailureDetail="",casReadBlob=setup.artifactStorage?casBlobReader(setup.artifactStorage):void 0;for(let changeSet of decidedSets){let capResult=await applyCaptureDecisions({status:initialStatus,gitRoot,executionId,changeSet,harnessId:DEEP_AGENT_HARNESS_ID,storage:setup.artifactStorage,readBlob:casReadBlob,gitWorkspace:setup.gitWorkspace});capResult.isCaptureTurn&&(reconciledAny=!0,capResult.failed&&(reconcileFailed=!0,reconcileFailureDetail=capResult.failureDetail??"file review reconcile failed"))}if(reconciledAny){if(reconcileFailed)return initialStatus.phase=ExecutionPhase.EXECUTION_FAILED,initialStatus.error=`File review reconcile failed: ${reconcileFailureDetail}`,initialStatus.completedAt=utcTimestamp(),await persistStatus(client2,executionId,initialStatus,{offload:statusOffload}),slimStatus(initialStatus);if(!hasPendingToolApprovals(setup.execution)){initialStatus.phase=ExecutionPhase.EXECUTION_COMPLETED,initialStatus.completedAt=utcTimestamp(),writebackCoordinator&&await processCaptureWriteback(writebackCoordinator,executionId),await persistStatus(client2,executionId,initialStatus,{offload:statusOffload});let slim2=slimStatus(initialStatus),lastAi=[...initialStatus.messages].reverse().find(m=>m.type===MessageType.MESSAGE_AI);return lastAi?.content&&(slim2.final_text=lastAi.content),initialStatus.structuredOutput!==void 0&&(slim2.structured=initialStatus.structuredOutput),slim2}}}let captureBaselineTree="",priorSubAgentToolCallIds=collectSubAgentToolCallIds(initialStatus.subAgentExecutions),priorSettledToolCallIds=collectSettledToolCallIds(initialStatus.messages);setup.captureMode&&(captureBaselineTree=await captureBaselineToLedger({status:initialStatus,gitRoot,executionId,changeSetId,harnessId:DEEP_AGENT_HARNESS_ID,gitWorkspace:setup.gitWorkspace}));let progressState=newProgressCaptureState(),casObserver=setup.casObserver,readObserverTouched=()=>({before:new Map(casObserver.before),blockedSecretPaths:new Set(casObserver.blockedSecretPaths)}),progressSubstrate=setup.captureMode?setup.gitWorkspace?captureBaselineTree?createHybridProgressSubstrate(createGitProgressSubstrate({workspaceRoot:gitRoot,executionId,baselineTree:captureBaselineTree}),createCasProgressSubstrate({workspaceRoot:gitRoot,read:readObserverTouched})):void 0:createCasProgressSubstrate({workspaceRoot:gitRoot,read:readObserverTouched}):void 0,cancellationSignal=import_activity3.Context.current().cancellationSignal,result=await streamExecution({agentGraph:setup.agentGraph,langgraphInput:effectiveInput,langgraphConfig:setup.langgraphConfig,executionId,client:client2,initialStatus,streamingConfig,offload:statusOffload,gracefulStop:setup.gracefulStop,inlinePublisher,writebackCoordinator:setup.captureMode?void 0:writebackCoordinator??void 0,heartbeatFn:details=>import_activity3.Context.current().heartbeat(details),isCancelledFn:()=>cancellationSignal.aborted,approvalProvider:{policies:setup.approvalPolicies,toolServerMap:setup.toolServerMap,leasedCategories:setup.leasedCategories,globalBypass:setup.globalBypass},streamVersion:setup.streamVersion,beforePersist:async status=>{progressSubstrate&&await captureFileChangeProgress({status,changeSetId,substrate:progressSubstrate,state:progressState})}});await processPostStream({status:initialStatus,inlinePublisher,writebackCoordinator:setup.captureMode?null:writebackCoordinator,pendingPublishPromises:result.pendingPublishPromises,pendingWritebackPromises:result.pendingWritebackPromises,executionId}),withholdSecretContentFromMessages(initialStatus.messages,initialStatus.subAgentExecutions);let fileReviewPending=!1,abnormalTerminal=!!result.terminalStatus&&initialStatus.phase!==ExecutionPhase.EXECUTION_WAITING_FOR_APPROVAL;if(setup.captureMode&&!abnormalTerminal){let casCaptureClass=setup.gitWorkspace?FileCaptureClass.GIT_IGNORED_CAPTURED:FileCaptureClass.NON_GIT_CAS,{casCaptures,unreviewablePaths}=await buildCasTurnCaptures2(setup.casObserver,gitRoot,casCaptureClass),commandProvenance=deriveTurnCommandProvenance2({status:initialStatus,priorSettledToolCallIds,priorSubAgentToolCallIds,globalBypass:setup.globalBypass});commandProvenance&&console.log(`[ExecuteDeepAgent] capture: turn qualifies for approved-command auto-keep (consent rows: ${commandProvenance.consentToolCallIds.join(",")||"(auto_approve_all)"}); attaching provenance to candidate (execution=${executionId})`),await captureCandidateToLedger({status:initialStatus,gitRoot,executionId,changeSetId,baselineTree:captureBaselineTree,harnessId:DEEP_AGENT_HARNESS_ID,casCaptures,storage:setup.artifactStorage,unreviewablePaths,unreviewableCaptureClass:casCaptureClass,gitWorkspace:setup.gitWorkspace,commandProvenance}),fileReviewPending=hasCandidateCaptured(initialStatus,changeSetId),fileReviewPending&&(stampFlowedFileEditRows2(initialStatus.messages,changeSetId),stampFlowedSubAgentFileEditRows(initialStatus.subAgentExecutions,changeSetId,priorSubAgentToolCallIds))}if(result.terminalStatus){if(initialStatus.phase===ExecutionPhase.EXECUTION_PAUSED)throw await persistStatus(client2,executionId,initialStatus,{offload:statusOffload}),console.log(`[ExecuteDeepAgent] Paused for execution ${executionId}: events=${result.eventsProcessed}`),new import_activity3.CancelledFailure("Activity paused by orchestrator");return setup.captureMode&&!abnormalTerminal?(await persistStatus(client2,executionId,initialStatus,{offload:statusOffload}),slimStatus(initialStatus)):result.terminalStatus}if(!setup.globalBypass){let postStreamGraphState=await setup.agentGraph.getState(setup.langgraphConfig),graphMessages=postStreamGraphState.values.messages,aiMessages=Array.isArray(graphMessages)?graphMessages:[],pendingInterrupts=detectPendingInterrupts(postStreamGraphState);if(pendingInterrupts.length>0){console.log(`[ExecuteDeepAgent] Detected ${pendingInterrupts.length} pending interrupt(s) for execution ${executionId} \u2014 setting WAITING_FOR_APPROVAL`),initialStatus.phase=ExecutionPhase.EXECUTION_WAITING_FOR_APPROVAL;let aiMsg=create(AgentMessageSchema,{type:MessageType.MESSAGE_AI,content:"",timestamp:utcTimestamp(),isStreaming:!1});for(let intr of pendingInterrupts){let toolCall=create(ToolCallSchema,{id:intr.toolCallId,name:intr.toolName,status:ToolCallStatus.TOOL_CALL_WAITING_APPROVAL,requiresApproval:!0,approvalMessage:intr.message,approvalRequestedAt:utcTimestamp(),mcpServerSlug:intr.mcpServerSlug,startedAt:utcTimestamp(),toolKind:classifyTool(intr.toolName,intr.mcpServerSlug),approvalPolicySource:toProtoPolicySource(intr.policySource),policyEngineVersion:intr.policySource?POLICY_ENGINE_VERSION:""}),{argsPreview}=captureApprovalArtifacts({toolCallId:intr.toolCallId,messages:aiMessages});argsPreview&&(toolCall.argsPreview=argsPreview),aiMsg.toolCalls.push(toolCall)}return initialStatus.messages.push(aiMsg),await persistStatus(client2,executionId,initialStatus,{offload:statusOffload}),slimStatus(initialStatus)}}let completeNow=!fileReviewPending;initialStatus.phase=completeNow?ExecutionPhase.EXECUTION_COMPLETED:ExecutionPhase.EXECUTION_WAITING_FOR_APPROVAL,completeNow&&(initialStatus.completedAt=utcTimestamp());let structuredOutput,finalText,lastAiMsg=[...initialStatus.messages].reverse().find(m=>m.type===MessageType.MESSAGE_AI);if(lastAiMsg&&(finalText=lastAiMsg.content),setup.hasStructuredOutput){let sr=result.runOutput?.structuredResponse;if(sr!=null&&typeof sr=="object"&&!Array.isArray(sr)?structuredOutput=sr:sr!==void 0&&console.warn(`[ExecuteDeepAgent] structuredResponse is not a plain object for execution ${executionId}: type=${typeof sr}`),structuredOutput===void 0&&finalText){let{extractJsonFromText:extractJsonFromText2}=await Promise.resolve().then(()=>(init_extract_json(),extract_json_exports)),extracted=extractJsonFromText2(finalText);extracted!=null&&typeof extracted=="object"&&!Array.isArray(extracted)&&(structuredOutput=extracted,console.log(`[ExecuteDeepAgent] structured output extracted from final text for execution ${executionId}: finalTextLength=${finalText.length}`))}structuredOutput!==void 0&&(initialStatus.structuredOutput=structuredOutput)}if(setup.execution.spec?.executionConfig?.interactionMode===InteractionMode.PLAN&&finalText&&setup.artifactStorage&&await publishPlanArtifact({status:initialStatus,executionId,planText:finalText,artifactStorage:setup.artifactStorage}),setup.captureMode&&completeNow&&writebackCoordinator&&await processCaptureWriteback(writebackCoordinator,executionId),await persistStatus(client2,executionId,initialStatus,{offload:statusOffload}),console.log(`[ExecuteDeepAgent] ${completeNow?"Completed":"Awaiting file review for"} execution ${executionId}: events=${result.eventsProcessed}, messages=${initialStatus.messages.length}, artifacts=${initialStatus.artifacts.length}, writebacks=${initialStatus.workspaceWriteBacks.length}, hasStructuredOutput=${structuredOutput!==void 0}`),!completeNow)return slimStatus(initialStatus);let slim=slimStatus(initialStatus);return finalText!==void 0&&(slim.final_text=finalText),structuredOutput!==void 0&&(slim.structured=structuredOutput),slim}catch(err){if(err instanceof import_activity3.CancelledFailure){console.log(`[ExecuteDeepAgent] Cancelled (pause) for execution ${executionId}`);let pausedStatus=create(AgentExecutionStatusSchema,{phase:ExecutionPhase.EXECUTION_PAUSED});throw await persistStatus(client2,executionId,pausedStatus).catch(()=>{}),err}if(import_activity3.Context.current().cancellationSignal.aborted){console.log(`[ExecuteDeepAgent] Error during cancellation for ${executionId}, treating as pause: ${err}`);let pausedStatus=create(AgentExecutionStatusSchema,{phase:ExecutionPhase.EXECUTION_PAUSED});throw await persistStatus(client2,executionId,pausedStatus).catch(()=>{}),new import_activity3.CancelledFailure("Activity paused by orchestrator (error during cancellation)")}let errorMessage=err instanceof Error?err.message:String(err),errorType=err instanceof Error?err.constructor.name:"UnknownError";console.error(`[ExecuteDeepAgent] Failed for execution ${executionId}: [${errorType}] ${errorMessage}`);let failedStatus=create(AgentExecutionStatusSchema,{phase:ExecutionPhase.EXECUTION_FAILED,error:`Execution failed: [${errorType}] ${errorMessage}`,completedAt:utcTimestamp(),messages:[create(AgentMessageSchema,{type:MessageType.MESSAGE_SYSTEM,content:`Error: [${errorType}] ${errorMessage}`,timestamp:utcTimestamp()})]});return await persistStatus(client2,executionId,failedStatus),slimStatus(failedStatus)}finally{await cleanup(setup),await releaseWorkspaceLock?.(),activityFinished()}}}}function detectPendingInterrupts(graphState){return graphState.tasks?.flatMap(task2=>(task2.interrupts??[]).filter(intr=>intr.resumeValue===void 0).map(intr=>{let val=intr.value;return{toolCallId:val?.tool_call_id??"",toolName:val?.tool_name??"",mcpServerSlug:val?.mcp_server_slug??"",message:val?.message??"",policySource:val?.policy_source||void 0}}))??[]}function hasPendingToolApprovals(execution){let status=execution.status;if(!status)return!1;let anyWaiting=msgs=>msgs.some(m=>m.toolCalls.some(tc=>tc.status===ToolCallStatus.TOOL_CALL_WAITING_APPROVAL));return anyWaiting(status.messages)?!0:status.subAgentExecutions.some(sa=>anyWaiting(sa.messages))}async function buildCasTurnCaptures2(observer,workspaceRoot,captureClass){let{capturablePaths,unreviewablePaths}=partitionIgnoredPathsBySecret(observer.before.keys(),observer.blockedSecretPaths),casCaptures=[];for(let relPath of capturablePaths){let after=await readFileOrNull3((0,import_node_path32.join)(workspaceRoot,relPath));casCaptures.push({path:relPath,before:observer.before.get(relPath)??null,after,captureClass})}return{casCaptures,unreviewablePaths:[...unreviewablePaths]}}async function readFileOrNull3(absolutePath){try{return await(0,import_promises24.readFile)(absolutePath)}catch{return null}}async function processCaptureWriteback(writebackCoordinator,executionId){await writebackCoordinator.finalize(),console.log(`[ExecuteDeepAgent] capture writeback finalized for execution ${executionId}`)}function shouldSeedFromPersistedTranscript(execution){return(execution.status?.messages.length??0)>0}function seedStatusFromExecution(execution){let seeded=clone(AgentExecutionStatusSchema,execution.status);return seeded.completedAt="",seeded.error="",seeded}async function cleanup(setup){if(setup){if(setup.mcpConnection)try{await setup.mcpConnection.client.close()}catch(err){console.warn("[ExecuteDeepAgent] MCP connection cleanup failed:",err)}await removeStigmerSymlink(setup.workspaceBackend.rootDir)}}var import_promises24,import_node_path32,import_activity3,DEEP_AGENT_HARNESS_ID,init_execute_deep_agent=__esm({"dist/activities/execute-deep-agent/index.js"(){"use strict";import_promises24=require("node:fs/promises"),import_node_path32=require("node:path"),import_activity3=__toESM(require_lib4(),1);init_esm4();init_api_pb3();init_message_pb();init_enum_pb();init_idle_watchdog();init_activity_input();init_status2();init_workspace_lock();init_stigmer_link();init_plan_artifact();init_tool_kind();init_approval_policy();init_stigmer_client();init_setup();init_streaming5();init_streaming_scheduler();init_status_builder();init_inline_publisher();init_writeback_coordinator();init_post_stream();init_hitl2();init_approval_file_change();init_capture();init_progress();init_cas_progress();init_events();init_cas_substrate();init_secret_paths();init_tool_row();init_stamp_flowed_rows();init_command_provenance3();DEEP_AGENT_HARNESS_ID="deep-agent"}});var ensure_thread_exports={};__export(ensure_thread_exports,{createEnsureThreadActivities:()=>createEnsureThreadActivities});function createEnsureThreadActivities(){return{EnsureThread:async(sessionId,agentId)=>{activityStarted();try{if(sessionId){let threadId2=`thread-${sessionId}`;return console.log(`[EnsureThread] Session-based thread: ${threadId2}`),threadId2}let threadId=`ephemeral-${agentId}-${(0,import_node_crypto16.randomUUID)().replace(/-/g,"").slice(0,8)}`;return console.log(`[EnsureThread] Ephemeral thread: ${threadId}`),threadId}finally{activityFinished()}}}}var import_node_crypto16,init_ensure_thread=__esm({"dist/activities/ensure-thread.js"(){"use strict";import_node_crypto16=require("node:crypto");init_idle_watchdog()}});var classify_tool_approvals_exports={};__export(classify_tool_approvals_exports,{buildToolsPayload:()=>buildToolsPayload,classifyTools:()=>classifyTools,createClassifyToolApprovalsActivities:()=>createClassifyToolApprovalsActivities,fallbackApprovals:()=>fallbackApprovals,reconcileBatchClassifications:()=>reconcileBatchClassifications});async function classifyTools(input,options){let{tools:tools3,serverName,serverDescription,mcpServerId}=input;if(tools3.length===0)return[];let model=await getSummarizationModel(options.primaryModel),batches=[];for(let i2=0;i2<tools3.length;i2+=BATCH_SIZE)batches.push(tools3.slice(i2,i2+BATCH_SIZE));console.log(`[ClassifyToolApprovals] Classifying ${tools3.length} tools for '${serverName}' using model '${model}' (${batches.length} batch(es) of up to ${BATCH_SIZE})`);let allApprovals=[];for(let batchIdx=0;batchIdx<batches.length;batchIdx++){let batch=batches[batchIdx];try{let batchResult=await classifyBatch({batch,serverName,serverDescription,model,proxyEndpoint:options.proxyEndpoint,stigmerToken:options.stigmerToken,mcpServerId:mcpServerId??null,batchIdx,totalBatches:batches.length}),{reconciled,failedClosedCount}=reconcileBatchClassifications(batch,batchResult);failedClosedCount>0&&console.warn(`[ClassifyToolApprovals] Batch ${batchIdx+1}/${batches.length} for '${serverName}': ${failedClosedCount} tool(s) missing from classifier output \u2014 failing closed (requires_approval=true)`),allApprovals.push(...reconciled)}catch(err){console.error(`[ClassifyToolApprovals] Batch ${batchIdx+1}/${batches.length} failed for '${serverName}' (${batch.length} tools) \u2014 falling back to requires_approval=true`,err),allApprovals.push(...fallbackApprovals(batch))}}let approved=allApprovals.filter(a=>a.requires_approval);return console.log(`[ClassifyToolApprovals] Classification complete for '${serverName}': ${approved.length}/${allApprovals.length} tools require approval`),approved}async function classifyBatch(params){let{batch,serverName,serverDescription,model,proxyEndpoint,stigmerToken,mcpServerId,batchIdx,totalBatches}=params,maxTokens=Math.max(MIN_MAX_TOKENS,batch.length*MAX_TOKENS_PER_TOOL),{model:llm}=await buildChatModel({modelName:model,proxyEndpoint,stigmerToken:stigmerToken??void 0,headerScope:{mcpServerId:mcpServerId??void 0},maxTokens}),structuredLlm=llm.withStructuredOutput(ClassifyToolApprovalsOutputSchema),toolsPayload=buildToolsPayload(batch),userPrompt=`MCP Server: ${serverName}
|
|
2292
2294
|
Description: ${serverDescription||"No description provided"}
|
|
2293
2295
|
|
|
2294
2296
|
Tools to classify (${batch.length}):
|
|
@@ -2401,7 +2403,7 @@ Each criterion must have name, score (0.0-1.0), and reasoning. Do not include an
|
|
|
2401
2403
|
`,line.length-start>width&&curr>start?result+=line.slice(start,curr)+`
|
|
2402
2404
|
`+line.slice(curr+1):result+=line.slice(start),result.slice(1)}function escapeString(string7){for(var result="",char=0,escapeSeq,i2=0;i2<string7.length;char>=65536?i2+=2:i2++)char=codePointAt(string7,i2),escapeSeq=ESCAPE_SEQUENCES[char],!escapeSeq&&isPrintable(char)?(result+=string7[i2],char>=65536&&(result+=string7[i2+1])):result+=escapeSeq||encodeHex(char);return result}function writeFlowSequence(state,level,object4){var _result="",_tag=state.tag,index2,length,value;for(index2=0,length=object4.length;index2<length;index2+=1)value=object4[index2],state.replacer&&(value=state.replacer.call(object4,String(index2),value)),(writeNode(state,level,value,!1,!1)||typeof value>"u"&&writeNode(state,level,null,!1,!1))&&(_result!==""&&(_result+=","+(state.condenseFlow?"":" ")),_result+=state.dump);state.tag=_tag,state.dump="["+_result+"]"}function writeBlockSequence(state,level,object4,compact){var _result="",_tag=state.tag,index2,length,value;for(index2=0,length=object4.length;index2<length;index2+=1)value=object4[index2],state.replacer&&(value=state.replacer.call(object4,String(index2),value)),(writeNode(state,level+1,value,!0,!0,!1,!0)||typeof value>"u"&&writeNode(state,level+1,null,!0,!0,!1,!0))&&((!compact||_result!=="")&&(_result+=generateNextLine(state,level)),state.dump&&CHAR_LINE_FEED===state.dump.charCodeAt(0)?_result+="-":_result+="- ",_result+=state.dump);state.tag=_tag,state.dump=_result||"[]"}function writeFlowMapping(state,level,object4){var _result="",_tag=state.tag,objectKeyList=Object.keys(object4),index2,length,objectKey,objectValue,pairBuffer;for(index2=0,length=objectKeyList.length;index2<length;index2+=1)pairBuffer="",_result!==""&&(pairBuffer+=", "),state.condenseFlow&&(pairBuffer+='"'),objectKey=objectKeyList[index2],objectValue=object4[objectKey],state.replacer&&(objectValue=state.replacer.call(object4,objectKey,objectValue)),writeNode(state,level,objectKey,!1,!1)&&(state.dump.length>1024&&(pairBuffer+="? "),pairBuffer+=state.dump+(state.condenseFlow?'"':"")+":"+(state.condenseFlow?"":" "),writeNode(state,level,objectValue,!1,!1)&&(pairBuffer+=state.dump,_result+=pairBuffer));state.tag=_tag,state.dump="{"+_result+"}"}function writeBlockMapping(state,level,object4,compact){var _result="",_tag=state.tag,objectKeyList=Object.keys(object4),index2,length,objectKey,objectValue,explicitPair,pairBuffer;if(state.sortKeys===!0)objectKeyList.sort();else if(typeof state.sortKeys=="function")objectKeyList.sort(state.sortKeys);else if(state.sortKeys)throw new exception("sortKeys must be a boolean or a function");for(index2=0,length=objectKeyList.length;index2<length;index2+=1)pairBuffer="",(!compact||_result!=="")&&(pairBuffer+=generateNextLine(state,level)),objectKey=objectKeyList[index2],objectValue=object4[objectKey],state.replacer&&(objectValue=state.replacer.call(object4,objectKey,objectValue)),writeNode(state,level+1,objectKey,!0,!0,!0)&&(explicitPair=state.tag!==null&&state.tag!=="?"||state.dump&&state.dump.length>1024,explicitPair&&(state.dump&&CHAR_LINE_FEED===state.dump.charCodeAt(0)?pairBuffer+="?":pairBuffer+="? "),pairBuffer+=state.dump,explicitPair&&(pairBuffer+=generateNextLine(state,level)),writeNode(state,level+1,objectValue,!0,explicitPair)&&(state.dump&&CHAR_LINE_FEED===state.dump.charCodeAt(0)?pairBuffer+=":":pairBuffer+=": ",pairBuffer+=state.dump,_result+=pairBuffer));state.tag=_tag,state.dump=_result||"{}"}function detectType(state,object4,explicit){var _result,typeList,index2,length,type3,style;for(typeList=explicit?state.explicitTypes:state.implicitTypes,index2=0,length=typeList.length;index2<length;index2+=1)if(type3=typeList[index2],(type3.instanceOf||type3.predicate)&&(!type3.instanceOf||typeof object4=="object"&&object4 instanceof type3.instanceOf)&&(!type3.predicate||type3.predicate(object4))){if(explicit?type3.multi&&type3.representName?state.tag=type3.representName(object4):state.tag=type3.tag:state.tag="?",type3.represent){if(style=state.styleMap[type3.tag]||type3.defaultStyle,_toString.call(type3.represent)==="[object Function]")_result=type3.represent(object4,style);else if(_hasOwnProperty2.call(type3.represent,style))_result=type3.represent[style](object4,style);else throw new exception("!<"+type3.tag+'> tag resolver accepts not "'+style+'" style');state.dump=_result}return!0}return!1}function writeNode(state,level,object4,block,compact,iskey,isblockseq){state.tag=null,state.dump=object4,detectType(state,object4,!1)||detectType(state,object4,!0);var type3=_toString.call(state.dump),inblock=block,tagStr;block&&(block=state.flowLevel<0||state.flowLevel>level);var objectOrArray=type3==="[object Object]"||type3==="[object Array]",duplicateIndex,duplicate;if(objectOrArray&&(duplicateIndex=state.duplicates.indexOf(object4),duplicate=duplicateIndex!==-1),(state.tag!==null&&state.tag!=="?"||duplicate||state.indent!==2&&level>0)&&(compact=!1),duplicate&&state.usedDuplicates[duplicateIndex])state.dump="*ref_"+duplicateIndex;else{if(objectOrArray&&duplicate&&!state.usedDuplicates[duplicateIndex]&&(state.usedDuplicates[duplicateIndex]=!0),type3==="[object Object]")block&&Object.keys(state.dump).length!==0?(writeBlockMapping(state,level,state.dump,compact),duplicate&&(state.dump="&ref_"+duplicateIndex+state.dump)):(writeFlowMapping(state,level,state.dump),duplicate&&(state.dump="&ref_"+duplicateIndex+" "+state.dump));else if(type3==="[object Array]")block&&state.dump.length!==0?(state.noArrayIndent&&!isblockseq&&level>0?writeBlockSequence(state,level-1,state.dump,compact):writeBlockSequence(state,level,state.dump,compact),duplicate&&(state.dump="&ref_"+duplicateIndex+state.dump)):(writeFlowSequence(state,level,state.dump),duplicate&&(state.dump="&ref_"+duplicateIndex+" "+state.dump));else if(type3==="[object String]")state.tag!=="?"&&writeScalar2(state,state.dump,level,iskey,inblock);else{if(type3==="[object Undefined]")return!1;if(state.skipInvalid)return!1;throw new exception("unacceptable kind of an object to dump "+type3)}state.tag!==null&&state.tag!=="?"&&(tagStr=encodeURI(state.tag[0]==="!"?state.tag.slice(1):state.tag).replace(/!/g,"%21"),state.tag[0]==="!"?tagStr="!"+tagStr:tagStr.slice(0,18)==="tag:yaml.org,2002:"?tagStr="!!"+tagStr.slice(18):tagStr="!<"+tagStr+">",state.dump=tagStr+" "+state.dump)}return!0}function getDuplicateReferences(object4,state){var objects=[],duplicatesIndexes=[],index2,length;for(inspectNode(object4,objects,duplicatesIndexes),index2=0,length=duplicatesIndexes.length;index2<length;index2+=1)state.duplicates.push(objects[duplicatesIndexes[index2]]);state.usedDuplicates=new Array(length)}function inspectNode(object4,objects,duplicatesIndexes){var objectKeyList,index2,length;if(object4!==null&&typeof object4=="object")if(index2=objects.indexOf(object4),index2!==-1)duplicatesIndexes.indexOf(index2)===-1&&duplicatesIndexes.push(index2);else if(objects.push(object4),Array.isArray(object4))for(index2=0,length=object4.length;index2<length;index2+=1)inspectNode(object4[index2],objects,duplicatesIndexes);else for(objectKeyList=Object.keys(object4),index2=0,length=objectKeyList.length;index2<length;index2+=1)inspectNode(object4[objectKeyList[index2]],objects,duplicatesIndexes)}function dump$1(input,options){options=options||{};var state=new State(options);state.noRefs||getDuplicateReferences(input,state);var value=input;return state.replacer&&(value=state.replacer.call({"":value},"",value)),writeNode(state,0,value,!0,!0)?state.dump+`
|
|
2403
2405
|
`:""}function renamed(from,to){return function(){throw new Error("Function yaml."+from+" is removed in js-yaml 4. Use yaml."+to+" instead, which is now safe by default.")}}var isNothing_1,isObject_1,toArray_1,repeat_1,isNegativeZero_1,extend_1,common,exception,snippet,TYPE_CONSTRUCTOR_OPTIONS,YAML_NODE_KINDS,type2,schema,str2,seq,map3,failsafe,_null7,bool,int3,YAML_FLOAT_PATTERN,SCIENTIFIC_WITHOUT_DOT,float,json4,core,YAML_DATE_REGEXP,YAML_TIMESTAMP_REGEXP,timestamp,merge3,BASE64_MAP,binary,_hasOwnProperty$3,_toString$2,omap,_toString$1,pairs,_hasOwnProperty$2,set3,_default6,_hasOwnProperty$1,CONTEXT_FLOW_IN,CONTEXT_FLOW_OUT,CONTEXT_BLOCK_IN,CONTEXT_BLOCK_OUT,CHOMPING_CLIP,CHOMPING_STRIP,CHOMPING_KEEP,PATTERN_NON_PRINTABLE,PATTERN_NON_ASCII_LINE_BREAKS,PATTERN_FLOW_INDICATORS,PATTERN_TAG_HANDLE,PATTERN_TAG_URI,simpleEscapeCheck,simpleEscapeMap,i,directiveHandlers,loadAll_1,load_1,loader,_toString,_hasOwnProperty2,CHAR_BOM,CHAR_TAB,CHAR_LINE_FEED,CHAR_CARRIAGE_RETURN,CHAR_SPACE,CHAR_EXCLAMATION,CHAR_DOUBLE_QUOTE,CHAR_SHARP,CHAR_PERCENT,CHAR_AMPERSAND,CHAR_SINGLE_QUOTE,CHAR_ASTERISK,CHAR_COMMA,CHAR_MINUS,CHAR_COLON,CHAR_EQUALS,CHAR_GREATER_THAN,CHAR_QUESTION,CHAR_COMMERCIAL_AT,CHAR_LEFT_SQUARE_BRACKET,CHAR_RIGHT_SQUARE_BRACKET,CHAR_GRAVE_ACCENT,CHAR_LEFT_CURLY_BRACKET,CHAR_VERTICAL_LINE,CHAR_RIGHT_CURLY_BRACKET,ESCAPE_SEQUENCES,DEPRECATED_BOOLEANS_SYNTAX,DEPRECATED_BASE60_SYNTAX,QUOTING_TYPE_SINGLE,QUOTING_TYPE_DOUBLE,STYLE_PLAIN,STYLE_SINGLE,STYLE_LITERAL,STYLE_FOLDED,STYLE_DOUBLE,dump_1,dumper,Type,Schema,FAILSAFE_SCHEMA,JSON_SCHEMA,CORE_SCHEMA,DEFAULT_SCHEMA,load2,loadAll,dump,YAMLException,types2,safeLoad,safeLoadAll,safeDump,jsYaml,init_js_yaml=__esm({"node_modules/js-yaml/dist/js-yaml.mjs"(){isNothing_1=isNothing,isObject_1=isObject7,toArray_1=toArray2,repeat_1=repeat,isNegativeZero_1=isNegativeZero,extend_1=extend3,common={isNothing:isNothing_1,isObject:isObject_1,toArray:toArray_1,repeat:repeat_1,isNegativeZero:isNegativeZero_1,extend:extend_1};YAMLException$1.prototype=Object.create(Error.prototype);YAMLException$1.prototype.constructor=YAMLException$1;YAMLException$1.prototype.toString=function(compact){return this.name+": "+formatError3(this,compact)};exception=YAMLException$1;snippet=makeSnippet,TYPE_CONSTRUCTOR_OPTIONS=["kind","multi","resolve","construct","instanceOf","predicate","represent","representName","defaultStyle","styleAliases"],YAML_NODE_KINDS=["scalar","sequence","mapping"];type2=Type$1;Schema$1.prototype.extend=function(definition){var implicit=[],explicit=[];if(definition instanceof type2)explicit.push(definition);else if(Array.isArray(definition))explicit=explicit.concat(definition);else if(definition&&(Array.isArray(definition.implicit)||Array.isArray(definition.explicit)))definition.implicit&&(implicit=implicit.concat(definition.implicit)),definition.explicit&&(explicit=explicit.concat(definition.explicit));else throw new exception("Schema.extend argument should be a Type, [ Type ], or a schema definition ({ implicit: [...], explicit: [...] })");implicit.forEach(function(type$1){if(!(type$1 instanceof type2))throw new exception("Specified list of YAML types (or a single Type object) contains a non-Type object.");if(type$1.loadKind&&type$1.loadKind!=="scalar")throw new exception("There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.");if(type$1.multi)throw new exception("There is a multi type in the implicit list of a schema. Multi tags can only be listed as explicit.")}),explicit.forEach(function(type$1){if(!(type$1 instanceof type2))throw new exception("Specified list of YAML types (or a single Type object) contains a non-Type object.")});var result=Object.create(Schema$1.prototype);return result.implicit=(this.implicit||[]).concat(implicit),result.explicit=(this.explicit||[]).concat(explicit),result.compiledImplicit=compileList(result,"implicit"),result.compiledExplicit=compileList(result,"explicit"),result.compiledTypeMap=compileMap(result.compiledImplicit,result.compiledExplicit),result};schema=Schema$1,str2=new type2("tag:yaml.org,2002:str",{kind:"scalar",construct:function(data){return data!==null?data:""}}),seq=new type2("tag:yaml.org,2002:seq",{kind:"sequence",construct:function(data){return data!==null?data:[]}}),map3=new type2("tag:yaml.org,2002:map",{kind:"mapping",construct:function(data){return data!==null?data:{}}}),failsafe=new schema({explicit:[str2,seq,map3]});_null7=new type2("tag:yaml.org,2002:null",{kind:"scalar",resolve:resolveYamlNull,construct:constructYamlNull,predicate:isNull,represent:{canonical:function(){return"~"},lowercase:function(){return"null"},uppercase:function(){return"NULL"},camelcase:function(){return"Null"},empty:function(){return""}},defaultStyle:"lowercase"});bool=new type2("tag:yaml.org,2002:bool",{kind:"scalar",resolve:resolveYamlBoolean,construct:constructYamlBoolean,predicate:isBoolean2,represent:{lowercase:function(object4){return object4?"true":"false"},uppercase:function(object4){return object4?"TRUE":"FALSE"},camelcase:function(object4){return object4?"True":"False"}},defaultStyle:"lowercase"});int3=new type2("tag:yaml.org,2002:int",{kind:"scalar",resolve:resolveYamlInteger,construct:constructYamlInteger,predicate:isInteger2,represent:{binary:function(obj){return obj>=0?"0b"+obj.toString(2):"-0b"+obj.toString(2).slice(1)},octal:function(obj){return obj>=0?"0o"+obj.toString(8):"-0o"+obj.toString(8).slice(1)},decimal:function(obj){return obj.toString(10)},hexadecimal:function(obj){return obj>=0?"0x"+obj.toString(16).toUpperCase():"-0x"+obj.toString(16).toUpperCase().slice(1)}},defaultStyle:"decimal",styleAliases:{binary:[2,"bin"],octal:[8,"oct"],decimal:[10,"dec"],hexadecimal:[16,"hex"]}}),YAML_FLOAT_PATTERN=new RegExp("^(?:[-+]?(?:[0-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$");SCIENTIFIC_WITHOUT_DOT=/^[-+]?[0-9]+e/;float=new type2("tag:yaml.org,2002:float",{kind:"scalar",resolve:resolveYamlFloat,construct:constructYamlFloat,predicate:isFloat2,represent:representYamlFloat,defaultStyle:"lowercase"}),json4=failsafe.extend({implicit:[_null7,bool,int3,float]}),core=json4,YAML_DATE_REGEXP=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$"),YAML_TIMESTAMP_REGEXP=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\.([0-9]*))?(?:[ \\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$");timestamp=new type2("tag:yaml.org,2002:timestamp",{kind:"scalar",resolve:resolveYamlTimestamp,construct:constructYamlTimestamp,instanceOf:Date,represent:representYamlTimestamp});merge3=new type2("tag:yaml.org,2002:merge",{kind:"scalar",resolve:resolveYamlMerge}),BASE64_MAP=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=
|
|
2404
|
-
\r`;binary=new type2("tag:yaml.org,2002:binary",{kind:"scalar",resolve:resolveYamlBinary,construct:constructYamlBinary,predicate:isBinary,represent:representYamlBinary}),_hasOwnProperty$3=Object.prototype.hasOwnProperty,_toString$2=Object.prototype.toString;omap=new type2("tag:yaml.org,2002:omap",{kind:"sequence",resolve:resolveYamlOmap,construct:constructYamlOmap}),_toString$1=Object.prototype.toString;pairs=new type2("tag:yaml.org,2002:pairs",{kind:"sequence",resolve:resolveYamlPairs,construct:constructYamlPairs}),_hasOwnProperty$2=Object.prototype.hasOwnProperty;set3=new type2("tag:yaml.org,2002:set",{kind:"mapping",resolve:resolveYamlSet,construct:constructYamlSet}),_default6=core.extend({implicit:[timestamp,merge3],explicit:[binary,omap,pairs,set3]}),_hasOwnProperty$1=Object.prototype.hasOwnProperty,CONTEXT_FLOW_IN=1,CONTEXT_FLOW_OUT=2,CONTEXT_BLOCK_IN=3,CONTEXT_BLOCK_OUT=4,CHOMPING_CLIP=1,CHOMPING_STRIP=2,CHOMPING_KEEP=3,PATTERN_NON_PRINTABLE=/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/,PATTERN_NON_ASCII_LINE_BREAKS=/[\x85\u2028\u2029]/,PATTERN_FLOW_INDICATORS=/[,\[\]\{\}]/,PATTERN_TAG_HANDLE=/^(?:!|!!|![a-z\-]+!)$/i,PATTERN_TAG_URI=/^(?:!|[^,\[\]\{\}])(?:%[0-9a-f]{2}|[0-9a-z\-#;\/\?:@&=\+\$,_\.!~\*'\(\)\[\]])*$/i;simpleEscapeCheck=new Array(256),simpleEscapeMap=new Array(256);for(i=0;i<256;i++)simpleEscapeCheck[i]=simpleEscapeSequence(i)?1:0,simpleEscapeMap[i]=simpleEscapeSequence(i);directiveHandlers={YAML:function(state,name2,args){var match,major2,minor;state.version!==null&&throwError(state,"duplication of %YAML directive"),args.length!==1&&throwError(state,"YAML directive accepts exactly one argument"),match=/^([0-9]+)\.([0-9]+)$/.exec(args[0]),match===null&&throwError(state,"ill-formed argument of the YAML directive"),major2=parseInt(match[1],10),minor=parseInt(match[2],10),major2!==1&&throwError(state,"unacceptable YAML version of the document"),state.version=args[0],state.checkLineBreaks=minor<2,minor!==1&&minor!==2&&throwWarning(state,"unsupported YAML version of the document")},TAG:function(state,name2,args){var handle,prefix;args.length!==2&&throwError(state,"TAG directive accepts exactly two arguments"),handle=args[0],prefix=args[1],PATTERN_TAG_HANDLE.test(handle)||throwError(state,"ill-formed tag handle (first argument) of the TAG directive"),_hasOwnProperty$1.call(state.tagMap,handle)&&throwError(state,'there is a previously declared suffix for "'+handle+'" tag handle'),PATTERN_TAG_URI.test(prefix)||throwError(state,"ill-formed tag prefix (second argument) of the TAG directive");try{prefix=decodeURIComponent(prefix)}catch{throwError(state,"tag prefix is malformed: "+prefix)}state.tagMap[handle]=prefix}};loadAll_1=loadAll$1,load_1=load$1,loader={loadAll:loadAll_1,load:load_1},_toString=Object.prototype.toString,_hasOwnProperty2=Object.prototype.hasOwnProperty,CHAR_BOM=65279,CHAR_TAB=9,CHAR_LINE_FEED=10,CHAR_CARRIAGE_RETURN=13,CHAR_SPACE=32,CHAR_EXCLAMATION=33,CHAR_DOUBLE_QUOTE=34,CHAR_SHARP=35,CHAR_PERCENT=37,CHAR_AMPERSAND=38,CHAR_SINGLE_QUOTE=39,CHAR_ASTERISK=42,CHAR_COMMA=44,CHAR_MINUS=45,CHAR_COLON=58,CHAR_EQUALS=61,CHAR_GREATER_THAN=62,CHAR_QUESTION=63,CHAR_COMMERCIAL_AT=64,CHAR_LEFT_SQUARE_BRACKET=91,CHAR_RIGHT_SQUARE_BRACKET=93,CHAR_GRAVE_ACCENT=96,CHAR_LEFT_CURLY_BRACKET=123,CHAR_VERTICAL_LINE=124,CHAR_RIGHT_CURLY_BRACKET=125,ESCAPE_SEQUENCES={};ESCAPE_SEQUENCES[0]="\\0";ESCAPE_SEQUENCES[7]="\\a";ESCAPE_SEQUENCES[8]="\\b";ESCAPE_SEQUENCES[9]="\\t";ESCAPE_SEQUENCES[10]="\\n";ESCAPE_SEQUENCES[11]="\\v";ESCAPE_SEQUENCES[12]="\\f";ESCAPE_SEQUENCES[13]="\\r";ESCAPE_SEQUENCES[27]="\\e";ESCAPE_SEQUENCES[34]='\\"';ESCAPE_SEQUENCES[92]="\\\\";ESCAPE_SEQUENCES[133]="\\N";ESCAPE_SEQUENCES[160]="\\_";ESCAPE_SEQUENCES[8232]="\\L";ESCAPE_SEQUENCES[8233]="\\P";DEPRECATED_BOOLEANS_SYNTAX=["y","Y","yes","Yes","YES","on","On","ON","n","N","no","No","NO","off","Off","OFF"],DEPRECATED_BASE60_SYNTAX=/^[-+]?[0-9_]+(?::[0-9_]+)+(?:\.[0-9_]*)?$/;QUOTING_TYPE_SINGLE=1,QUOTING_TYPE_DOUBLE=2;STYLE_PLAIN=1,STYLE_SINGLE=2,STYLE_LITERAL=3,STYLE_FOLDED=4,STYLE_DOUBLE=5;dump_1=dump$1,dumper={dump:dump_1};Type=type2,Schema=schema,FAILSAFE_SCHEMA=failsafe,JSON_SCHEMA=json4,CORE_SCHEMA=core,DEFAULT_SCHEMA=_default6,load2=loader.load,loadAll=loader.loadAll,dump=dumper.dump,YAMLException=exception,types2={binary,float,map:map3,null:_null7,pairs,set:set3,timestamp,bool,int:int3,merge:merge3,omap,seq,str:str2},safeLoad=renamed("safeLoad","load"),safeLoadAll=renamed("safeLoadAll","loadAll"),safeDump=renamed("safeDump","dump"),jsYaml={Type,Schema,FAILSAFE_SCHEMA,JSON_SCHEMA,CORE_SCHEMA,DEFAULT_SCHEMA,load:load2,loadAll,dump,YAMLException,types:types2,safeLoad,safeLoadAll,safeDump}}});var require_constants8=__commonJS({"node_modules/semver/internal/constants.js"(exports3,module3){"use strict";var SEMVER_SPEC_VERSION="2.0.0",MAX_SAFE_INTEGER=Number.MAX_SAFE_INTEGER||9007199254740991,MAX_SAFE_COMPONENT_LENGTH=16,MAX_SAFE_BUILD_LENGTH=250,RELEASE_TYPES=["major","premajor","minor","preminor","patch","prepatch","prerelease"];module3.exports={MAX_LENGTH:256,MAX_SAFE_COMPONENT_LENGTH,MAX_SAFE_BUILD_LENGTH,MAX_SAFE_INTEGER,RELEASE_TYPES,SEMVER_SPEC_VERSION,FLAG_INCLUDE_PRERELEASE:1,FLAG_LOOSE:2}}});var require_debug=__commonJS({"node_modules/semver/internal/debug.js"(exports3,module3){"use strict";var debug2=typeof process=="object"&&process.env&&process.env.NODE_DEBUG&&/\bsemver\b/i.test(process.env.NODE_DEBUG)?(...args)=>console.error("SEMVER",...args):()=>{};module3.exports=debug2}});var require_re=__commonJS({"node_modules/semver/internal/re.js"(exports3,module3){"use strict";var{MAX_SAFE_COMPONENT_LENGTH,MAX_SAFE_BUILD_LENGTH,MAX_LENGTH}=require_constants8(),debug2=require_debug();exports3=module3.exports={};var re2=exports3.re=[],safeRe=exports3.safeRe=[],src=exports3.src=[],safeSrc=exports3.safeSrc=[],t=exports3.t={},R=0,LETTERDASHNUMBER="[a-zA-Z0-9-]",safeRegexReplacements=[["\\s",1],["\\d",MAX_LENGTH],[LETTERDASHNUMBER,MAX_SAFE_BUILD_LENGTH]],makeSafeRegex=value=>{for(let[token,max]of safeRegexReplacements)value=value.split(`${token}*`).join(`${token}{0,${max}}`).split(`${token}+`).join(`${token}{1,${max}}`);return value},createToken=(name2,value,isGlobal)=>{let safe=makeSafeRegex(value),index2=R++;debug2(name2,index2,value),t[name2]=index2,src[index2]=value,safeSrc[index2]=safe,re2[index2]=new RegExp(value,isGlobal?"g":void 0),safeRe[index2]=new RegExp(safe,isGlobal?"g":void 0)};createToken("NUMERICIDENTIFIER","0|[1-9]\\d*");createToken("NUMERICIDENTIFIERLOOSE","\\d+");createToken("NONNUMERICIDENTIFIER",`\\d*[a-zA-Z-]${LETTERDASHNUMBER}*`);createToken("MAINVERSION",`(${src[t.NUMERICIDENTIFIER]})\\.(${src[t.NUMERICIDENTIFIER]})\\.(${src[t.NUMERICIDENTIFIER]})`);createToken("MAINVERSIONLOOSE",`(${src[t.NUMERICIDENTIFIERLOOSE]})\\.(${src[t.NUMERICIDENTIFIERLOOSE]})\\.(${src[t.NUMERICIDENTIFIERLOOSE]})`);createToken("PRERELEASEIDENTIFIER",`(?:${src[t.NONNUMERICIDENTIFIER]}|${src[t.NUMERICIDENTIFIER]})`);createToken("PRERELEASEIDENTIFIERLOOSE",`(?:${src[t.NONNUMERICIDENTIFIER]}|${src[t.NUMERICIDENTIFIERLOOSE]})`);createToken("PRERELEASE",`(?:-(${src[t.PRERELEASEIDENTIFIER]}(?:\\.${src[t.PRERELEASEIDENTIFIER]})*))`);createToken("PRERELEASELOOSE",`(?:-?(${src[t.PRERELEASEIDENTIFIERLOOSE]}(?:\\.${src[t.PRERELEASEIDENTIFIERLOOSE]})*))`);createToken("BUILDIDENTIFIER",`${LETTERDASHNUMBER}+`);createToken("BUILD",`(?:\\+(${src[t.BUILDIDENTIFIER]}(?:\\.${src[t.BUILDIDENTIFIER]})*))`);createToken("FULLPLAIN",`v?${src[t.MAINVERSION]}${src[t.PRERELEASE]}?${src[t.BUILD]}?`);createToken("FULL",`^${src[t.FULLPLAIN]}$`);createToken("LOOSEPLAIN",`[v=\\s]*${src[t.MAINVERSIONLOOSE]}${src[t.PRERELEASELOOSE]}?${src[t.BUILD]}?`);createToken("LOOSE",`^${src[t.LOOSEPLAIN]}$`);createToken("GTLT","((?:<|>)?=?)");createToken("XRANGEIDENTIFIERLOOSE",`${src[t.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`);createToken("XRANGEIDENTIFIER",`${src[t.NUMERICIDENTIFIER]}|x|X|\\*`);createToken("XRANGEPLAIN",`[v=\\s]*(${src[t.XRANGEIDENTIFIER]})(?:\\.(${src[t.XRANGEIDENTIFIER]})(?:\\.(${src[t.XRANGEIDENTIFIER]})(?:${src[t.PRERELEASE]})?${src[t.BUILD]}?)?)?`);createToken("XRANGEPLAINLOOSE",`[v=\\s]*(${src[t.XRANGEIDENTIFIERLOOSE]})(?:\\.(${src[t.XRANGEIDENTIFIERLOOSE]})(?:\\.(${src[t.XRANGEIDENTIFIERLOOSE]})(?:${src[t.PRERELEASELOOSE]})?${src[t.BUILD]}?)?)?`);createToken("XRANGE",`^${src[t.GTLT]}\\s*${src[t.XRANGEPLAIN]}$`);createToken("XRANGELOOSE",`^${src[t.GTLT]}\\s*${src[t.XRANGEPLAINLOOSE]}$`);createToken("COERCEPLAIN",`(^|[^\\d])(\\d{1,${MAX_SAFE_COMPONENT_LENGTH}})(?:\\.(\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?(?:\\.(\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?`);createToken("COERCE",`${src[t.COERCEPLAIN]}(?:$|[^\\d])`);createToken("COERCEFULL",src[t.COERCEPLAIN]+`(?:${src[t.PRERELEASE]})?(?:${src[t.BUILD]})?(?:$|[^\\d])`);createToken("COERCERTL",src[t.COERCE],!0);createToken("COERCERTLFULL",src[t.COERCEFULL],!0);createToken("LONETILDE","(?:~>?)");createToken("TILDETRIM",`(\\s*)${src[t.LONETILDE]}\\s+`,!0);exports3.tildeTrimReplace="$1~";createToken("TILDE",`^${src[t.LONETILDE]}${src[t.XRANGEPLAIN]}$`);createToken("TILDELOOSE",`^${src[t.LONETILDE]}${src[t.XRANGEPLAINLOOSE]}$`);createToken("LONECARET","(?:\\^)");createToken("CARETTRIM",`(\\s*)${src[t.LONECARET]}\\s+`,!0);exports3.caretTrimReplace="$1^";createToken("CARET",`^${src[t.LONECARET]}${src[t.XRANGEPLAIN]}$`);createToken("CARETLOOSE",`^${src[t.LONECARET]}${src[t.XRANGEPLAINLOOSE]}$`);createToken("COMPARATORLOOSE",`^${src[t.GTLT]}\\s*(${src[t.LOOSEPLAIN]})$|^$`);createToken("COMPARATOR",`^${src[t.GTLT]}\\s*(${src[t.FULLPLAIN]})$|^$`);createToken("COMPARATORTRIM",`(\\s*)${src[t.GTLT]}\\s*(${src[t.LOOSEPLAIN]}|${src[t.XRANGEPLAIN]})`,!0);exports3.comparatorTrimReplace="$1$2$3";createToken("HYPHENRANGE",`^\\s*(${src[t.XRANGEPLAIN]})\\s+-\\s+(${src[t.XRANGEPLAIN]})\\s*$`);createToken("HYPHENRANGELOOSE",`^\\s*(${src[t.XRANGEPLAINLOOSE]})\\s+-\\s+(${src[t.XRANGEPLAINLOOSE]})\\s*$`);createToken("STAR","(<|>)?=?\\s*\\*");createToken("GTE0","^\\s*>=\\s*0\\.0\\.0\\s*$");createToken("GTE0PRE","^\\s*>=\\s*0\\.0\\.0-0\\s*$")}});var require_parse_options=__commonJS({"node_modules/semver/internal/parse-options.js"(exports3,module3){"use strict";var looseOption=Object.freeze({loose:!0}),emptyOpts=Object.freeze({}),parseOptions=options=>options?typeof options!="object"?looseOption:options:emptyOpts;module3.exports=parseOptions}});var require_identifiers=__commonJS({"node_modules/semver/internal/identifiers.js"(exports3,module3){"use strict";var numeric=/^[0-9]+$/,compareIdentifiers=(a,b)=>{if(typeof a=="number"&&typeof b=="number")return a===b?0:a<b?-1:1;let anum=numeric.test(a),bnum=numeric.test(b);return anum&&bnum&&(a=+a,b=+b),a===b?0:anum&&!bnum?-1:bnum&&!anum?1:a<b?-1:1},rcompareIdentifiers=(a,b)=>compareIdentifiers(b,a);module3.exports={compareIdentifiers,rcompareIdentifiers}}});var require_semver=__commonJS({"node_modules/semver/classes/semver.js"(exports3,module3){"use strict";var debug2=require_debug(),{MAX_LENGTH,MAX_SAFE_INTEGER}=require_constants8(),{safeRe:re2,t}=require_re(),parseOptions=require_parse_options(),{compareIdentifiers}=require_identifiers(),SemVer=class _SemVer{constructor(version5,options){if(options=parseOptions(options),version5 instanceof _SemVer){if(version5.loose===!!options.loose&&version5.includePrerelease===!!options.includePrerelease)return version5;version5=version5.version}else if(typeof version5!="string")throw new TypeError(`Invalid version. Must be a string. Got type "${typeof version5}".`);if(version5.length>MAX_LENGTH)throw new TypeError(`version is longer than ${MAX_LENGTH} characters`);debug2("SemVer",version5,options),this.options=options,this.loose=!!options.loose,this.includePrerelease=!!options.includePrerelease;let m=version5.trim().match(options.loose?re2[t.LOOSE]:re2[t.FULL]);if(!m)throw new TypeError(`Invalid Version: ${version5}`);if(this.raw=version5,this.major=+m[1],this.minor=+m[2],this.patch=+m[3],this.major>MAX_SAFE_INTEGER||this.major<0)throw new TypeError("Invalid major version");if(this.minor>MAX_SAFE_INTEGER||this.minor<0)throw new TypeError("Invalid minor version");if(this.patch>MAX_SAFE_INTEGER||this.patch<0)throw new TypeError("Invalid patch version");m[4]?this.prerelease=m[4].split(".").map(id=>{if(/^[0-9]+$/.test(id)){let num=+id;if(num>=0&&num<MAX_SAFE_INTEGER)return num}return id}):this.prerelease=[],this.build=m[5]?m[5].split("."):[],this.format()}format(){return this.version=`${this.major}.${this.minor}.${this.patch}`,this.prerelease.length&&(this.version+=`-${this.prerelease.join(".")}`),this.version}toString(){return this.version}compare(other){if(debug2("SemVer.compare",this.version,this.options,other),!(other instanceof _SemVer)){if(typeof other=="string"&&other===this.version)return 0;other=new _SemVer(other,this.options)}return other.version===this.version?0:this.compareMain(other)||this.comparePre(other)}compareMain(other){return other instanceof _SemVer||(other=new _SemVer(other,this.options)),this.major<other.major?-1:this.major>other.major?1:this.minor<other.minor?-1:this.minor>other.minor?1:this.patch<other.patch?-1:this.patch>other.patch?1:0}comparePre(other){if(other instanceof _SemVer||(other=new _SemVer(other,this.options)),this.prerelease.length&&!other.prerelease.length)return-1;if(!this.prerelease.length&&other.prerelease.length)return 1;if(!this.prerelease.length&&!other.prerelease.length)return 0;let i2=0;do{let a=this.prerelease[i2],b=other.prerelease[i2];if(debug2("prerelease compare",i2,a,b),a===void 0&&b===void 0)return 0;if(b===void 0)return 1;if(a===void 0)return-1;if(a===b)continue;return compareIdentifiers(a,b)}while(++i2)}compareBuild(other){other instanceof _SemVer||(other=new _SemVer(other,this.options));let i2=0;do{let a=this.build[i2],b=other.build[i2];if(debug2("build compare",i2,a,b),a===void 0&&b===void 0)return 0;if(b===void 0)return 1;if(a===void 0)return-1;if(a===b)continue;return compareIdentifiers(a,b)}while(++i2)}inc(release,identifier,identifierBase){if(release.startsWith("pre")){if(!identifier&&identifierBase===!1)throw new Error("invalid increment argument: identifier is empty");if(identifier){let match=`-${identifier}`.match(this.options.loose?re2[t.PRERELEASELOOSE]:re2[t.PRERELEASE]);if(!match||match[1]!==identifier)throw new Error(`invalid identifier: ${identifier}`)}}switch(release){case"premajor":this.prerelease.length=0,this.patch=0,this.minor=0,this.major++,this.inc("pre",identifier,identifierBase);break;case"preminor":this.prerelease.length=0,this.patch=0,this.minor++,this.inc("pre",identifier,identifierBase);break;case"prepatch":this.prerelease.length=0,this.inc("patch",identifier,identifierBase),this.inc("pre",identifier,identifierBase);break;case"prerelease":this.prerelease.length===0&&this.inc("patch",identifier,identifierBase),this.inc("pre",identifier,identifierBase);break;case"release":if(this.prerelease.length===0)throw new Error(`version ${this.raw} is not a prerelease`);this.prerelease.length=0;break;case"major":(this.minor!==0||this.patch!==0||this.prerelease.length===0)&&this.major++,this.minor=0,this.patch=0,this.prerelease=[];break;case"minor":(this.patch!==0||this.prerelease.length===0)&&this.minor++,this.patch=0,this.prerelease=[];break;case"patch":this.prerelease.length===0&&this.patch++,this.prerelease=[];break;case"pre":{let base=Number(identifierBase)?1:0;if(this.prerelease.length===0)this.prerelease=[base];else{let i2=this.prerelease.length;for(;--i2>=0;)typeof this.prerelease[i2]=="number"&&(this.prerelease[i2]++,i2=-2);if(i2===-1){if(identifier===this.prerelease.join(".")&&identifierBase===!1)throw new Error("invalid increment argument: identifier already exists");this.prerelease.push(base)}}if(identifier){let prerelease=[identifier,base];identifierBase===!1&&(prerelease=[identifier]),compareIdentifiers(this.prerelease[0],identifier)===0?isNaN(this.prerelease[1])&&(this.prerelease=prerelease):this.prerelease=prerelease}break}default:throw new Error(`invalid increment argument: ${release}`)}return this.raw=this.format(),this.build.length&&(this.raw+=`+${this.build.join(".")}`),this}};module3.exports=SemVer}});var require_parse6=__commonJS({"node_modules/semver/functions/parse.js"(exports3,module3){"use strict";var SemVer=require_semver(),parse10=(version5,options,throwErrors=!1)=>{if(version5 instanceof SemVer)return version5;try{return new SemVer(version5,options)}catch(er){if(!throwErrors)return null;throw er}};module3.exports=parse10}});var require_valid=__commonJS({"node_modules/semver/functions/valid.js"(exports3,module3){"use strict";var parse10=require_parse6(),valid=(version5,options)=>{let v=parse10(version5,options);return v?v.version:null};module3.exports=valid}});var require_clean=__commonJS({"node_modules/semver/functions/clean.js"(exports3,module3){"use strict";var parse10=require_parse6(),clean=(version5,options)=>{let s=parse10(version5.trim().replace(/^[=v]+/,""),options);return s?s.version:null};module3.exports=clean}});var require_inc=__commonJS({"node_modules/semver/functions/inc.js"(exports3,module3){"use strict";var SemVer=require_semver(),inc=(version5,release,options,identifier,identifierBase)=>{typeof options=="string"&&(identifierBase=identifier,identifier=options,options=void 0);try{return new SemVer(version5 instanceof SemVer?version5.version:version5,options).inc(release,identifier,identifierBase).version}catch{return null}};module3.exports=inc}});var require_diff=__commonJS({"node_modules/semver/functions/diff.js"(exports3,module3){"use strict";var parse10=require_parse6(),diff=(version1,version22)=>{let v13=parse10(version1,null,!0),v2=parse10(version22,null,!0),comparison=v13.compare(v2);if(comparison===0)return null;let v1Higher=comparison>0,highVersion=v1Higher?v13:v2,lowVersion=v1Higher?v2:v13,highHasPre=!!highVersion.prerelease.length;if(!!lowVersion.prerelease.length&&!highHasPre){if(!lowVersion.patch&&!lowVersion.minor)return"major";if(lowVersion.compareMain(highVersion)===0)return lowVersion.minor&&!lowVersion.patch?"minor":"patch"}let prefix=highHasPre?"pre":"";return v13.major!==v2.major?prefix+"major":v13.minor!==v2.minor?prefix+"minor":v13.patch!==v2.patch?prefix+"patch":"prerelease"};module3.exports=diff}});var require_major=__commonJS({"node_modules/semver/functions/major.js"(exports3,module3){"use strict";var SemVer=require_semver(),major2=(a,loose)=>new SemVer(a,loose).major;module3.exports=major2}});var require_minor=__commonJS({"node_modules/semver/functions/minor.js"(exports3,module3){"use strict";var SemVer=require_semver(),minor=(a,loose)=>new SemVer(a,loose).minor;module3.exports=minor}});var require_patch=__commonJS({"node_modules/semver/functions/patch.js"(exports3,module3){"use strict";var SemVer=require_semver(),patch=(a,loose)=>new SemVer(a,loose).patch;module3.exports=patch}});var require_prerelease=__commonJS({"node_modules/semver/functions/prerelease.js"(exports3,module3){"use strict";var parse10=require_parse6(),prerelease=(version5,options)=>{let parsed=parse10(version5,options);return parsed&&parsed.prerelease.length?parsed.prerelease:null};module3.exports=prerelease}});var require_compare=__commonJS({"node_modules/semver/functions/compare.js"(exports3,module3){"use strict";var SemVer=require_semver(),compare2=(a,b,loose)=>new SemVer(a,loose).compare(new SemVer(b,loose));module3.exports=compare2}});var require_rcompare=__commonJS({"node_modules/semver/functions/rcompare.js"(exports3,module3){"use strict";var compare2=require_compare(),rcompare=(a,b,loose)=>compare2(b,a,loose);module3.exports=rcompare}});var require_compare_loose=__commonJS({"node_modules/semver/functions/compare-loose.js"(exports3,module3){"use strict";var compare2=require_compare(),compareLoose=(a,b)=>compare2(a,b,!0);module3.exports=compareLoose}});var require_compare_build=__commonJS({"node_modules/semver/functions/compare-build.js"(exports3,module3){"use strict";var SemVer=require_semver(),compareBuild=(a,b,loose)=>{let versionA=new SemVer(a,loose),versionB=new SemVer(b,loose);return versionA.compare(versionB)||versionA.compareBuild(versionB)};module3.exports=compareBuild}});var require_sort=__commonJS({"node_modules/semver/functions/sort.js"(exports3,module3){"use strict";var compareBuild=require_compare_build(),sort=(list,loose)=>list.sort((a,b)=>compareBuild(a,b,loose));module3.exports=sort}});var require_rsort=__commonJS({"node_modules/semver/functions/rsort.js"(exports3,module3){"use strict";var compareBuild=require_compare_build(),rsort=(list,loose)=>list.sort((a,b)=>compareBuild(b,a,loose));module3.exports=rsort}});var require_gt=__commonJS({"node_modules/semver/functions/gt.js"(exports3,module3){"use strict";var compare2=require_compare(),gt=(a,b,loose)=>compare2(a,b,loose)>0;module3.exports=gt}});var require_lt=__commonJS({"node_modules/semver/functions/lt.js"(exports3,module3){"use strict";var compare2=require_compare(),lt=(a,b,loose)=>compare2(a,b,loose)<0;module3.exports=lt}});var require_eq=__commonJS({"node_modules/semver/functions/eq.js"(exports3,module3){"use strict";var compare2=require_compare(),eq=(a,b,loose)=>compare2(a,b,loose)===0;module3.exports=eq}});var require_neq=__commonJS({"node_modules/semver/functions/neq.js"(exports3,module3){"use strict";var compare2=require_compare(),neq=(a,b,loose)=>compare2(a,b,loose)!==0;module3.exports=neq}});var require_gte=__commonJS({"node_modules/semver/functions/gte.js"(exports3,module3){"use strict";var compare2=require_compare(),gte=(a,b,loose)=>compare2(a,b,loose)>=0;module3.exports=gte}});var require_lte=__commonJS({"node_modules/semver/functions/lte.js"(exports3,module3){"use strict";var compare2=require_compare(),lte=(a,b,loose)=>compare2(a,b,loose)<=0;module3.exports=lte}});var require_cmp=__commonJS({"node_modules/semver/functions/cmp.js"(exports3,module3){"use strict";var eq=require_eq(),neq=require_neq(),gt=require_gt(),gte=require_gte(),lt=require_lt(),lte=require_lte(),cmp=(a,op,b,loose)=>{switch(op){case"===":return typeof a=="object"&&(a=a.version),typeof b=="object"&&(b=b.version),a===b;case"!==":return typeof a=="object"&&(a=a.version),typeof b=="object"&&(b=b.version),a!==b;case"":case"=":case"==":return eq(a,b,loose);case"!=":return neq(a,b,loose);case">":return gt(a,b,loose);case">=":return gte(a,b,loose);case"<":return lt(a,b,loose);case"<=":return lte(a,b,loose);default:throw new TypeError(`Invalid operator: ${op}`)}};module3.exports=cmp}});var require_coerce=__commonJS({"node_modules/semver/functions/coerce.js"(exports3,module3){"use strict";var SemVer=require_semver(),parse10=require_parse6(),{safeRe:re2,t}=require_re(),coerce3=(version5,options)=>{if(version5 instanceof SemVer)return version5;if(typeof version5=="number"&&(version5=String(version5)),typeof version5!="string")return null;options=options||{};let match=null;if(!options.rtl)match=version5.match(options.includePrerelease?re2[t.COERCEFULL]:re2[t.COERCE]);else{let coerceRtlRegex=options.includePrerelease?re2[t.COERCERTLFULL]:re2[t.COERCERTL],next;for(;(next=coerceRtlRegex.exec(version5))&&(!match||match.index+match[0].length!==version5.length);)(!match||next.index+next[0].length!==match.index+match[0].length)&&(match=next),coerceRtlRegex.lastIndex=next.index+next[1].length+next[2].length;coerceRtlRegex.lastIndex=-1}if(match===null)return null;let major2=match[2],minor=match[3]||"0",patch=match[4]||"0",prerelease=options.includePrerelease&&match[5]?`-${match[5]}`:"",build=options.includePrerelease&&match[6]?`+${match[6]}`:"";return parse10(`${major2}.${minor}.${patch}${prerelease}${build}`,options)};module3.exports=coerce3}});var require_truncate=__commonJS({"node_modules/semver/functions/truncate.js"(exports3,module3){"use strict";var parse10=require_parse6(),constants2=require_constants8(),SemVer=require_semver(),truncate=(version5,truncation,options)=>{if(!constants2.RELEASE_TYPES.includes(truncation))return null;let clonedVersion=cloneInputVersion(version5,options);return clonedVersion&&doTruncation(clonedVersion,truncation)},cloneInputVersion=(version5,options)=>{let versionStringToParse=version5 instanceof SemVer?version5.version:version5;return parse10(versionStringToParse,options)},doTruncation=(version5,truncation)=>{if(isPrerelease(truncation))return version5.version;switch(version5.prerelease=[],truncation){case"major":version5.minor=0,version5.patch=0;break;case"minor":version5.patch=0;break}return version5.format()},isPrerelease=type3=>type3.startsWith("pre");module3.exports=truncate}});var require_lrucache=__commonJS({"node_modules/semver/internal/lrucache.js"(exports3,module3){"use strict";var LRUCache=class{constructor(){this.max=1e3,this.map=new Map}get(key){let value=this.map.get(key);if(value!==void 0)return this.map.delete(key),this.map.set(key,value),value}delete(key){return this.map.delete(key)}set(key,value){if(!this.delete(key)&&value!==void 0){if(this.map.size>=this.max){let firstKey=this.map.keys().next().value;this.delete(firstKey)}this.map.set(key,value)}return this}};module3.exports=LRUCache}});var require_range2=__commonJS({"node_modules/semver/classes/range.js"(exports3,module3){"use strict";var SPACE_CHARACTERS=/\s+/g,Range=class _Range{constructor(range,options){if(options=parseOptions(options),range instanceof _Range)return range.loose===!!options.loose&&range.includePrerelease===!!options.includePrerelease?range:new _Range(range.raw,options);if(range instanceof Comparator)return this.raw=range.value,this.set=[[range]],this.formatted=void 0,this;if(this.options=options,this.loose=!!options.loose,this.includePrerelease=!!options.includePrerelease,this.raw=range.trim().replace(SPACE_CHARACTERS," "),this.set=this.raw.split("||").map(r=>this.parseRange(r.trim())).filter(c=>c.length),!this.set.length)throw new TypeError(`Invalid SemVer Range: ${this.raw}`);if(this.set.length>1){let first=this.set[0];if(this.set=this.set.filter(c=>!isNullSet(c[0])),this.set.length===0)this.set=[first];else if(this.set.length>1){for(let c of this.set)if(c.length===1&&isAny(c[0])){this.set=[c];break}}}this.formatted=void 0}get range(){if(this.formatted===void 0){this.formatted="";for(let i2=0;i2<this.set.length;i2++){i2>0&&(this.formatted+="||");let comps=this.set[i2];for(let k=0;k<comps.length;k++)k>0&&(this.formatted+=" "),this.formatted+=comps[k].toString().trim()}}return this.formatted}format(){return this.range}toString(){return this.range}parseRange(range){let memoKey=((this.options.includePrerelease&&FLAG_INCLUDE_PRERELEASE)|(this.options.loose&&FLAG_LOOSE))+":"+range,cached4=cache5.get(memoKey);if(cached4)return cached4;let loose=this.options.loose,hr=loose?re2[t.HYPHENRANGELOOSE]:re2[t.HYPHENRANGE];range=range.replace(hr,hyphenReplace(this.options.includePrerelease)),debug2("hyphen replace",range),range=range.replace(re2[t.COMPARATORTRIM],comparatorTrimReplace),debug2("comparator trim",range),range=range.replace(re2[t.TILDETRIM],tildeTrimReplace),debug2("tilde trim",range),range=range.replace(re2[t.CARETTRIM],caretTrimReplace),debug2("caret trim",range);let rangeList=range.split(" ").map(comp=>parseComparator(comp,this.options)).join(" ").split(/\s+/).map(comp=>replaceGTE0(comp,this.options));loose&&(rangeList=rangeList.filter(comp=>(debug2("loose invalid filter",comp,this.options),!!comp.match(re2[t.COMPARATORLOOSE])))),debug2("range list",rangeList);let rangeMap=new Map,comparators=rangeList.map(comp=>new Comparator(comp,this.options));for(let comp of comparators){if(isNullSet(comp))return[comp];rangeMap.set(comp.value,comp)}rangeMap.size>1&&rangeMap.has("")&&rangeMap.delete("");let result=[...rangeMap.values()];return cache5.set(memoKey,result),result}intersects(range,options){if(!(range instanceof _Range))throw new TypeError("a Range is required");return this.set.some(thisComparators=>isSatisfiable(thisComparators,options)&&range.set.some(rangeComparators=>isSatisfiable(rangeComparators,options)&&thisComparators.every(thisComparator=>rangeComparators.every(rangeComparator=>thisComparator.intersects(rangeComparator,options)))))}test(version5){if(!version5)return!1;if(typeof version5=="string")try{version5=new SemVer(version5,this.options)}catch{return!1}for(let i2=0;i2<this.set.length;i2++)if(testSet(this.set[i2],version5,this.options))return!0;return!1}};module3.exports=Range;var LRU=require_lrucache(),cache5=new LRU,parseOptions=require_parse_options(),Comparator=require_comparator(),debug2=require_debug(),SemVer=require_semver(),{safeRe:re2,t,comparatorTrimReplace,tildeTrimReplace,caretTrimReplace}=require_re(),{FLAG_INCLUDE_PRERELEASE,FLAG_LOOSE}=require_constants8(),isNullSet=c=>c.value==="<0.0.0-0",isAny=c=>c.value==="",isSatisfiable=(comparators,options)=>{let result=!0,remainingComparators=comparators.slice(),testComparator=remainingComparators.pop();for(;result&&remainingComparators.length;)result=remainingComparators.every(otherComparator=>testComparator.intersects(otherComparator,options)),testComparator=remainingComparators.pop();return result},parseComparator=(comp,options)=>(comp=comp.replace(re2[t.BUILD],""),debug2("comp",comp,options),comp=replaceCarets(comp,options),debug2("caret",comp),comp=replaceTildes(comp,options),debug2("tildes",comp),comp=replaceXRanges(comp,options),debug2("xrange",comp),comp=replaceStars(comp,options),debug2("stars",comp),comp),isX=id=>!id||id.toLowerCase()==="x"||id==="*",replaceTildes=(comp,options)=>comp.trim().split(/\s+/).map(c=>replaceTilde(c,options)).join(" "),replaceTilde=(comp,options)=>{let r=options.loose?re2[t.TILDELOOSE]:re2[t.TILDE];return comp.replace(r,(_,M,m,p,pr)=>{debug2("tilde",comp,_,M,m,p,pr);let ret;return isX(M)?ret="":isX(m)?ret=`>=${M}.0.0 <${+M+1}.0.0-0`:isX(p)?ret=`>=${M}.${m}.0 <${M}.${+m+1}.0-0`:pr?(debug2("replaceTilde pr",pr),ret=`>=${M}.${m}.${p}-${pr} <${M}.${+m+1}.0-0`):ret=`>=${M}.${m}.${p} <${M}.${+m+1}.0-0`,debug2("tilde return",ret),ret})},replaceCarets=(comp,options)=>comp.trim().split(/\s+/).map(c=>replaceCaret(c,options)).join(" "),replaceCaret=(comp,options)=>{debug2("caret",comp,options);let r=options.loose?re2[t.CARETLOOSE]:re2[t.CARET],z2=options.includePrerelease?"-0":"";return comp.replace(r,(_,M,m,p,pr)=>{debug2("caret",comp,_,M,m,p,pr);let ret;return isX(M)?ret="":isX(m)?ret=`>=${M}.0.0${z2} <${+M+1}.0.0-0`:isX(p)?M==="0"?ret=`>=${M}.${m}.0${z2} <${M}.${+m+1}.0-0`:ret=`>=${M}.${m}.0${z2} <${+M+1}.0.0-0`:pr?(debug2("replaceCaret pr",pr),M==="0"?m==="0"?ret=`>=${M}.${m}.${p}-${pr} <${M}.${m}.${+p+1}-0`:ret=`>=${M}.${m}.${p}-${pr} <${M}.${+m+1}.0-0`:ret=`>=${M}.${m}.${p}-${pr} <${+M+1}.0.0-0`):(debug2("no pr"),M==="0"?m==="0"?ret=`>=${M}.${m}.${p}${z2} <${M}.${m}.${+p+1}-0`:ret=`>=${M}.${m}.${p}${z2} <${M}.${+m+1}.0-0`:ret=`>=${M}.${m}.${p} <${+M+1}.0.0-0`),debug2("caret return",ret),ret})},replaceXRanges=(comp,options)=>(debug2("replaceXRanges",comp,options),comp.split(/\s+/).map(c=>replaceXRange(c,options)).join(" ")),replaceXRange=(comp,options)=>{comp=comp.trim();let r=options.loose?re2[t.XRANGELOOSE]:re2[t.XRANGE];return comp.replace(r,(ret,gtlt,M,m,p,pr)=>{debug2("xRange",comp,ret,gtlt,M,m,p,pr);let xM=isX(M),xm=xM||isX(m),xp=xm||isX(p),anyX=xp;return gtlt==="="&&anyX&&(gtlt=""),pr=options.includePrerelease?"-0":"",xM?gtlt===">"||gtlt==="<"?ret="<0.0.0-0":ret="*":gtlt&&anyX?(xm&&(m=0),p=0,gtlt===">"?(gtlt=">=",xm?(M=+M+1,m=0,p=0):(m=+m+1,p=0)):gtlt==="<="&&(gtlt="<",xm?M=+M+1:m=+m+1),gtlt==="<"&&(pr="-0"),ret=`${gtlt+M}.${m}.${p}${pr}`):xm?ret=`>=${M}.0.0${pr} <${+M+1}.0.0-0`:xp&&(ret=`>=${M}.${m}.0${pr} <${M}.${+m+1}.0-0`),debug2("xRange return",ret),ret})},replaceStars=(comp,options)=>(debug2("replaceStars",comp,options),comp.trim().replace(re2[t.STAR],"")),replaceGTE0=(comp,options)=>(debug2("replaceGTE0",comp,options),comp.trim().replace(re2[options.includePrerelease?t.GTE0PRE:t.GTE0],"")),hyphenReplace=incPr=>($0,from,fM,fm,fp,fpr,fb,to,tM,tm,tp,tpr)=>(isX(fM)?from="":isX(fm)?from=`>=${fM}.0.0${incPr?"-0":""}`:isX(fp)?from=`>=${fM}.${fm}.0${incPr?"-0":""}`:fpr?from=`>=${from}`:from=`>=${from}${incPr?"-0":""}`,isX(tM)?to="":isX(tm)?to=`<${+tM+1}.0.0-0`:isX(tp)?to=`<${tM}.${+tm+1}.0-0`:tpr?to=`<=${tM}.${tm}.${tp}-${tpr}`:incPr?to=`<${tM}.${tm}.${+tp+1}-0`:to=`<=${to}`,`${from} ${to}`.trim()),testSet=(set4,version5,options)=>{for(let i2=0;i2<set4.length;i2++)if(!set4[i2].test(version5))return!1;if(version5.prerelease.length&&!options.includePrerelease){for(let i2=0;i2<set4.length;i2++)if(debug2(set4[i2].semver),set4[i2].semver!==Comparator.ANY&&set4[i2].semver.prerelease.length>0){let allowed=set4[i2].semver;if(allowed.major===version5.major&&allowed.minor===version5.minor&&allowed.patch===version5.patch)return!0}return!1}return!0}}});var require_comparator=__commonJS({"node_modules/semver/classes/comparator.js"(exports3,module3){"use strict";var ANY=Symbol("SemVer ANY"),Comparator=class _Comparator{static get ANY(){return ANY}constructor(comp,options){if(options=parseOptions(options),comp instanceof _Comparator){if(comp.loose===!!options.loose)return comp;comp=comp.value}comp=comp.trim().split(/\s+/).join(" "),debug2("comparator",comp,options),this.options=options,this.loose=!!options.loose,this.parse(comp),this.semver===ANY?this.value="":this.value=this.operator+this.semver.version,debug2("comp",this)}parse(comp){let r=this.options.loose?re2[t.COMPARATORLOOSE]:re2[t.COMPARATOR],m=comp.match(r);if(!m)throw new TypeError(`Invalid comparator: ${comp}`);this.operator=m[1]!==void 0?m[1]:"",this.operator==="="&&(this.operator=""),m[2]?this.semver=new SemVer(m[2],this.options.loose):this.semver=ANY}toString(){return this.value}test(version5){if(debug2("Comparator.test",version5,this.options.loose),this.semver===ANY||version5===ANY)return!0;if(typeof version5=="string")try{version5=new SemVer(version5,this.options)}catch{return!1}return cmp(version5,this.operator,this.semver,this.options)}intersects(comp,options){if(!(comp instanceof _Comparator))throw new TypeError("a Comparator is required");return this.operator===""?this.value===""?!0:new Range(comp.value,options).test(this.value):comp.operator===""?comp.value===""?!0:new Range(this.value,options).test(comp.semver):(options=parseOptions(options),options.includePrerelease&&(this.value==="<0.0.0-0"||comp.value==="<0.0.0-0")||!options.includePrerelease&&(this.value.startsWith("<0.0.0")||comp.value.startsWith("<0.0.0"))?!1:!!(this.operator.startsWith(">")&&comp.operator.startsWith(">")||this.operator.startsWith("<")&&comp.operator.startsWith("<")||this.semver.version===comp.semver.version&&this.operator.includes("=")&&comp.operator.includes("=")||cmp(this.semver,"<",comp.semver,options)&&this.operator.startsWith(">")&&comp.operator.startsWith("<")||cmp(this.semver,">",comp.semver,options)&&this.operator.startsWith("<")&&comp.operator.startsWith(">")))}};module3.exports=Comparator;var parseOptions=require_parse_options(),{safeRe:re2,t}=require_re(),cmp=require_cmp(),debug2=require_debug(),SemVer=require_semver(),Range=require_range2()}});var require_satisfies=__commonJS({"node_modules/semver/functions/satisfies.js"(exports3,module3){"use strict";var Range=require_range2(),satisfies2=(version5,range,options)=>{try{range=new Range(range,options)}catch{return!1}return range.test(version5)};module3.exports=satisfies2}});var require_to_comparators=__commonJS({"node_modules/semver/ranges/to-comparators.js"(exports3,module3){"use strict";var Range=require_range2(),toComparators=(range,options)=>new Range(range,options).set.map(comp=>comp.map(c=>c.value).join(" ").trim().split(" "));module3.exports=toComparators}});var require_max_satisfying=__commonJS({"node_modules/semver/ranges/max-satisfying.js"(exports3,module3){"use strict";var SemVer=require_semver(),Range=require_range2(),maxSatisfying=(versions,range,options)=>{let max=null,maxSV=null,rangeObj=null;try{rangeObj=new Range(range,options)}catch{return null}return versions.forEach(v=>{rangeObj.test(v)&&(!max||maxSV.compare(v)===-1)&&(max=v,maxSV=new SemVer(max,options))}),max};module3.exports=maxSatisfying}});var require_min_satisfying=__commonJS({"node_modules/semver/ranges/min-satisfying.js"(exports3,module3){"use strict";var SemVer=require_semver(),Range=require_range2(),minSatisfying=(versions,range,options)=>{let min=null,minSV=null,rangeObj=null;try{rangeObj=new Range(range,options)}catch{return null}return versions.forEach(v=>{rangeObj.test(v)&&(!min||minSV.compare(v)===1)&&(min=v,minSV=new SemVer(min,options))}),min};module3.exports=minSatisfying}});var require_min_version=__commonJS({"node_modules/semver/ranges/min-version.js"(exports3,module3){"use strict";var SemVer=require_semver(),Range=require_range2(),gt=require_gt(),minVersion=(range,loose)=>{range=new Range(range,loose);let minver=new SemVer("0.0.0");if(range.test(minver)||(minver=new SemVer("0.0.0-0"),range.test(minver)))return minver;minver=null;for(let i2=0;i2<range.set.length;++i2){let comparators=range.set[i2],setMin=null;comparators.forEach(comparator=>{let compver=new SemVer(comparator.semver.version);switch(comparator.operator){case">":compver.prerelease.length===0?compver.patch++:compver.prerelease.push(0),compver.raw=compver.format();case"":case">=":(!setMin||gt(compver,setMin))&&(setMin=compver);break;case"<":case"<=":break;default:throw new Error(`Unexpected operation: ${comparator.operator}`)}}),setMin&&(!minver||gt(minver,setMin))&&(minver=setMin)}return minver&&range.test(minver)?minver:null};module3.exports=minVersion}});var require_valid2=__commonJS({"node_modules/semver/ranges/valid.js"(exports3,module3){"use strict";var Range=require_range2(),validRange=(range,options)=>{try{return new Range(range,options).range||"*"}catch{return null}};module3.exports=validRange}});var require_outside=__commonJS({"node_modules/semver/ranges/outside.js"(exports3,module3){"use strict";var SemVer=require_semver(),Comparator=require_comparator(),{ANY}=Comparator,Range=require_range2(),satisfies2=require_satisfies(),gt=require_gt(),lt=require_lt(),lte=require_lte(),gte=require_gte(),outside=(version5,range,hilo,options)=>{version5=new SemVer(version5,options),range=new Range(range,options);let gtfn,ltefn,ltfn,comp,ecomp;switch(hilo){case">":gtfn=gt,ltefn=lte,ltfn=lt,comp=">",ecomp=">=";break;case"<":gtfn=lt,ltefn=gte,ltfn=gt,comp="<",ecomp="<=";break;default:throw new TypeError('Must provide a hilo val of "<" or ">"')}if(satisfies2(version5,range,options))return!1;for(let i2=0;i2<range.set.length;++i2){let comparators=range.set[i2],high=null,low=null;if(comparators.forEach(comparator=>{comparator.semver===ANY&&(comparator=new Comparator(">=0.0.0")),high=high||comparator,low=low||comparator,gtfn(comparator.semver,high.semver,options)?high=comparator:ltfn(comparator.semver,low.semver,options)&&(low=comparator)}),high.operator===comp||high.operator===ecomp||(!low.operator||low.operator===comp)&<efn(version5,low.semver))return!1;if(low.operator===ecomp&<fn(version5,low.semver))return!1}return!0};module3.exports=outside}});var require_gtr=__commonJS({"node_modules/semver/ranges/gtr.js"(exports3,module3){"use strict";var outside=require_outside(),gtr=(version5,range,options)=>outside(version5,range,">",options);module3.exports=gtr}});var require_ltr=__commonJS({"node_modules/semver/ranges/ltr.js"(exports3,module3){"use strict";var outside=require_outside(),ltr=(version5,range,options)=>outside(version5,range,"<",options);module3.exports=ltr}});var require_intersects=__commonJS({"node_modules/semver/ranges/intersects.js"(exports3,module3){"use strict";var Range=require_range2(),intersects=(r1,r2,options)=>(r1=new Range(r1,options),r2=new Range(r2,options),r1.intersects(r2,options));module3.exports=intersects}});var require_simplify=__commonJS({"node_modules/semver/ranges/simplify.js"(exports3,module3){"use strict";var satisfies2=require_satisfies(),compare2=require_compare();module3.exports=(versions,range,options)=>{let set4=[],first=null,prev=null,v=versions.sort((a,b)=>compare2(a,b,options));for(let version5 of v)satisfies2(version5,range,options)?(prev=version5,first||(first=version5)):(prev&&set4.push([first,prev]),prev=null,first=null);first&&set4.push([first,null]);let ranges=[];for(let[min,max]of set4)min===max?ranges.push(min):!max&&min===v[0]?ranges.push("*"):max?min===v[0]?ranges.push(`<=${max}`):ranges.push(`${min} - ${max}`):ranges.push(`>=${min}`);let simplified=ranges.join(" || "),original=typeof range.raw=="string"?range.raw:String(range);return simplified.length<original.length?simplified:range}}});var require_subset=__commonJS({"node_modules/semver/ranges/subset.js"(exports3,module3){"use strict";var Range=require_range2(),Comparator=require_comparator(),{ANY}=Comparator,satisfies2=require_satisfies(),compare2=require_compare(),subset=(sub,dom,options={})=>{if(sub===dom)return!0;sub=new Range(sub,options),dom=new Range(dom,options);let sawNonNull=!1;OUTER:for(let simpleSub of sub.set){for(let simpleDom of dom.set){let isSub=simpleSubset(simpleSub,simpleDom,options);if(sawNonNull=sawNonNull||isSub!==null,isSub)continue OUTER}if(sawNonNull)return!1}return!0},minimumVersionWithPreRelease=[new Comparator(">=0.0.0-0")],minimumVersion=[new Comparator(">=0.0.0")],simpleSubset=(sub,dom,options)=>{if(sub===dom)return!0;if(sub.length===1&&sub[0].semver===ANY){if(dom.length===1&&dom[0].semver===ANY)return!0;options.includePrerelease?sub=minimumVersionWithPreRelease:sub=minimumVersion}if(dom.length===1&&dom[0].semver===ANY){if(options.includePrerelease)return!0;dom=minimumVersion}let eqSet=new Set,gt,lt;for(let c of sub)c.operator===">"||c.operator===">="?gt=higherGT(gt,c,options):c.operator==="<"||c.operator==="<="?lt=lowerLT(lt,c,options):eqSet.add(c.semver);if(eqSet.size>1)return null;let gtltComp;if(gt&<){if(gtltComp=compare2(gt.semver,lt.semver,options),gtltComp>0)return null;if(gtltComp===0&&(gt.operator!==">="||lt.operator!=="<="))return null}for(let eq of eqSet){if(gt&&!satisfies2(eq,String(gt),options)||lt&&!satisfies2(eq,String(lt),options))return null;for(let c of dom)if(!satisfies2(eq,String(c),options))return!1;return!0}let higher,lower,hasDomLT,hasDomGT,needDomLTPre=lt&&!options.includePrerelease&<.semver.prerelease.length?lt.semver:!1,needDomGTPre=gt&&!options.includePrerelease&>.semver.prerelease.length?gt.semver:!1;needDomLTPre&&needDomLTPre.prerelease.length===1&<.operator==="<"&&needDomLTPre.prerelease[0]===0&&(needDomLTPre=!1);for(let c of dom){if(hasDomGT=hasDomGT||c.operator===">"||c.operator===">=",hasDomLT=hasDomLT||c.operator==="<"||c.operator==="<=",gt){if(needDomGTPre&&c.semver.prerelease&&c.semver.prerelease.length&&c.semver.major===needDomGTPre.major&&c.semver.minor===needDomGTPre.minor&&c.semver.patch===needDomGTPre.patch&&(needDomGTPre=!1),c.operator===">"||c.operator===">="){if(higher=higherGT(gt,c,options),higher===c&&higher!==gt)return!1}else if(gt.operator===">="&&!satisfies2(gt.semver,String(c),options))return!1}if(lt){if(needDomLTPre&&c.semver.prerelease&&c.semver.prerelease.length&&c.semver.major===needDomLTPre.major&&c.semver.minor===needDomLTPre.minor&&c.semver.patch===needDomLTPre.patch&&(needDomLTPre=!1),c.operator==="<"||c.operator==="<="){if(lower=lowerLT(lt,c,options),lower===c&&lower!==lt)return!1}else if(lt.operator==="<="&&!satisfies2(lt.semver,String(c),options))return!1}if(!c.operator&&(lt||gt)&>ltComp!==0)return!1}return!(gt&&hasDomLT&&!lt&>ltComp!==0||lt&&hasDomGT&&!gt&>ltComp!==0||needDomGTPre||needDomLTPre)},higherGT=(a,b,options)=>{if(!a)return b;let comp=compare2(a.semver,b.semver,options);return comp>0?a:comp<0||b.operator===">"&&a.operator===">="?b:a},lowerLT=(a,b,options)=>{if(!a)return b;let comp=compare2(a.semver,b.semver,options);return comp<0?a:comp>0||b.operator==="<"&&a.operator==="<="?b:a};module3.exports=subset}});var require_semver2=__commonJS({"node_modules/semver/index.js"(exports3,module3){"use strict";var internalRe=require_re(),constants2=require_constants8(),SemVer=require_semver(),identifiers=require_identifiers(),parse10=require_parse6(),valid=require_valid(),clean=require_clean(),inc=require_inc(),diff=require_diff(),major2=require_major(),minor=require_minor(),patch=require_patch(),prerelease=require_prerelease(),compare2=require_compare(),rcompare=require_rcompare(),compareLoose=require_compare_loose(),compareBuild=require_compare_build(),sort=require_sort(),rsort=require_rsort(),gt=require_gt(),lt=require_lt(),eq=require_eq(),neq=require_neq(),gte=require_gte(),lte=require_lte(),cmp=require_cmp(),coerce3=require_coerce(),truncate=require_truncate(),Comparator=require_comparator(),Range=require_range2(),satisfies2=require_satisfies(),toComparators=require_to_comparators(),maxSatisfying=require_max_satisfying(),minSatisfying=require_min_satisfying(),minVersion=require_min_version(),validRange=require_valid2(),outside=require_outside(),gtr=require_gtr(),ltr=require_ltr(),intersects=require_intersects(),simplifyRange=require_simplify(),subset=require_subset();module3.exports={parse:parse10,valid,clean,inc,diff,major:major2,minor,patch,prerelease,compare:compare2,rcompare,compareLoose,compareBuild,sort,rsort,gt,lt,eq,neq,gte,lte,cmp,coerce:coerce3,truncate,Comparator,Range,satisfies:satisfies2,toComparators,maxSatisfying,minSatisfying,minVersion,validRange,outside,gtr,ltr,intersects,simplifyRange,subset,SemVer,re:internalRe.re,src:internalRe.src,tokens:internalRe.t,SEMVER_SPEC_VERSION:constants2.SEMVER_SPEC_VERSION,RELEASE_TYPES:constants2.RELEASE_TYPES,compareIdentifiers:identifiers.compareIdentifiers,rcompareIdentifiers:identifiers.rcompareIdentifiers}}});function loadWorkflowFromYaml(yamlContent){let raw=jsYaml.load(yamlContent);if(!raw||typeof raw!="object")throw new Error("Invalid workflow YAML: document is not an object");let document2=parseDocument(raw.document);validateDslVersion(document2.dsl);let doList=parseTaskList(raw.do);if(doList.length===0)throw new Error("Workflow must have at least one task in 'do'");return{document:document2,do:doList,input:raw.input?parseInputDef(raw.input):void 0,output:raw.output?parseOutputDef(raw.output):void 0}}function parseDocument(raw){if(!raw||typeof raw!="object")throw new Error("Workflow must have a 'document' field");let doc=raw;if(typeof doc.dsl!="string")throw new Error("document.dsl must be a string");if(typeof doc.name!="string")throw new Error("document.name must be a string");return{dsl:doc.dsl,name:doc.name,namespace:typeof doc.namespace=="string"?doc.namespace:void 0,version:typeof doc.version=="string"?doc.version:void 0,description:typeof doc.description=="string"?doc.description:void 0}}function validateDslVersion(dsl){if(!(0,import_semver2.satisfies)(dsl,SUPPORTED_DSL_RANGE))throw new Error(`Unsupported DSL version '${dsl}'. Supported range: ${SUPPORTED_DSL_RANGE}`)}function parseTaskList(raw){if(!Array.isArray(raw))throw new Error("'do' must be an array of task entries");return raw.map((entry,index2)=>{if(!entry||typeof entry!="object")throw new Error(`Task entry at index ${index2} is not an object`);let keys=Object.keys(entry);if(keys.length!==1)throw new Error(`Task entry at index ${index2} must have exactly one key (task name), got: ${keys.join(", ")}`);let taskName=keys[0],taskRaw=entry[taskName];return{key:taskName,task:discriminateTask(taskName,taskRaw)}})}function discriminateTask(taskName,raw){let base=parseTaskBase(raw);if("set"in raw)return{kind:"set",...base,set:raw.set};if("switch"in raw)return{kind:"switch",...base,switch:parseSwitchCases(raw.switch)};if("do"in raw&&!("for"in raw)&&!("try"in raw))return{kind:"do",...base,do:parseTaskList(raw.do)};if("for"in raw){let forConfig=raw.for;return{kind:"for",...base,for:{each:typeof forConfig.each=="string"?forConfig.each:void 0,in:forConfig.in,at:typeof forConfig.at=="string"?forConfig.at:void 0},while:typeof raw.while=="string"?raw.while:void 0,do:parseTaskList(raw.do)}}if("fork"in raw){let forkConfig=raw.fork;return{kind:"fork",...base,fork:{branches:parseTaskList(forkConfig.branches),compete:typeof forkConfig.compete=="boolean"?forkConfig.compete:void 0}}}if("try"in raw)return{kind:"try",...base,try:parseTaskList(raw.try),catch:parseCatchConfig(raw.catch)};if("wait"in raw)return{kind:"wait",...base,wait:raw.wait};if("listen"in raw)return{kind:"listen",...base,listen:raw.listen};if("raise"in raw)return{kind:"raise",...base,raise:parseRaiseConfig(taskName,raw.raise)};if("call"in raw){let callValue=raw.call;return callValue==="http"?{kind:"call:http",...base,call:"http",with:raw.with}:callValue==="grpc"?{kind:"call:grpc",...base,call:"grpc",with:raw.with}:callValue==="agent"?{kind:"call:agent",...base,call:"agent",with:parseAgentCallConfig(raw.with)}:callValue==="human_input"?{kind:"human_input",...base,humanInput:parseHumanInputConfig(taskName,raw.with)}:{kind:"call:function",...base,call:callValue,with:raw.with}}if("run"in raw)return{kind:"run",...base,run:raw.run};throw new Error(`Cannot determine task type for '${taskName}'. Expected one of: set, switch, do, for, fork, try, wait, listen, raise, call, run`)}function parseTaskBase(raw){return{if:typeof raw.if=="string"?raw.if:void 0,input:raw.input?parseInputDef(raw.input):void 0,output:raw.output?parseOutputDef(raw.output):void 0,export:raw.export?parseExportDef(raw.export):void 0,then:typeof raw.then=="string"?raw.then:void 0,metadata:raw.metadata}}function parseSwitchCases(raw){if(!Array.isArray(raw))throw new Error("'switch' must be an array of cases");return raw.map((entry,index2)=>{if(!entry||typeof entry!="object")throw new Error(`Switch case at index ${index2} is not an object`);let keys=Object.keys(entry);if(keys.length!==1)throw new Error(`Switch case at index ${index2} must have exactly one key (case name)`);let caseName=keys[0],caseRaw=entry[caseName];return{name:caseName,when:typeof caseRaw.when=="string"?caseRaw.when:void 0,then:caseRaw.then}})}function parseCatchConfig(raw){if(!raw||typeof raw!="object")return{};let catchRaw=raw;return{errors:catchRaw.errors,as:typeof catchRaw.as=="string"?catchRaw.as:void 0,when:typeof catchRaw.when=="string"?catchRaw.when:void 0,do:catchRaw.do?parseTaskList(catchRaw.do):void 0,retry:catchRaw.retry?parseRetryConfig(catchRaw.retry):void 0}}function parseRetryConfig(raw){if(!raw||typeof raw!="object")return{};let obj=raw;return{when:typeof obj.when=="string"?obj.when:void 0,exceptWhen:typeof obj.exceptWhen=="string"?obj.exceptWhen:void 0,delay:obj.delay?parseDurationDef(obj.delay):void 0,backoff:obj.backoff?parseBackoffConfig(obj.backoff):void 0,limit:obj.limit?parseRetryLimit(obj.limit):void 0,jitter:obj.jitter?parseJitterConfig(obj.jitter):void 0}}function parseDurationDef(raw){if(!raw||typeof raw!="object")return{};let obj=raw;return{days:typeof obj.days=="number"?obj.days:void 0,hours:typeof obj.hours=="number"?obj.hours:void 0,minutes:typeof obj.minutes=="number"?obj.minutes:void 0,seconds:typeof obj.seconds=="number"?obj.seconds:void 0,milliseconds:typeof obj.milliseconds=="number"?obj.milliseconds:void 0}}function parseBackoffConfig(raw){if(!raw||typeof raw!="object")return{};let obj=raw,present=["constant","exponential","linear"].filter(s=>s in obj);if(present.length>1)throw new Error(`Retry backoff must specify exactly one strategy (constant, exponential, or linear), got: ${present.join(", ")}`);return{constant:obj.constant!=null?obj.constant:void 0,exponential:obj.exponential!=null?obj.exponential:void 0,linear:obj.linear!=null?obj.linear:void 0}}function parseRetryLimit(raw){if(!raw||typeof raw!="object")return{};let obj=raw,attempt;if(obj.attempt&&typeof obj.attempt=="object"){let count=obj.attempt.count;typeof count=="number"&&count>0&&Number.isInteger(count)&&(attempt={count})}return{attempt,duration:obj.duration?parseDurationDef(obj.duration):void 0}}function parseJitterConfig(raw){if(!raw||typeof raw!="object")return{};let obj=raw;return{from:obj.from?parseDurationDef(obj.from):void 0,to:obj.to?parseDurationDef(obj.to):void 0}}function parseInputDef(raw){if(typeof raw!="object"||raw===null)return{};let obj=raw;return{from:obj.from,schema:obj.schema}}function parseOutputDef(raw){if(typeof raw!="object"||raw===null)return{};let obj=raw;return{as:obj.as,schema:obj.schema}}function parseExportDef(raw){if(typeof raw!="object"||raw===null)return{};let obj=raw;return{as:obj.as,schema:obj.schema}}function parseRaiseConfig(taskName,raw){if(!raw||typeof raw!="object")throw new Error(`raise task '${taskName}' requires an error definition`);let errorDef=raw.error;if(!errorDef||typeof errorDef!="object")throw new Error(`raise task '${taskName}' requires 'error' in raise definition`);if(typeof errorDef.type!="string"||!errorDef.type)throw new Error(`raise task '${taskName}' requires 'error.type' (string)`);if(typeof errorDef.status!="number")throw new Error(`raise task '${taskName}' requires 'error.status' (number)`);return{error:{type:errorDef.type,status:errorDef.status,title:typeof errorDef.title=="string"?errorDef.title:void 0,detail:typeof errorDef.detail=="string"?errorDef.detail:void 0,instance:typeof errorDef.instance=="string"?errorDef.instance:void 0}}}function parseAgentCallConfig(raw){if(!raw||typeof raw!="object")throw new Error("call:agent task requires a 'with' configuration block");let obj=raw;if(typeof obj.agent!="string"||!obj.agent)throw new Error("call:agent requires 'agent' (slug or org/slug) in 'with'");if(typeof obj.message!="string"||!obj.message)throw new Error("call:agent requires 'message' in 'with'");let harness=typeof obj.harness=="string"?HARNESS_SHORTHANDS[obj.harness.toLowerCase()]??obj.harness:void 0;return{agent:obj.agent,message:obj.message,org:typeof obj.org=="string"?obj.org:void 0,env:obj.env,config:obj.config,output:obj.output,harness}}function parseHumanInputConfig(taskName,raw){if(!raw||typeof raw!="object")throw new Error(`human_input task '${taskName}' requires a 'with' configuration block`);let obj=raw;if(typeof obj.prompt!="string"||!obj.prompt)throw new Error(`human_input task '${taskName}' requires 'prompt' in 'with'`);return{prompt:obj.prompt,outcomes:Array.isArray(obj.outcomes)&&obj.outcomes.length>0?obj.outcomes.map(o=>({name:o.name,label:o.label,then:o.then})):void 0,formSchema:obj.form_schema&&typeof obj.form_schema=="object"?obj.form_schema:void 0,approvers:Array.isArray(obj.approvers)?obj.approvers.filter(a=>typeof a=="string"):void 0,timeout:typeof obj.timeout=="number"?obj.timeout:void 0,onTimeout:obj.on_timeout??void 0}}var import_semver2,SUPPORTED_DSL_RANGE,HARNESS_SHORTHANDS,init_loader=__esm({"dist/workflow-engine/loader.js"(){"use strict";init_js_yaml();import_semver2=__toESM(require_semver2(),1),SUPPORTED_DSL_RANGE=">=1.0.0 <2.0.0";HARNESS_SHORTHANDS={native:"HARNESS_NATIVE",cursor:"HARNESS_CURSOR"}}});var hydrate_workflow_execution_exports={};__export(hydrate_workflow_execution_exports,{createHydrateWorkflowActivities:()=>createHydrateWorkflowActivities,hydrateWorkflowExecution:()=>hydrateWorkflowExecution});function createHydrateWorkflowActivities(config4){let client2=new StigmerClient({endpoint:config4.stigmerBackendEndpoint,token:config4.stigmerToken,tokenRef:config4.stigmerTokenRef});return{HydrateWorkflowExecution:input=>hydrateWorkflowExecution(input,client2)}}async function hydrateWorkflowExecution(input,client2){let{execution_id,workflow_instance_id,workflow_id,org_id}=input,workflowExecution=await fetchWorkflowExecution(client2,execution_id),triggerMessage=workflowExecution.spec?.triggerMessage??"",versionHash=workflowExecution.status?.workflowVersionHash,resolvedWorkflowId=await resolveWorkflowId(client2,workflow_id,workflow_instance_id),yaml2=await fetchWorkflowYaml(client2,resolvedWorkflowId,versionHash),model=parseWorkflowYaml(yaml2,resolvedWorkflowId),env=await fetchAndFlattenEnv(client2,execution_id),workflow_input=parseTriggerMessage(triggerMessage);return{model,workflow_input,env,metadata:{execution_id,workflow_id:resolvedWorkflowId,workflow_instance_id,org_id}}}async function fetchWorkflowExecution(client2,executionId){try{return await client2.getWorkflowExecution(executionId)}catch(err){let code=err?.code;throw code===5||code==="not_found"||code==="NOT_FOUND"?import_activity14.ApplicationFailure.nonRetryable(`WorkflowExecution '${executionId}' not found`,"WORKFLOW_EXECUTION_NOT_FOUND"):err}}async function resolveWorkflowId(client2,workflowId,workflowInstanceId){if(workflowId)return workflowId;if(!workflowInstanceId)throw import_activity14.ApplicationFailure.nonRetryable("Neither workflow_id nor workflow_instance_id provided \u2014 cannot resolve workflow","MISSING_WORKFLOW_REFERENCE");try{let resolved=(await client2.getWorkflowInstance(workflowInstanceId)).spec?.workflowId;if(!resolved)throw import_activity14.ApplicationFailure.nonRetryable(`WorkflowInstance '${workflowInstanceId}' has no workflow_id in spec`,"INVALID_WORKFLOW_INSTANCE");return resolved}catch(err){if(err instanceof import_activity14.ApplicationFailure)throw err;let code=err?.code;throw code===5||code==="not_found"||code==="NOT_FOUND"?import_activity14.ApplicationFailure.nonRetryable(`WorkflowInstance '${workflowInstanceId}' not found`,"WORKFLOW_INSTANCE_NOT_FOUND"):err}}async function fetchWorkflowYaml(client2,workflowId,versionHash){if(versionHash)try{let versionEntry=await client2.getWorkflowVersion(workflowId,versionHash);if(versionEntry?.validatedYaml)return console.log(`[hydrate] Resolved workflow YAML from pinned version: hash=${versionHash.slice(0,12)}...`),versionEntry.validatedYaml}catch(err){console.warn(`[hydrate] Failed to fetch workflow version ${versionHash.slice(0,12)}... \u2014 falling back to live workflow fetch`,err)}return fetchAndValidateWorkflowYamlLive(client2,workflowId)}async function fetchAndValidateWorkflowYamlLive(client2,workflowId){let workflow;try{workflow=await client2.getWorkflow(workflowId)}catch(err){let code=err?.code;throw code===5||code==="not_found"||code==="NOT_FOUND"?import_activity14.ApplicationFailure.nonRetryable(`Workflow '${workflowId}' not found`,"WORKFLOW_NOT_FOUND"):err}let validation=workflow.status?.serverlessWorkflowValidation;if(!validation)throw import_activity14.ApplicationFailure.nonRetryable(`Workflow '${workflowId}' has no serverless_workflow_validation in status \u2014 the workflow may not have been validated yet`,"MISSING_VALIDATION");switch(validation.state){case ValidationState2.VALID:break;case ValidationState2.PENDING:throw import_activity14.ApplicationFailure.retryable(`Workflow '${workflowId}' validation is still in progress \u2014 retrying`,"VALIDATION_PENDING");case ValidationState2.INVALID:throw import_activity14.ApplicationFailure.nonRetryable(`Workflow '${workflowId}' validation failed: ${validation.errors.join("; ")}`,"VALIDATION_INVALID");case ValidationState2.FAILED:throw import_activity14.ApplicationFailure.nonRetryable(`Workflow '${workflowId}' validation encountered a system error \u2014 retry validation or contact support`,"VALIDATION_FAILED");default:throw import_activity14.ApplicationFailure.nonRetryable(`Workflow '${workflowId}' has unexpected validation state: ${validation.state}`,"VALIDATION_UNKNOWN_STATE")}let yaml2=validation.yaml;if(!yaml2)throw import_activity14.ApplicationFailure.nonRetryable(`Workflow '${workflowId}' has VALID validation state but empty YAML \u2014 the workflow status may not be fully populated (known OSS gap: PopulateServerlessValidation step is not implemented in the Go server)`,"YAML_EMPTY");return yaml2}function parseWorkflowYaml(yaml2,workflowId){try{return loadWorkflowFromYaml(yaml2)}catch(err){let message=err instanceof Error?err.message:String(err);throw import_activity14.ApplicationFailure.nonRetryable(`Failed to parse CNCF Serverless Workflow YAML for workflow '${workflowId}': ${message}`,"YAML_PARSE_ERROR")}}async function fetchAndFlattenEnv(client2,executionId){let execCtx;try{execCtx=await client2.getExecutionContextByExecutionId(executionId)}catch(err){let code=err?.code;if(code===5||code==="not_found"||code==="NOT_FOUND")return console.log(`[hydrate] No ExecutionContext found for execution ${executionId} \u2014 proceeding with empty environment`),{};throw err}let env={},data=execCtx.spec?.data;if(data)for(let[key,execValue]of Object.entries(data))env[key]=execValue.value;return console.log(`[hydrate] Resolved environment: env_count=${Object.keys(env).length}`),env}function parseTriggerMessage(triggerMessage){if(!triggerMessage)return null;try{return JSON.parse(triggerMessage)}catch{return null}}var import_activity14,init_hydrate_workflow_execution=__esm({"dist/activities/hydrate-workflow-execution.js"(){"use strict";import_activity14=__toESM(require_lib4(),1);init_stigmer_client();init_loader();init_validation_pb()}});var workflow_event_activities_exports={};__export(workflow_event_activities_exports,{createWorkflowEventActivities:()=>createWorkflowEventActivities,emitWorkflowEvents:()=>emitWorkflowEvents,initSequenceFromEventLog:()=>initSequenceFromEventLog,loadRecoveryContext:()=>loadRecoveryContext,toProtoEvent:()=>toProtoEvent});function toJsonObject(value){if(value!=null&&!(typeof value!="object"||Array.isArray(value)))try{return JSON.parse(JSON.stringify(value))}catch{return}}function buildClient2(){let config4=loadConfig();return new StigmerClient({endpoint:config4.stigmerBackendEndpoint,token:config4.stigmerToken})}function nextSequence(){return sequenceCounter+=1,BigInt(sequenceCounter)}async function initSequenceFromEventLog(executionId){if(!executionId){sequenceCounter=0;return}let highWaterMark=await buildClient2().getEventLogHighWaterMark(executionId);sequenceCounter=Number(highWaterMark)}function toProtoEvent(desc){let base=create(WorkflowExecutionEventSchema,{eventId:crypto.randomUUID(),sequenceNumber:nextSequence(),occurredAt:desc.occurredAt,taskName:desc.taskName??""});switch(desc.type){case"execution_started":base.eventType=WorkflowEventType.execution_started,base.payload={case:"executionStarted",value:create(ExecutionStartedPayloadSchema,{totalTasks:desc.totalTasks,workflowId:desc.workflowId,workflowInstanceId:desc.workflowInstanceId})};break;case"execution_completed":base.eventType=WorkflowEventType.execution_completed,base.payload={case:"executionCompleted",value:create(ExecutionCompletedPayloadSchema,{durationMs:BigInt(desc.durationMs),totalCostMicros:BigInt(desc.totalCostMicros),totalTokens:BigInt(desc.totalTokens)})};break;case"execution_failed":base.eventType=WorkflowEventType.execution_failed,base.payload={case:"executionFailed",value:create(ExecutionFailedPayloadSchema,{error:desc.error,failedTaskName:desc.failedTaskName,durationMs:BigInt(desc.durationMs)})};break;case"task_started":base.eventType=WorkflowEventType.task_started,base.payload={case:"taskStarted",value:create(TaskStartedPayloadSchema,{taskKind:TASK_KIND_MAP[desc.taskKind]??0,attemptNumber:desc.attemptNumber})};break;case"task_completed":base.eventType=WorkflowEventType.task_completed,base.payload={case:"taskCompleted",value:create(TaskCompletedPayloadSchema,{taskKind:TASK_KIND_MAP[desc.taskKind]??0,durationMs:BigInt(desc.durationMs),costMicros:BigInt(desc.costMicros),tokensUsed:BigInt(desc.tokensUsed)})};break;case"task_failed":base.eventType=WorkflowEventType.task_failed,base.payload={case:"taskFailed",value:create(TaskFailedPayloadSchema,{taskKind:TASK_KIND_MAP[desc.taskKind]??0,error:desc.error,attemptNumber:desc.attemptNumber,willRetry:desc.willRetry,durationMs:BigInt(desc.durationMs)})};break;case"task_skipped":base.eventType=WorkflowEventType.task_skipped,base.payload={case:"taskSkipped",value:create(TaskSkippedPayloadSchema,{taskKind:TASK_KIND_MAP[desc.taskKind]??0,reason:desc.reason})};break;case"task_retrying":base.eventType=WorkflowEventType.task_retrying,base.payload={case:"taskRetrying",value:create(TaskRetryingPayloadSchema,{failedAttempt:desc.failedAttempt,nextAttempt:desc.nextAttempt,delayMs:BigInt(desc.delayMs)})};break;case"approval_requested":base.eventType=WorkflowEventType.approval_requested,base.payload={case:"approvalRequested",value:create(ApprovalRequestedPayloadSchema,{prompt:desc.prompt,approvers:[...desc.approvers],timeoutSeconds:desc.timeoutSeconds,outcomes:desc.outcomes.map(o=>create(HumanInputOutcomeInfoSchema,{name:o.name,label:o.label})),formSchema:desc.formSchema?desc.formSchema:void 0})};break;case"approval_resolved":base.eventType=WorkflowEventType.approval_resolved,base.payload={case:"approvalResolved",value:create(ApprovalResolvedPayloadSchema,{resolvedBy:desc.resolvedBy,comment:desc.comment,waitDurationMs:BigInt(desc.waitDurationMs)})};break;case"agent_call_started":base.eventType=WorkflowEventType.agent_call_started,base.payload={case:"agentCallStarted",value:create(AgentCallStartedPayloadSchema,{childExecutionId:desc.childExecutionId,agentSlug:desc.agentSlug,messageSummary:desc.messageSummary})};break;case"agent_call_progress":base.eventType=WorkflowEventType.agent_call_progress,base.payload={case:"agentCallProgress",value:create(AgentCallProgressPayloadSchema,{childExecutionId:desc.childExecutionId,agentPhase:desc.agentPhase,currentToolName:desc.currentToolName,tokensConsumed:BigInt(desc.tokensConsumed),messagesCount:desc.messagesCount,toolCallsCount:desc.toolCallsCount})};break;case"agent_call_completed":base.eventType=WorkflowEventType.agent_call_completed,base.payload={case:"agentCallCompleted",value:create(AgentCallCompletedPayloadSchema,{childExecutionId:desc.childExecutionId,durationMs:BigInt(desc.durationMs),tokensConsumed:BigInt(desc.tokensConsumed),costMicros:BigInt(desc.costMicros),error:desc.error})};break;case"artifact_created":base.eventType=WorkflowEventType.artifact_created,base.payload={case:"artifactCreated",value:create(ArtifactCreatedPayloadSchema,{artifactId:desc.artifactId,displayName:desc.displayName,contentType:desc.contentType,sizeBytes:BigInt(desc.sizeBytes)})};break}return base}async function emitWorkflowEvents(executionId,events,taskStatuses){if(!(!executionId||events.length===0))try{let client2=buildClient2(),protoEvents=events.map(toProtoEvent),protoTasks=(taskStatuses??[]).map(ts=>create(WorkflowTaskSchema,{taskId:ts.taskId??"",taskName:ts.taskName,taskType:TASK_KIND_TO_TYPE_MAP[ts.taskKind]??WorkflowTaskType.WORKFLOW_TASK_TYPE_UNSPECIFIED,status:TASK_STATUS_MAP[ts.status],startedAt:ts.startedAt??"",completedAt:ts.completedAt??"",error:ts.error??"",input:toJsonObject(ts.input),output:toJsonObject(ts.output),metadata:toJsonObject(ts.metadata),costMicros:BigInt(ts.costMicros??0),inputTokens:BigInt(ts.inputTokens??0),outputTokens:BigInt(ts.outputTokens??0)})),startedEvent=events.find(e=>e.type==="execution_started"),completedEvent=events.find(e=>e.type==="execution_completed"),failedEvent=events.find(e=>e.type==="execution_failed"),statusFields={tasks:protoTasks};startedEvent&&(statusFields.phase=ExecutionPhase2.EXECUTION_IN_PROGRESS,statusFields.startedAt=startedEvent.occurredAt),completedEvent&&completedEvent.type==="execution_completed"&&(statusFields.phase=ExecutionPhase2.EXECUTION_COMPLETED,statusFields.completedAt=completedEvent.occurredAt,statusFields.totalCostMicros=BigInt(completedEvent.totalCostMicros),statusFields.totalInputTokens=BigInt(completedEvent.totalInputTokens??0),statusFields.totalOutputTokens=BigInt(completedEvent.totalOutputTokens??0)),failedEvent&&failedEvent.type==="execution_failed"&&(statusFields.phase=ExecutionPhase2.EXECUTION_FAILED,statusFields.completedAt=failedEvent.occurredAt,statusFields.error=failedEvent.error);let input=create(WorkflowExecutionUpdateStatusInputSchema,{executionId,status:create(WorkflowExecutionStatusSchema,statusFields),events:protoEvents});await client2.workflowExecutionCommand.updateStatus(input)}catch(err){console.error(`Failed to emit ${events.length} workflow event(s) for ${executionId}:`,err)}}function structToPlain(value){if(value!==void 0)try{return JSON.parse(JSON.stringify(value))}catch{return}}async function loadRecoveryContext(executionId){return((await buildClient2().getWorkflowExecution(executionId)).status?.tasks??[]).map(t=>({taskName:t.taskName,status:PROTO_STATUS_TO_STRING[t.status]??"unknown",output:structToPlain(t.output)}))}function createWorkflowEventActivities(){return{EmitWorkflowEvents:emitWorkflowEvents,ResetEventSequence:initSequenceFromEventLog,LoadRecoveryContext:loadRecoveryContext}}var TASK_STATUS_MAP,TASK_KIND_MAP,TASK_KIND_TO_TYPE_MAP,sequenceCounter,PROTO_STATUS_TO_STRING,init_workflow_event_activities=__esm({"dist/activities/workflow-event-activities.js"(){"use strict";init_stigmer_client();init_config();init_esm4();init_event_pb();init_api_pb11();init_io_pb11();init_enum_pb7();init_enum_pb8();TASK_STATUS_MAP={started:WorkflowTaskStatus.WORKFLOW_TASK_IN_PROGRESS,completed:WorkflowTaskStatus.WORKFLOW_TASK_COMPLETED,failed:WorkflowTaskStatus.WORKFLOW_TASK_FAILED,skipped:WorkflowTaskStatus.WORKFLOW_TASK_SKIPPED,waiting_approval:WorkflowTaskStatus.WORKFLOW_TASK_WAITING_APPROVAL},TASK_KIND_MAP={set:WorkflowTaskKind.set_vars,"call:http":WorkflowTaskKind.http_call,"call:grpc":WorkflowTaskKind.grpc_call,"call:function":WorkflowTaskKind.activity_call,"call:function:llm":WorkflowTaskKind.llm_call,"call:function:transform":WorkflowTaskKind.transform,"call:function:validate":WorkflowTaskKind.validate,"call:function:emit_event":WorkflowTaskKind.emit_event,"call:function:notification":WorkflowTaskKind.notification,"call:function:eval":WorkflowTaskKind.eval,switch:WorkflowTaskKind.switch_case,for:WorkflowTaskKind.for_each,fork:WorkflowTaskKind.fork,try:WorkflowTaskKind.try_catch,listen:WorkflowTaskKind.listen,wait:WorkflowTaskKind.wait,raise:WorkflowTaskKind.raise_error,run:WorkflowTaskKind.run_workflow,"call:function:cursor":WorkflowTaskKind.agent_call,"call:agent":WorkflowTaskKind.agent_call,human_input:WorkflowTaskKind.human_input},TASK_KIND_TO_TYPE_MAP={"call:agent":WorkflowTaskType.WORKFLOW_TASK_AGENT_INVOCATION,"call:function:llm":WorkflowTaskType.WORKFLOW_TASK_API_CALL,"call:function:eval":WorkflowTaskType.WORKFLOW_TASK_API_CALL,"call:function:cursor":WorkflowTaskType.WORKFLOW_TASK_AGENT_INVOCATION,"call:http":WorkflowTaskType.WORKFLOW_TASK_API_CALL,"call:grpc":WorkflowTaskType.WORKFLOW_TASK_API_CALL,"call:function":WorkflowTaskType.WORKFLOW_TASK_API_CALL,human_input:WorkflowTaskType.WORKFLOW_TASK_APPROVAL,switch:WorkflowTaskType.WORKFLOW_TASK_CONDITIONAL,fork:WorkflowTaskType.WORKFLOW_TASK_PARALLEL,for:WorkflowTaskType.WORKFLOW_TASK_PARALLEL,set:WorkflowTaskType.WORKFLOW_TASK_TRANSFORM,"call:function:transform":WorkflowTaskType.WORKFLOW_TASK_TRANSFORM,"call:function:validate":WorkflowTaskType.WORKFLOW_TASK_TRANSFORM,try:WorkflowTaskType.WORKFLOW_TASK_CUSTOM,listen:WorkflowTaskType.WORKFLOW_TASK_CUSTOM,do:WorkflowTaskType.WORKFLOW_TASK_CUSTOM,wait:WorkflowTaskType.WORKFLOW_TASK_CUSTOM,raise:WorkflowTaskType.WORKFLOW_TASK_CUSTOM,run:WorkflowTaskType.WORKFLOW_TASK_CUSTOM};sequenceCounter=0;PROTO_STATUS_TO_STRING={[WorkflowTaskStatus.WORKFLOW_TASK_IN_PROGRESS]:"started",[WorkflowTaskStatus.WORKFLOW_TASK_COMPLETED]:"completed",[WorkflowTaskStatus.WORKFLOW_TASK_FAILED]:"failed",[WorkflowTaskStatus.WORKFLOW_TASK_SKIPPED]:"skipped",[WorkflowTaskStatus.WORKFLOW_TASK_WAITING_APPROVAL]:"waiting_approval"}}});var promote_task_output_exports={};__export(promote_task_output_exports,{createPromoteTaskOutputActivities:()=>createPromoteTaskOutputActivities});function getClient(){if(!cachedClient){let config4=loadConfig();cachedClient=new StigmerClient({endpoint:config4.stigmerBackendEndpoint,token:config4.stigmerToken})}return cachedClient}function createPromoteTaskOutputActivities(){return{async PromoteTaskOutput(taskOutput,workflowExecutionId,taskName){if(taskOutput==null)return{output:taskOutput,artifactIds:[],artifactCreatedEvents:[]};let serialized;try{serialized=JSON.stringify(taskOutput)}catch{return{output:taskOutput,artifactIds:[],artifactCreatedEvents:[]}}let byteLength=Buffer.byteLength(serialized,"utf-8");if(byteLength<PROMOTION_THRESHOLD_BYTES)return{output:taskOutput,artifactIds:[],artifactCreatedEvents:[]};let displayName=`${taskName} \u2014 output.json`,contentType="application/json",contentBytes=Buffer.from(serialized,"utf-8"),input=create(CreateArtifactInputSchema,{spec:create(ArtifactSpecSchema,{contentType,displayName,source:create(ArtifactSourceSchema,{workflowExecutionId,taskName})}),content:new Uint8Array(contentBytes)}),artifactId=(await getClient().createArtifact(input)).metadata?.id??"";return{output:{_artifact_ref:artifactId,display_name:displayName,content_type:contentType,size_bytes:byteLength},artifactIds:[artifactId],artifactCreatedEvents:[{type:"artifact_created",artifactId,displayName,contentType,sizeBytes:byteLength,occurredAt:new Date().toISOString()}]}}}}var PROMOTION_THRESHOLD_BYTES,cachedClient,init_promote_task_output=__esm({"dist/activities/promote-task-output.js"(){"use strict";init_stigmer_client();init_config();init_esm4();init_io_pb8();init_spec_pb9();PROMOTION_THRESHOLD_BYTES=256*1024,cachedClient=null}});function compress(data){return(0,import_node_zlib3.gzipSync)(data)}function decompress(data){return(0,import_node_zlib3.gunzipSync)(data)}var import_node_zlib3,init_compressor=__esm({"dist/claimcheck/compressor.js"(){"use strict";import_node_zlib3=require("node:zlib")}});var import_node_crypto21,MARKER_METADATA_KEY,MARKER_ENCODING_VALUE,ClaimcheckPayloadCodec,init_payload_codec=__esm({"dist/claimcheck/payload-codec.js"(){"use strict";import_node_crypto21=require("node:crypto");init_compressor();MARKER_METADATA_KEY="encoding",MARKER_ENCODING_VALUE="binary/claimcheck",ClaimcheckPayloadCodec=class{storage;config;constructor(storage,config4){this.storage=storage,this.config=config4}async encode(payloads){return Promise.all(payloads.map(p=>this.encodePayload(p)))}async decode(payloads){return Promise.all(payloads.map(p=>this.decodePayload(p)))}async encodePayload(payload){let data=payload.data;if(!data||data.length<this.config.thresholdBytes)return payload;let originalBuf=Buffer.from(data),uploadBuf=originalBuf,compressed=!1;if(this.config.compressionEnabled){let compressedBuf=compress(originalBuf);compressedBuf.length<originalBuf.length&&(uploadBuf=compressedBuf,compressed=!0)}let key=`${this.config.keyPrefix}${(0,import_node_crypto21.randomUUID)()}`;await this.storage.upload(key,uploadBuf,"application/octet-stream");let marker={key,size:data.length,compressed};return{metadata:{[MARKER_METADATA_KEY]:Buffer.from(MARKER_ENCODING_VALUE)},data:Buffer.from(JSON.stringify(marker))}}async decodePayload(payload){if(!this.isClaimcheckPayload(payload))return payload;let marker=JSON.parse(Buffer.from(payload.data).toString("utf-8")),rawBuf;try{rawBuf=await this.storage.download(marker.key)}catch(err){let cause=err instanceof Error?err.message:String(err);throw new Error(`Claimcheck retrieve failed for key ${marker.key}: ${cause}`)}let dataBuf=marker.compressed?decompress(rawBuf):rawBuf;return{metadata:payload.metadata,data:dataBuf}}isClaimcheckPayload(payload){let encoding=payload.metadata?.[MARKER_METADATA_KEY];return encoding?Buffer.from(encoding).toString("utf-8")===MARKER_ENCODING_VALUE:!1}}}});function loadClaimcheckConfig(){return{enabled:process.env.CLAIMCHECK_ENABLED==="true",thresholdBytes:parseInt(process.env.CLAIMCHECK_THRESHOLD_BYTES??String(131072),10),compressionEnabled:process.env.CLAIMCHECK_COMPRESSION_ENABLED!=="false",keyPrefix:process.env.CLAIMCHECK_KEY_PREFIX??"claimcheck/"}}var init_config4=__esm({"dist/claimcheck/config.js"(){"use strict"}});var claimcheck_exports={};__export(claimcheck_exports,{ClaimcheckPayloadCodec:()=>ClaimcheckPayloadCodec,compress:()=>compress,decompress:()=>decompress,loadClaimcheckConfig:()=>loadClaimcheckConfig});var init_claimcheck=__esm({"dist/claimcheck/index.js"(){"use strict";init_payload_codec();init_config4();init_compressor()}});function getShutdownSignalForQueue(taskQueue){return _shutdownSignalRegistry.get(taskQueue)}async function createStigmerRunnerManager(options){validateManagerOptions(options);let tokenRef={current:options.stigmerToken??null},baseConfig=mapManagerOptionsToConfig(options,tokenRef),{installFetchInterceptor:installFetchInterceptor2,updateInterceptorToken:updateInterceptorToken2,getExecutionContext:getExecutionContext2}=await Promise.resolve().then(()=>(init_fetch_interceptor(),fetch_interceptor_exports));installFetchInterceptor2({proxyEndpoint:baseConfig.proxyEndpoint??void 0,stigmerToken:baseConfig.stigmerToken??void 0});let{installHttp2Interceptor:installHttp2Interceptor2,updateHttp2InterceptorToken:updateHttp2InterceptorToken2,assertHttp2ConnectPatched:assertHttp2ConnectPatched2}=await Promise.resolve().then(()=>(init_http2_interceptor(),http2_interceptor_exports));installHttp2Interceptor2({proxyEndpoint:baseConfig.proxyEndpoint??void 0,stigmerToken:baseConfig.stigmerToken??void 0}),await assertHttp2ConnectPatched2();let tokenCoordinator=createRunnerTokenCoordinator({applyProxyToken:token=>{updateInterceptorToken2(token),updateHttp2InterceptorToken2(token)},reMint:()=>refreshRunnerAccessToken({token:tokenRef.current,stigmerEndpoint:baseConfig.stigmerBackendEndpoint})}),bootstrap=await resolveRunnerBootstrap({explicitAddress:options.temporalAddress,explicitNamespace:options.temporalNamespace,token:options.stigmerToken,stigmerEndpoint:baseConfig.stigmerBackendEndpoint}),config4={...baseConfig,temporalAddress:bootstrap.temporalAddress,temporalNamespace:bootstrap.temporalNamespace};bootstrap.runnerAccessToken?(tokenCoordinator.adoptMintedToken(bootstrap.runnerAccessToken,bootstrap.runnerAccessTokenExpiresInSeconds),console.log("[runner-manager] Adopted minted proxy token from bootstrap")):baseConfig.proxyEndpoint&&tokenRef.current&&console.warn("[runner-manager] Proxy endpoint configured but no runner token was minted; falling back to the control-plane token for x-stigmer-auth");let{setExecutionContextRef:setExecutionContextRef2}=await Promise.resolve().then(()=>(init_rejection_capture(),rejection_capture_exports));setExecutionContextRef2(getExecutionContext2());let activities=await createAllActivities(config4),payloadCodec=await createPayloadCodec(config4),connection=await import_worker2.NativeConnection.connect({address:config4.temporalAddress}),interceptorConfig2=await buildInterceptorConfig(),workflowSource=resolveWorkflowSource(),workflowBundle;workflowSource.kind==="prebuilt"?(console.log(`[runner-manager] Using pre-built workflow bundle: ${workflowSource.codePath}`),workflowBundle={codePath:workflowSource.codePath}):(console.log("[runner-manager] Pre-bundling workflow code..."),workflowBundle=await(0,import_worker2.bundleWorkflowCode)({workflowsPath:workflowSource.workflowsPath,workflowInterceptorModules:interceptorConfig2.workflowInterceptorModules}),console.log("[runner-manager] Workflow code bundled successfully"));let sessions=new Map,workflowExecutions=new Map,shutdownSignals=new Map,shuttingDown=!1;async function createWorkerOnQueue(taskQueue){let shutdownController=new AbortController;shutdownSignals.set(taskQueue,shutdownController),_shutdownSignalRegistry.set(taskQueue,shutdownController.signal);let worker=await import_worker2.Worker.create({connection,namespace:config4.temporalNamespace,taskQueue,activities,workflowBundle,maxConcurrentActivityTaskExecutions:config4.maxConcurrentActivities,dataConverter:payloadCodec?{payloadCodecs:[payloadCodec]}:void 0,sinks:interceptorConfig2.sinks,interceptors:interceptorConfig2.interceptors}),runPromise=worker.run().catch(err=>{console.error(`[runner-manager] Worker for queue ${taskQueue} exited with error:`,err)});return{worker,runPromise,shutdownController,pendingClose:!1}}function reuseExistingWorker(registry5,id,taskQueue,kind){let existing=registry5.get(id);return existing?(existing.pendingClose&&(existing.pendingClose=!1,setQueueDrainCallback(taskQueue,void 0),console.log(`[runner-manager] Re-opened ${kind} ${id}; cancelled deferred teardown`)),!0):!1}async function teardownManaged(registry5,id,taskQueue,kind){let managed=registry5.get(id);managed&&(managed.worker.shutdown(),await managed.runPromise,registry5.delete(id),shutdownSignals.delete(taskQueue),_shutdownSignalRegistry.delete(taskQueue),forgetQueue(taskQueue),console.log(`[runner-manager] Removed ${kind} ${id} (active=${registry5.size})`))}async function removeManaged(registry5,id,taskQueue,kind){let managed=registry5.get(id);if(managed){if(inFlightCountForQueue(taskQueue)>0){managed.pendingClose=!0,setQueueDrainCallback(taskQueue,()=>{shuttingDown||teardownManaged(registry5,id,taskQueue,kind)}),console.log(`[runner-manager] Deferring teardown of ${kind} ${id} \u2014 ${inFlightCountForQueue(taskQueue)} activity(ies) still in flight (runs in background)`);return}await teardownManaged(registry5,id,taskQueue,kind)}}return{async addSession(sessionId){if(shuttingDown)throw new Error("RunnerManager is shutting down");let taskQueue=SESSION_QUEUE_PREFIX+sessionId;if(reuseExistingWorker(sessions,sessionId,taskQueue,"session"))return;let managed=await createWorkerOnQueue(taskQueue);sessions.set(sessionId,managed),console.log(`[runner-manager] Added session ${sessionId} (queue=${taskQueue}, active=${sessions.size})`)},async removeSession(sessionId){await removeManaged(sessions,sessionId,SESSION_QUEUE_PREFIX+sessionId,"session")},activeSessions(){return Array.from(sessions.keys())},async addWorkflowExecution(executionId){if(shuttingDown)throw new Error("RunnerManager is shutting down");let taskQueue=WFEXEC_QUEUE_PREFIX+executionId;if(reuseExistingWorker(workflowExecutions,executionId,taskQueue,"workflow execution"))return;let managed=await createWorkerOnQueue(taskQueue);workflowExecutions.set(executionId,managed),console.log(`[runner-manager] Added workflow execution ${executionId} (queue=${taskQueue}, active=${workflowExecutions.size})`)},async removeWorkflowExecution(executionId){await removeManaged(workflowExecutions,executionId,WFEXEC_QUEUE_PREFIX+executionId,"workflow execution")},activeWorkflowExecutions(){return Array.from(workflowExecutions.keys())},updateToken(token){tokenRef.current=token,token?process.env.STIGMER_TOKEN=token:delete process.env.STIGMER_TOKEN,tokenCoordinator.onControlPlaneTokenChanged(token),console.log("[runner-manager] Auth token updated")},async shutdown(){shuttingDown=!0,tokenCoordinator.stop();let totalWorkers=sessions.size+workflowExecutions.size;console.log(`[runner-manager] Shutting down ${totalWorkers} workers (${sessions.size} sessions, ${workflowExecutions.size} workflow executions)...`);let shutdownPromises=[...Array.from(sessions.entries()).map(async([id,session])=>{session.worker.shutdown(),await session.runPromise,console.log(`[runner-manager] Session worker ${id} stopped`)}),...Array.from(workflowExecutions.entries()).map(async([id,execution])=>{execution.worker.shutdown(),await execution.runPromise,console.log(`[runner-manager] Workflow execution worker ${id} stopped`)})];await Promise.all(shutdownPromises),sessions.clear(),workflowExecutions.clear(),connection.close(),console.log("[runner-manager] All workers stopped, connection closed")}}}function validateManagerOptions(options){if(!options.stigmerEndpoint)throw new Error("RunnerManagerOptions.stigmerEndpoint is required \u2014 specify the Stigmer server endpoint")}function mapManagerOptionsToConfig(options,tokenRef){let proxyActive=!!options.proxyEndpoint,mode=options.executionMode??"local";return{taskQueue:"manager",temporalAddress:options.temporalAddress??"",temporalNamespace:options.temporalNamespace??"default",stigmerBackendEndpoint:normalizeEndpoint2(options.stigmerEndpoint),stigmerToken:options.stigmerToken??null,stigmerTokenRef:tokenRef,cursorApiKey:proxyActive?options.cursorApiKey??"proxy-managed":options.cursorApiKey??"",workspaceRootDir:options.workspaceRootDir??resolveDefaultWorkspaceDir(),mode,proxyEndpoint:options.proxyEndpoint??null,maxConcurrentActivities:options.maxConcurrentActivitiesPerSession??5,idleTimeoutSeconds:null,cloudModeEnabled:options.cloudModeEnabled??!1,checkpointerType:options.checkpointerType??(proxyActive?"http":"memory"),checkpointerProxyEndpoint:options.checkpointerProxyEndpoint??options.proxyEndpoint??null,primaryModel:options.primaryModel??"gpt-4.1",cursorStreamStallTimeoutMs:options.cursorStreamStallTimeoutMs??DEFAULT_CURSOR_STREAM_STALL_TIMEOUT_MS,workspaceLockTimeoutMs:options.workspaceLockTimeoutMs??DEFAULT_WORKSPACE_LOCK_TIMEOUT_MS}}async function createAllActivities(config4){let[{createCursorActivities:createCursorActivities2},{createDeepAgentActivities:createDeepAgentActivities2},{createEnsureThreadActivities:createEnsureThreadActivities2},{createClassifyToolApprovalsActivities:createClassifyToolApprovalsActivities2},{createDiscoverMcpServerActivities:createDiscoverMcpServerActivities2},{createEvaluateExpressionsActivities:createEvaluateExpressionsActivities2},{createCallHttpActivities:createCallHttpActivities2},{createCallGrpcActivities:createCallGrpcActivities2},{createCallFunctionActivities:createCallFunctionActivities2},{createCallLlmActivities:createCallLlmActivities2},{createCallAgentActivities:createCallAgentActivities2},{createCallAgentStatusActivities:createCallAgentStatusActivities2},{createRunCommandActivities:createRunCommandActivities2},{createHydrateWorkflowActivities:createHydrateWorkflowActivities2},{createWorkflowEventActivities:createWorkflowEventActivities2},{createPromoteTaskOutputActivities:createPromoteTaskOutputActivities2}]=await Promise.all([Promise.resolve().then(()=>(init_execute_cursor(),execute_cursor_exports)),Promise.resolve().then(()=>(init_execute_deep_agent(),execute_deep_agent_exports)),Promise.resolve().then(()=>(init_ensure_thread(),ensure_thread_exports)),Promise.resolve().then(()=>(init_classify_tool_approvals(),classify_tool_approvals_exports)),Promise.resolve().then(()=>(init_discover_mcp_server(),discover_mcp_server_exports)),Promise.resolve().then(()=>(init_evaluate_expressions(),evaluate_expressions_exports)),Promise.resolve().then(()=>(init_call_http(),call_http_exports)),Promise.resolve().then(()=>(init_call_grpc(),call_grpc_exports)),Promise.resolve().then(()=>(init_call_function(),call_function_exports)),Promise.resolve().then(()=>(init_call_llm(),call_llm_exports)),Promise.resolve().then(()=>(init_call_agent(),call_agent_exports)),Promise.resolve().then(()=>(init_call_agent_status(),call_agent_status_exports)),Promise.resolve().then(()=>(init_run_command(),run_command_exports)),Promise.resolve().then(()=>(init_hydrate_workflow_execution(),hydrate_workflow_execution_exports)),Promise.resolve().then(()=>(init_workflow_event_activities(),workflow_event_activities_exports)),Promise.resolve().then(()=>(init_promote_task_output(),promote_task_output_exports))]);return{...createCursorActivities2(config4),...createDeepAgentActivities2(config4),...createEnsureThreadActivities2(),...createClassifyToolApprovalsActivities2(config4),...createDiscoverMcpServerActivities2(config4),...createEvaluateExpressionsActivities2(),...createCallHttpActivities2(),...createCallGrpcActivities2(),...createCallFunctionActivities2(),...createCallLlmActivities2(),...createCallAgentActivities2(),...createCallAgentStatusActivities2(),...createRunCommandActivities2(),...createHydrateWorkflowActivities2(config4),...createWorkflowEventActivities2(),...createPromoteTaskOutputActivities2()}}async function createPayloadCodec(config4){let{loadClaimcheckConfig:loadClaimcheckConfig2,ClaimcheckPayloadCodec:ClaimcheckPayloadCodec2}=await Promise.resolve().then(()=>(init_claimcheck(),claimcheck_exports)),claimcheckConfig=loadClaimcheckConfig2();if(!claimcheckConfig.enabled)return;let{loadArtifactStorageConfig:loadArtifactStorageConfig2,createArtifactStorage:createArtifactStorage2}=await Promise.resolve().then(()=>(init_artifact_storage(),artifact_storage_exports)),storageConfig=loadArtifactStorageConfig2(config4),storage=createArtifactStorage2(storageConfig);return new ClaimcheckPayloadCodec2(storage,claimcheckConfig)}async function buildInterceptorConfig(){let{createWorkflowMetricsSinks:createWorkflowMetricsSinks2}=await Promise.resolve().then(()=>(init_workflow_metrics_sink(),workflow_metrics_sink_exports)),activityInterceptors=[],sinks={...createWorkflowMetricsSinks2()},workflowInterceptorModules=[];if(activityInterceptors.push(ctx=>({inbound:{async execute(input,next){let taskQueue=ctx.info.taskQueue;activityStartedOnQueue(taskQueue);try{return await next(input)}finally{activityFinishedOnQueue(taskQueue)}}}})),process.env.OTEL_EXPORTER_OTLP_ENDPOINT){let{OpenTelemetryActivityInboundInterceptor,makeWorkflowExporter}=await Promise.resolve().then(()=>__toESM(require_lib8(),1)),{OTLPTraceExporter}=await Promise.resolve().then(()=>__toESM(require_src13(),1)),{resourceFromAttributes}=await Promise.resolve().then(()=>__toESM(require_src3(),1));activityInterceptors.push(ctx=>({inbound:new OpenTelemetryActivityInboundInterceptor(ctx)}));let resource=resourceFromAttributes({"service.name":"stigmer-runner-manager"}),exporter=new OTLPTraceExporter({url:process.env.OTEL_EXPORTER_OTLP_ENDPOINT}),otelSinks=makeWorkflowExporter(exporter,resource);sinks={...sinks,...otelSinks};let esmRequire=(0,import_node_module3.createRequire)(__stigmerImportMetaUrl);workflowInterceptorModules.push(esmRequire.resolve(OTEL_WORKFLOW_INTERCEPTOR_MODULE))}return{sinks,interceptors:{...activityInterceptors.length>0?{activity:activityInterceptors}:{}},workflowInterceptorModules}}function resolveDefaultWorkspaceDir(){try{let dir=(0,import_node_path34.join)((0,import_node_os5.homedir)(),".stigmer","workspaces","runner");return(0,import_node_fs8.mkdirSync)(dir,{recursive:!0}),dir}catch{let dir=(0,import_node_path34.join)((0,import_node_os5.tmpdir)(),"stigmer-runner-workspace");return(0,import_node_fs8.mkdirSync)(dir,{recursive:!0}),dir}}function normalizeEndpoint2(endpoint){return endpoint.startsWith("http://")||endpoint.startsWith("https://")?endpoint:endpoint.endsWith(":443")?`https://${endpoint}`:`http://${endpoint}`}var import_node_fs8,import_node_path34,import_node_os5,import_node_module3,import_worker2,SESSION_QUEUE_PREFIX,WFEXEC_QUEUE_PREFIX,_shutdownSignalRegistry,init_runner_manager=__esm({"dist/runner-manager.js"(){"use strict";import_node_fs8=require("node:fs"),import_node_path34=require("node:path"),import_node_os5=require("node:os"),import_node_module3=require("node:module"),import_worker2=__toESM(require_lib6(),1);init_config();init_workflow_source();init_bootstrap();init_runner_token_coordinator();init_in_flight();SESSION_QUEUE_PREFIX="session:",WFEXEC_QUEUE_PREFIX="wfexec:",_shutdownSignalRegistry=new Map}});var execute_cursor_exports={};__export(execute_cursor_exports,{buildPrompt:()=>buildPrompt,createCursorActivities:()=>createCursorActivities});function createCursorActivities(config4){let client2=new StigmerClient({endpoint:config4.stigmerBackendEndpoint,token:config4.stigmerToken,tokenRef:config4.stigmerTokenRef});return{ExecuteCursor:async(arg0,arg1)=>{let{executionId,threadId,turnSeq}=normalizeActivityInput(arg0,arg1);activityStarted();try{return await executeCursor(config4,client2,executionId,threadId,turnSeq)}finally{activityFinished()}}}}async function executeCursor(config4,client2,executionId,threadId,turnSeq){return console.log(`ExecuteCursor started: execution=${executionId}, threadId=${threadId||"(new)"}, turnSeq=${turnSeq}`),closeProxySessions(),setInterceptorExecutionId(executionId),runWithExecutionContext(executionId,()=>executeCursorInner(config4,client2,executionId,threadId,turnSeq))}async function executeCursorInner(config4,client2,executionId,threadId,turnSeq){let status=create(AgentExecutionStatusSchema,{phase:ExecutionPhase.EXECUTION_IN_PROGRESS,startedAt:utcTimestamp()}),artifactStorage=await resolveUsableArtifactStorage(loadArtifactStorageConfig(config4),{executionId}),statusOffload=artifactStorage?{artifactStorage,executionId}:void 0,persist=(s=status)=>(withholdSecretContentFromMessages(s.messages,s.subAgentExecutions),persistStatus(client2,executionId,s,{offload:statusOffload})),sessionId,session,turnState=newTurnStreamState(),workerShutdownDetected=!1,stopDenialWatcher,periodicHeartbeat,finishTurnTelemetry,hitlDir,hitlCleanup,releaseWorkspaceLock,errorContext={model:"default",mode:"local",agentId:""};try{await reportSetupProgress(client2,executionId,"Fetching execution");let execution=await client2.getExecution(executionId),spec=execution.spec;sessionId=spec.sessionId,await reportSetupProgress(client2,executionId,"Resolving agent blueprint"),session=await client2.getSession(sessionId);let blueprint=await resolveBlueprint(client2,session,config4.workspaceRootDir);await reportSetupProgress(client2,executionId,"Resolving environment");let{envVars,secretKeys}=await resolveExecutionEnv(client2,executionId);(0,import_activity15.heartbeat)(),await reportSetupProgress(client2,executionId,"Provisioning workspace"),blueprint.workspaceDirs=await provisionCursorWorkspace(config4,session,envVars,sessionId??""),(0,import_activity15.heartbeat)();let primaryWorkspaceDir=blueprint.workspaceDirs[0],gitWorkspace=primaryWorkspaceDir?await isGitWorkTree(primaryWorkspaceDir):!1,captureMode=deriveCaptureMode(primaryWorkspaceDir,gitWorkspace,!!artifactStorage),baselineTree,progressState=newProgressCaptureState(),changeSetId=`${executionId}:${turnSeq}`;if((0,import_activity15.heartbeat)(),primaryWorkspaceDir)try{releaseWorkspaceLock=await acquireWorkspaceLock(primaryWorkspaceDir,{onWaiting:()=>reportSetupProgress(client2,executionId,"Waiting for workspace \u2014 in use by another session"),heartbeat:import_activity15.heartbeat,signal:import_activity15.Context.current().cancellationSignal,timeoutMs:config4.workspaceLockTimeoutMs})}catch(lockErr){if(lockErr instanceof WorkspaceLockCancelledError)throw new import_activity15.CancelledFailure("Activity cancelled while waiting for the workspace lock");if(lockErr instanceof WorkspaceLockTimeoutError)return status.phase=ExecutionPhase.EXECUTION_FAILED,status.error=lockErr.message,status.completedAt=utcTimestamp(),status.messages.push(create(AgentMessageSchema,{type:MessageType.MESSAGE_SYSTEM,content:`Execution failed: ${lockErr.message}`,timestamp:utcTimestamp()})),await persist(status),console.warn(`ExecuteCursor workspace lock timeout: execution=${executionId}`),slimStatus(status);throw lockErr}(0,import_activity15.heartbeat)();try{let{setBaggage:setBaggage3,BAGGAGE_EXECUTION_ID:BAGGAGE_EXECUTION_ID2,BAGGAGE_SESSION_ID:BAGGAGE_SESSION_ID2,BAGGAGE_ORG_ID:BAGGAGE_ORG_ID2}=await Promise.resolve().then(()=>(init_otel(),otel_exports));await setBaggage3({[BAGGAGE_EXECUTION_ID2]:executionId,[BAGGAGE_SESSION_ID2]:sessionId??"",[BAGGAGE_ORG_ID2]:session?.metadata?.org??""})}catch{}let cursorMode=determineCursorMode(blueprint.sessionSpec.workspaceEntries,config4.cloudModeEnabled),agentMode=isCloudMode(cursorMode)?"cloud":"local";(0,import_activity15.heartbeat)();let isReinvocation=!!threadId,approvalDecisions,adjudicatedApprovals=[],adjudicatedContentDigests=new Map,seededSubAgents=[];if(isReinvocation){let existingStatus=execution.status;seededSubAgents=seedCursorTranscriptFromExecution(status,execution);let reconciledFileReview=!1,fileReviewFailed=!1,fileReviewFailureDetail="",discardedPaths=[];if(captureMode&&primaryWorkspaceDir){let decidedSets=(existingStatus?.fileChangeSets??[]).filter(cs=>cs.status===FileChangeSetStatus.DECIDED);for(let changeSet of decidedSets){let capResult=await applyCaptureDecisions2({status,gitRoot:primaryWorkspaceDir,executionId,changeSet,storage:artifactStorage,gitWorkspace});capResult.isCaptureTurn&&(reconciledFileReview=!0,capResult.failed&&(fileReviewFailed=!0,fileReviewFailureDetail=capResult.failureDetail??"file review reconcile failed"),capResult.hadReject&&discardedPaths.push(...capResult.rejectedPaths))}}let adjudicated=reconstructAdjudicatedApprovals(existingStatus?.messages??[]);if(adjudicated.decisions.size>0){if(approvalDecisions=adjudicated.decisions,adjudicatedApprovals=adjudicated.pendingApprovals,adjudicatedContentDigests=adjudicated.contentDigests,[...approvalDecisions.values()].some(a=>a===ApprovalAction.REJECT))return status.phase=ExecutionPhase.EXECUTION_FAILED,status.error="Execution rejected by user",status.completedAt=utcTimestamp(),status.messages.push(create(AgentMessageSchema,{type:MessageType.MESSAGE_SYSTEM,content:"Execution was rejected by the user during tool approval.",timestamp:utcTimestamp()})),await persist(status),slimStatus(status)}else if(reconciledFileReview)return status.phase=ExecutionPhase.EXECUTION_COMPLETED,status.completedAt=utcTimestamp(),fileReviewFailed?status.messages.push(create(AgentMessageSchema,{type:MessageType.MESSAGE_SYSTEM,content:"Some approved file changes could not be applied because the file changed after review: "+fileReviewFailureDetail+".",timestamp:utcTimestamp()})):discardedPaths.length>0&&status.messages.push(create(AgentMessageSchema,{type:MessageType.MESSAGE_SYSTEM,content:"Some proposed file changes were discarded by the user and were not applied: "+discardedPaths.join(", ")+".",timestamp:utcTimestamp()})),await persist(status),console.log(`ExecuteCursor file-review resume short-circuit: execution=${executionId}, failed=${fileReviewFailed}, discarded=${discardedPaths.length}`),slimStatus(status)}await reportSetupProgress(client2,executionId,"Resolving MCP servers");let mcpResolution=await resolveMcpServers(client2,blueprint.mergedMcpServerUsages,envVars),sessionOrg=session.metadata?.org??"";mcpResolution=await backfillMcpServersIfNeeded2(client2,mcpResolution,blueprint.mergedMcpServerUsages,envVars,sessionOrg,import_activity15.heartbeat,secretKeys);let mcpConfig=mcpResolution.cursorConfig,leases=deriveActiveLeases(execution),globalBypass=leases.global,agentOverrides=blueprint.mergedMcpServerUsages.flatMap(u=>u.toolApprovalOverrides??[]),mergedPolicies=mergeApprovalPolicies(mcpResolution.resolvedServers,agentOverrides,leases);(0,import_activity15.heartbeat)();let mcpWarnings=validateMcpServerEnv(mcpResolution.resolvedServers,blueprint.mergedMcpServerUsages,envVars);mcpWarnings.length>0&&console.warn(`ExecuteCursor MCP pre-flight warnings: execution=${executionId}
|
|
2406
|
+
\r`;binary=new type2("tag:yaml.org,2002:binary",{kind:"scalar",resolve:resolveYamlBinary,construct:constructYamlBinary,predicate:isBinary,represent:representYamlBinary}),_hasOwnProperty$3=Object.prototype.hasOwnProperty,_toString$2=Object.prototype.toString;omap=new type2("tag:yaml.org,2002:omap",{kind:"sequence",resolve:resolveYamlOmap,construct:constructYamlOmap}),_toString$1=Object.prototype.toString;pairs=new type2("tag:yaml.org,2002:pairs",{kind:"sequence",resolve:resolveYamlPairs,construct:constructYamlPairs}),_hasOwnProperty$2=Object.prototype.hasOwnProperty;set3=new type2("tag:yaml.org,2002:set",{kind:"mapping",resolve:resolveYamlSet,construct:constructYamlSet}),_default6=core.extend({implicit:[timestamp,merge3],explicit:[binary,omap,pairs,set3]}),_hasOwnProperty$1=Object.prototype.hasOwnProperty,CONTEXT_FLOW_IN=1,CONTEXT_FLOW_OUT=2,CONTEXT_BLOCK_IN=3,CONTEXT_BLOCK_OUT=4,CHOMPING_CLIP=1,CHOMPING_STRIP=2,CHOMPING_KEEP=3,PATTERN_NON_PRINTABLE=/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/,PATTERN_NON_ASCII_LINE_BREAKS=/[\x85\u2028\u2029]/,PATTERN_FLOW_INDICATORS=/[,\[\]\{\}]/,PATTERN_TAG_HANDLE=/^(?:!|!!|![a-z\-]+!)$/i,PATTERN_TAG_URI=/^(?:!|[^,\[\]\{\}])(?:%[0-9a-f]{2}|[0-9a-z\-#;\/\?:@&=\+\$,_\.!~\*'\(\)\[\]])*$/i;simpleEscapeCheck=new Array(256),simpleEscapeMap=new Array(256);for(i=0;i<256;i++)simpleEscapeCheck[i]=simpleEscapeSequence(i)?1:0,simpleEscapeMap[i]=simpleEscapeSequence(i);directiveHandlers={YAML:function(state,name2,args){var match,major2,minor;state.version!==null&&throwError(state,"duplication of %YAML directive"),args.length!==1&&throwError(state,"YAML directive accepts exactly one argument"),match=/^([0-9]+)\.([0-9]+)$/.exec(args[0]),match===null&&throwError(state,"ill-formed argument of the YAML directive"),major2=parseInt(match[1],10),minor=parseInt(match[2],10),major2!==1&&throwError(state,"unacceptable YAML version of the document"),state.version=args[0],state.checkLineBreaks=minor<2,minor!==1&&minor!==2&&throwWarning(state,"unsupported YAML version of the document")},TAG:function(state,name2,args){var handle,prefix;args.length!==2&&throwError(state,"TAG directive accepts exactly two arguments"),handle=args[0],prefix=args[1],PATTERN_TAG_HANDLE.test(handle)||throwError(state,"ill-formed tag handle (first argument) of the TAG directive"),_hasOwnProperty$1.call(state.tagMap,handle)&&throwError(state,'there is a previously declared suffix for "'+handle+'" tag handle'),PATTERN_TAG_URI.test(prefix)||throwError(state,"ill-formed tag prefix (second argument) of the TAG directive");try{prefix=decodeURIComponent(prefix)}catch{throwError(state,"tag prefix is malformed: "+prefix)}state.tagMap[handle]=prefix}};loadAll_1=loadAll$1,load_1=load$1,loader={loadAll:loadAll_1,load:load_1},_toString=Object.prototype.toString,_hasOwnProperty2=Object.prototype.hasOwnProperty,CHAR_BOM=65279,CHAR_TAB=9,CHAR_LINE_FEED=10,CHAR_CARRIAGE_RETURN=13,CHAR_SPACE=32,CHAR_EXCLAMATION=33,CHAR_DOUBLE_QUOTE=34,CHAR_SHARP=35,CHAR_PERCENT=37,CHAR_AMPERSAND=38,CHAR_SINGLE_QUOTE=39,CHAR_ASTERISK=42,CHAR_COMMA=44,CHAR_MINUS=45,CHAR_COLON=58,CHAR_EQUALS=61,CHAR_GREATER_THAN=62,CHAR_QUESTION=63,CHAR_COMMERCIAL_AT=64,CHAR_LEFT_SQUARE_BRACKET=91,CHAR_RIGHT_SQUARE_BRACKET=93,CHAR_GRAVE_ACCENT=96,CHAR_LEFT_CURLY_BRACKET=123,CHAR_VERTICAL_LINE=124,CHAR_RIGHT_CURLY_BRACKET=125,ESCAPE_SEQUENCES={};ESCAPE_SEQUENCES[0]="\\0";ESCAPE_SEQUENCES[7]="\\a";ESCAPE_SEQUENCES[8]="\\b";ESCAPE_SEQUENCES[9]="\\t";ESCAPE_SEQUENCES[10]="\\n";ESCAPE_SEQUENCES[11]="\\v";ESCAPE_SEQUENCES[12]="\\f";ESCAPE_SEQUENCES[13]="\\r";ESCAPE_SEQUENCES[27]="\\e";ESCAPE_SEQUENCES[34]='\\"';ESCAPE_SEQUENCES[92]="\\\\";ESCAPE_SEQUENCES[133]="\\N";ESCAPE_SEQUENCES[160]="\\_";ESCAPE_SEQUENCES[8232]="\\L";ESCAPE_SEQUENCES[8233]="\\P";DEPRECATED_BOOLEANS_SYNTAX=["y","Y","yes","Yes","YES","on","On","ON","n","N","no","No","NO","off","Off","OFF"],DEPRECATED_BASE60_SYNTAX=/^[-+]?[0-9_]+(?::[0-9_]+)+(?:\.[0-9_]*)?$/;QUOTING_TYPE_SINGLE=1,QUOTING_TYPE_DOUBLE=2;STYLE_PLAIN=1,STYLE_SINGLE=2,STYLE_LITERAL=3,STYLE_FOLDED=4,STYLE_DOUBLE=5;dump_1=dump$1,dumper={dump:dump_1};Type=type2,Schema=schema,FAILSAFE_SCHEMA=failsafe,JSON_SCHEMA=json4,CORE_SCHEMA=core,DEFAULT_SCHEMA=_default6,load2=loader.load,loadAll=loader.loadAll,dump=dumper.dump,YAMLException=exception,types2={binary,float,map:map3,null:_null7,pairs,set:set3,timestamp,bool,int:int3,merge:merge3,omap,seq,str:str2},safeLoad=renamed("safeLoad","load"),safeLoadAll=renamed("safeLoadAll","loadAll"),safeDump=renamed("safeDump","dump"),jsYaml={Type,Schema,FAILSAFE_SCHEMA,JSON_SCHEMA,CORE_SCHEMA,DEFAULT_SCHEMA,load:load2,loadAll,dump,YAMLException,types:types2,safeLoad,safeLoadAll,safeDump}}});var require_constants8=__commonJS({"node_modules/semver/internal/constants.js"(exports3,module3){"use strict";var SEMVER_SPEC_VERSION="2.0.0",MAX_SAFE_INTEGER=Number.MAX_SAFE_INTEGER||9007199254740991,MAX_SAFE_COMPONENT_LENGTH=16,MAX_SAFE_BUILD_LENGTH=250,RELEASE_TYPES=["major","premajor","minor","preminor","patch","prepatch","prerelease"];module3.exports={MAX_LENGTH:256,MAX_SAFE_COMPONENT_LENGTH,MAX_SAFE_BUILD_LENGTH,MAX_SAFE_INTEGER,RELEASE_TYPES,SEMVER_SPEC_VERSION,FLAG_INCLUDE_PRERELEASE:1,FLAG_LOOSE:2}}});var require_debug=__commonJS({"node_modules/semver/internal/debug.js"(exports3,module3){"use strict";var debug2=typeof process=="object"&&process.env&&process.env.NODE_DEBUG&&/\bsemver\b/i.test(process.env.NODE_DEBUG)?(...args)=>console.error("SEMVER",...args):()=>{};module3.exports=debug2}});var require_re=__commonJS({"node_modules/semver/internal/re.js"(exports3,module3){"use strict";var{MAX_SAFE_COMPONENT_LENGTH,MAX_SAFE_BUILD_LENGTH,MAX_LENGTH}=require_constants8(),debug2=require_debug();exports3=module3.exports={};var re2=exports3.re=[],safeRe=exports3.safeRe=[],src=exports3.src=[],safeSrc=exports3.safeSrc=[],t=exports3.t={},R=0,LETTERDASHNUMBER="[a-zA-Z0-9-]",safeRegexReplacements=[["\\s",1],["\\d",MAX_LENGTH],[LETTERDASHNUMBER,MAX_SAFE_BUILD_LENGTH]],makeSafeRegex=value=>{for(let[token,max]of safeRegexReplacements)value=value.split(`${token}*`).join(`${token}{0,${max}}`).split(`${token}+`).join(`${token}{1,${max}}`);return value},createToken=(name2,value,isGlobal)=>{let safe=makeSafeRegex(value),index2=R++;debug2(name2,index2,value),t[name2]=index2,src[index2]=value,safeSrc[index2]=safe,re2[index2]=new RegExp(value,isGlobal?"g":void 0),safeRe[index2]=new RegExp(safe,isGlobal?"g":void 0)};createToken("NUMERICIDENTIFIER","0|[1-9]\\d*");createToken("NUMERICIDENTIFIERLOOSE","\\d+");createToken("NONNUMERICIDENTIFIER",`\\d*[a-zA-Z-]${LETTERDASHNUMBER}*`);createToken("MAINVERSION",`(${src[t.NUMERICIDENTIFIER]})\\.(${src[t.NUMERICIDENTIFIER]})\\.(${src[t.NUMERICIDENTIFIER]})`);createToken("MAINVERSIONLOOSE",`(${src[t.NUMERICIDENTIFIERLOOSE]})\\.(${src[t.NUMERICIDENTIFIERLOOSE]})\\.(${src[t.NUMERICIDENTIFIERLOOSE]})`);createToken("PRERELEASEIDENTIFIER",`(?:${src[t.NONNUMERICIDENTIFIER]}|${src[t.NUMERICIDENTIFIER]})`);createToken("PRERELEASEIDENTIFIERLOOSE",`(?:${src[t.NONNUMERICIDENTIFIER]}|${src[t.NUMERICIDENTIFIERLOOSE]})`);createToken("PRERELEASE",`(?:-(${src[t.PRERELEASEIDENTIFIER]}(?:\\.${src[t.PRERELEASEIDENTIFIER]})*))`);createToken("PRERELEASELOOSE",`(?:-?(${src[t.PRERELEASEIDENTIFIERLOOSE]}(?:\\.${src[t.PRERELEASEIDENTIFIERLOOSE]})*))`);createToken("BUILDIDENTIFIER",`${LETTERDASHNUMBER}+`);createToken("BUILD",`(?:\\+(${src[t.BUILDIDENTIFIER]}(?:\\.${src[t.BUILDIDENTIFIER]})*))`);createToken("FULLPLAIN",`v?${src[t.MAINVERSION]}${src[t.PRERELEASE]}?${src[t.BUILD]}?`);createToken("FULL",`^${src[t.FULLPLAIN]}$`);createToken("LOOSEPLAIN",`[v=\\s]*${src[t.MAINVERSIONLOOSE]}${src[t.PRERELEASELOOSE]}?${src[t.BUILD]}?`);createToken("LOOSE",`^${src[t.LOOSEPLAIN]}$`);createToken("GTLT","((?:<|>)?=?)");createToken("XRANGEIDENTIFIERLOOSE",`${src[t.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`);createToken("XRANGEIDENTIFIER",`${src[t.NUMERICIDENTIFIER]}|x|X|\\*`);createToken("XRANGEPLAIN",`[v=\\s]*(${src[t.XRANGEIDENTIFIER]})(?:\\.(${src[t.XRANGEIDENTIFIER]})(?:\\.(${src[t.XRANGEIDENTIFIER]})(?:${src[t.PRERELEASE]})?${src[t.BUILD]}?)?)?`);createToken("XRANGEPLAINLOOSE",`[v=\\s]*(${src[t.XRANGEIDENTIFIERLOOSE]})(?:\\.(${src[t.XRANGEIDENTIFIERLOOSE]})(?:\\.(${src[t.XRANGEIDENTIFIERLOOSE]})(?:${src[t.PRERELEASELOOSE]})?${src[t.BUILD]}?)?)?`);createToken("XRANGE",`^${src[t.GTLT]}\\s*${src[t.XRANGEPLAIN]}$`);createToken("XRANGELOOSE",`^${src[t.GTLT]}\\s*${src[t.XRANGEPLAINLOOSE]}$`);createToken("COERCEPLAIN",`(^|[^\\d])(\\d{1,${MAX_SAFE_COMPONENT_LENGTH}})(?:\\.(\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?(?:\\.(\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?`);createToken("COERCE",`${src[t.COERCEPLAIN]}(?:$|[^\\d])`);createToken("COERCEFULL",src[t.COERCEPLAIN]+`(?:${src[t.PRERELEASE]})?(?:${src[t.BUILD]})?(?:$|[^\\d])`);createToken("COERCERTL",src[t.COERCE],!0);createToken("COERCERTLFULL",src[t.COERCEFULL],!0);createToken("LONETILDE","(?:~>?)");createToken("TILDETRIM",`(\\s*)${src[t.LONETILDE]}\\s+`,!0);exports3.tildeTrimReplace="$1~";createToken("TILDE",`^${src[t.LONETILDE]}${src[t.XRANGEPLAIN]}$`);createToken("TILDELOOSE",`^${src[t.LONETILDE]}${src[t.XRANGEPLAINLOOSE]}$`);createToken("LONECARET","(?:\\^)");createToken("CARETTRIM",`(\\s*)${src[t.LONECARET]}\\s+`,!0);exports3.caretTrimReplace="$1^";createToken("CARET",`^${src[t.LONECARET]}${src[t.XRANGEPLAIN]}$`);createToken("CARETLOOSE",`^${src[t.LONECARET]}${src[t.XRANGEPLAINLOOSE]}$`);createToken("COMPARATORLOOSE",`^${src[t.GTLT]}\\s*(${src[t.LOOSEPLAIN]})$|^$`);createToken("COMPARATOR",`^${src[t.GTLT]}\\s*(${src[t.FULLPLAIN]})$|^$`);createToken("COMPARATORTRIM",`(\\s*)${src[t.GTLT]}\\s*(${src[t.LOOSEPLAIN]}|${src[t.XRANGEPLAIN]})`,!0);exports3.comparatorTrimReplace="$1$2$3";createToken("HYPHENRANGE",`^\\s*(${src[t.XRANGEPLAIN]})\\s+-\\s+(${src[t.XRANGEPLAIN]})\\s*$`);createToken("HYPHENRANGELOOSE",`^\\s*(${src[t.XRANGEPLAINLOOSE]})\\s+-\\s+(${src[t.XRANGEPLAINLOOSE]})\\s*$`);createToken("STAR","(<|>)?=?\\s*\\*");createToken("GTE0","^\\s*>=\\s*0\\.0\\.0\\s*$");createToken("GTE0PRE","^\\s*>=\\s*0\\.0\\.0-0\\s*$")}});var require_parse_options=__commonJS({"node_modules/semver/internal/parse-options.js"(exports3,module3){"use strict";var looseOption=Object.freeze({loose:!0}),emptyOpts=Object.freeze({}),parseOptions=options=>options?typeof options!="object"?looseOption:options:emptyOpts;module3.exports=parseOptions}});var require_identifiers=__commonJS({"node_modules/semver/internal/identifiers.js"(exports3,module3){"use strict";var numeric=/^[0-9]+$/,compareIdentifiers=(a,b)=>{if(typeof a=="number"&&typeof b=="number")return a===b?0:a<b?-1:1;let anum=numeric.test(a),bnum=numeric.test(b);return anum&&bnum&&(a=+a,b=+b),a===b?0:anum&&!bnum?-1:bnum&&!anum?1:a<b?-1:1},rcompareIdentifiers=(a,b)=>compareIdentifiers(b,a);module3.exports={compareIdentifiers,rcompareIdentifiers}}});var require_semver=__commonJS({"node_modules/semver/classes/semver.js"(exports3,module3){"use strict";var debug2=require_debug(),{MAX_LENGTH,MAX_SAFE_INTEGER}=require_constants8(),{safeRe:re2,t}=require_re(),parseOptions=require_parse_options(),{compareIdentifiers}=require_identifiers(),SemVer=class _SemVer{constructor(version5,options){if(options=parseOptions(options),version5 instanceof _SemVer){if(version5.loose===!!options.loose&&version5.includePrerelease===!!options.includePrerelease)return version5;version5=version5.version}else if(typeof version5!="string")throw new TypeError(`Invalid version. Must be a string. Got type "${typeof version5}".`);if(version5.length>MAX_LENGTH)throw new TypeError(`version is longer than ${MAX_LENGTH} characters`);debug2("SemVer",version5,options),this.options=options,this.loose=!!options.loose,this.includePrerelease=!!options.includePrerelease;let m=version5.trim().match(options.loose?re2[t.LOOSE]:re2[t.FULL]);if(!m)throw new TypeError(`Invalid Version: ${version5}`);if(this.raw=version5,this.major=+m[1],this.minor=+m[2],this.patch=+m[3],this.major>MAX_SAFE_INTEGER||this.major<0)throw new TypeError("Invalid major version");if(this.minor>MAX_SAFE_INTEGER||this.minor<0)throw new TypeError("Invalid minor version");if(this.patch>MAX_SAFE_INTEGER||this.patch<0)throw new TypeError("Invalid patch version");m[4]?this.prerelease=m[4].split(".").map(id=>{if(/^[0-9]+$/.test(id)){let num=+id;if(num>=0&&num<MAX_SAFE_INTEGER)return num}return id}):this.prerelease=[],this.build=m[5]?m[5].split("."):[],this.format()}format(){return this.version=`${this.major}.${this.minor}.${this.patch}`,this.prerelease.length&&(this.version+=`-${this.prerelease.join(".")}`),this.version}toString(){return this.version}compare(other){if(debug2("SemVer.compare",this.version,this.options,other),!(other instanceof _SemVer)){if(typeof other=="string"&&other===this.version)return 0;other=new _SemVer(other,this.options)}return other.version===this.version?0:this.compareMain(other)||this.comparePre(other)}compareMain(other){return other instanceof _SemVer||(other=new _SemVer(other,this.options)),this.major<other.major?-1:this.major>other.major?1:this.minor<other.minor?-1:this.minor>other.minor?1:this.patch<other.patch?-1:this.patch>other.patch?1:0}comparePre(other){if(other instanceof _SemVer||(other=new _SemVer(other,this.options)),this.prerelease.length&&!other.prerelease.length)return-1;if(!this.prerelease.length&&other.prerelease.length)return 1;if(!this.prerelease.length&&!other.prerelease.length)return 0;let i2=0;do{let a=this.prerelease[i2],b=other.prerelease[i2];if(debug2("prerelease compare",i2,a,b),a===void 0&&b===void 0)return 0;if(b===void 0)return 1;if(a===void 0)return-1;if(a===b)continue;return compareIdentifiers(a,b)}while(++i2)}compareBuild(other){other instanceof _SemVer||(other=new _SemVer(other,this.options));let i2=0;do{let a=this.build[i2],b=other.build[i2];if(debug2("build compare",i2,a,b),a===void 0&&b===void 0)return 0;if(b===void 0)return 1;if(a===void 0)return-1;if(a===b)continue;return compareIdentifiers(a,b)}while(++i2)}inc(release,identifier,identifierBase){if(release.startsWith("pre")){if(!identifier&&identifierBase===!1)throw new Error("invalid increment argument: identifier is empty");if(identifier){let match=`-${identifier}`.match(this.options.loose?re2[t.PRERELEASELOOSE]:re2[t.PRERELEASE]);if(!match||match[1]!==identifier)throw new Error(`invalid identifier: ${identifier}`)}}switch(release){case"premajor":this.prerelease.length=0,this.patch=0,this.minor=0,this.major++,this.inc("pre",identifier,identifierBase);break;case"preminor":this.prerelease.length=0,this.patch=0,this.minor++,this.inc("pre",identifier,identifierBase);break;case"prepatch":this.prerelease.length=0,this.inc("patch",identifier,identifierBase),this.inc("pre",identifier,identifierBase);break;case"prerelease":this.prerelease.length===0&&this.inc("patch",identifier,identifierBase),this.inc("pre",identifier,identifierBase);break;case"release":if(this.prerelease.length===0)throw new Error(`version ${this.raw} is not a prerelease`);this.prerelease.length=0;break;case"major":(this.minor!==0||this.patch!==0||this.prerelease.length===0)&&this.major++,this.minor=0,this.patch=0,this.prerelease=[];break;case"minor":(this.patch!==0||this.prerelease.length===0)&&this.minor++,this.patch=0,this.prerelease=[];break;case"patch":this.prerelease.length===0&&this.patch++,this.prerelease=[];break;case"pre":{let base=Number(identifierBase)?1:0;if(this.prerelease.length===0)this.prerelease=[base];else{let i2=this.prerelease.length;for(;--i2>=0;)typeof this.prerelease[i2]=="number"&&(this.prerelease[i2]++,i2=-2);if(i2===-1){if(identifier===this.prerelease.join(".")&&identifierBase===!1)throw new Error("invalid increment argument: identifier already exists");this.prerelease.push(base)}}if(identifier){let prerelease=[identifier,base];identifierBase===!1&&(prerelease=[identifier]),compareIdentifiers(this.prerelease[0],identifier)===0?isNaN(this.prerelease[1])&&(this.prerelease=prerelease):this.prerelease=prerelease}break}default:throw new Error(`invalid increment argument: ${release}`)}return this.raw=this.format(),this.build.length&&(this.raw+=`+${this.build.join(".")}`),this}};module3.exports=SemVer}});var require_parse6=__commonJS({"node_modules/semver/functions/parse.js"(exports3,module3){"use strict";var SemVer=require_semver(),parse10=(version5,options,throwErrors=!1)=>{if(version5 instanceof SemVer)return version5;try{return new SemVer(version5,options)}catch(er){if(!throwErrors)return null;throw er}};module3.exports=parse10}});var require_valid=__commonJS({"node_modules/semver/functions/valid.js"(exports3,module3){"use strict";var parse10=require_parse6(),valid=(version5,options)=>{let v=parse10(version5,options);return v?v.version:null};module3.exports=valid}});var require_clean=__commonJS({"node_modules/semver/functions/clean.js"(exports3,module3){"use strict";var parse10=require_parse6(),clean=(version5,options)=>{let s=parse10(version5.trim().replace(/^[=v]+/,""),options);return s?s.version:null};module3.exports=clean}});var require_inc=__commonJS({"node_modules/semver/functions/inc.js"(exports3,module3){"use strict";var SemVer=require_semver(),inc=(version5,release,options,identifier,identifierBase)=>{typeof options=="string"&&(identifierBase=identifier,identifier=options,options=void 0);try{return new SemVer(version5 instanceof SemVer?version5.version:version5,options).inc(release,identifier,identifierBase).version}catch{return null}};module3.exports=inc}});var require_diff=__commonJS({"node_modules/semver/functions/diff.js"(exports3,module3){"use strict";var parse10=require_parse6(),diff=(version1,version22)=>{let v13=parse10(version1,null,!0),v2=parse10(version22,null,!0),comparison=v13.compare(v2);if(comparison===0)return null;let v1Higher=comparison>0,highVersion=v1Higher?v13:v2,lowVersion=v1Higher?v2:v13,highHasPre=!!highVersion.prerelease.length;if(!!lowVersion.prerelease.length&&!highHasPre){if(!lowVersion.patch&&!lowVersion.minor)return"major";if(lowVersion.compareMain(highVersion)===0)return lowVersion.minor&&!lowVersion.patch?"minor":"patch"}let prefix=highHasPre?"pre":"";return v13.major!==v2.major?prefix+"major":v13.minor!==v2.minor?prefix+"minor":v13.patch!==v2.patch?prefix+"patch":"prerelease"};module3.exports=diff}});var require_major=__commonJS({"node_modules/semver/functions/major.js"(exports3,module3){"use strict";var SemVer=require_semver(),major2=(a,loose)=>new SemVer(a,loose).major;module3.exports=major2}});var require_minor=__commonJS({"node_modules/semver/functions/minor.js"(exports3,module3){"use strict";var SemVer=require_semver(),minor=(a,loose)=>new SemVer(a,loose).minor;module3.exports=minor}});var require_patch=__commonJS({"node_modules/semver/functions/patch.js"(exports3,module3){"use strict";var SemVer=require_semver(),patch=(a,loose)=>new SemVer(a,loose).patch;module3.exports=patch}});var require_prerelease=__commonJS({"node_modules/semver/functions/prerelease.js"(exports3,module3){"use strict";var parse10=require_parse6(),prerelease=(version5,options)=>{let parsed=parse10(version5,options);return parsed&&parsed.prerelease.length?parsed.prerelease:null};module3.exports=prerelease}});var require_compare=__commonJS({"node_modules/semver/functions/compare.js"(exports3,module3){"use strict";var SemVer=require_semver(),compare2=(a,b,loose)=>new SemVer(a,loose).compare(new SemVer(b,loose));module3.exports=compare2}});var require_rcompare=__commonJS({"node_modules/semver/functions/rcompare.js"(exports3,module3){"use strict";var compare2=require_compare(),rcompare=(a,b,loose)=>compare2(b,a,loose);module3.exports=rcompare}});var require_compare_loose=__commonJS({"node_modules/semver/functions/compare-loose.js"(exports3,module3){"use strict";var compare2=require_compare(),compareLoose=(a,b)=>compare2(a,b,!0);module3.exports=compareLoose}});var require_compare_build=__commonJS({"node_modules/semver/functions/compare-build.js"(exports3,module3){"use strict";var SemVer=require_semver(),compareBuild=(a,b,loose)=>{let versionA=new SemVer(a,loose),versionB=new SemVer(b,loose);return versionA.compare(versionB)||versionA.compareBuild(versionB)};module3.exports=compareBuild}});var require_sort=__commonJS({"node_modules/semver/functions/sort.js"(exports3,module3){"use strict";var compareBuild=require_compare_build(),sort=(list,loose)=>list.sort((a,b)=>compareBuild(a,b,loose));module3.exports=sort}});var require_rsort=__commonJS({"node_modules/semver/functions/rsort.js"(exports3,module3){"use strict";var compareBuild=require_compare_build(),rsort=(list,loose)=>list.sort((a,b)=>compareBuild(b,a,loose));module3.exports=rsort}});var require_gt=__commonJS({"node_modules/semver/functions/gt.js"(exports3,module3){"use strict";var compare2=require_compare(),gt=(a,b,loose)=>compare2(a,b,loose)>0;module3.exports=gt}});var require_lt=__commonJS({"node_modules/semver/functions/lt.js"(exports3,module3){"use strict";var compare2=require_compare(),lt=(a,b,loose)=>compare2(a,b,loose)<0;module3.exports=lt}});var require_eq=__commonJS({"node_modules/semver/functions/eq.js"(exports3,module3){"use strict";var compare2=require_compare(),eq=(a,b,loose)=>compare2(a,b,loose)===0;module3.exports=eq}});var require_neq=__commonJS({"node_modules/semver/functions/neq.js"(exports3,module3){"use strict";var compare2=require_compare(),neq=(a,b,loose)=>compare2(a,b,loose)!==0;module3.exports=neq}});var require_gte=__commonJS({"node_modules/semver/functions/gte.js"(exports3,module3){"use strict";var compare2=require_compare(),gte=(a,b,loose)=>compare2(a,b,loose)>=0;module3.exports=gte}});var require_lte=__commonJS({"node_modules/semver/functions/lte.js"(exports3,module3){"use strict";var compare2=require_compare(),lte=(a,b,loose)=>compare2(a,b,loose)<=0;module3.exports=lte}});var require_cmp=__commonJS({"node_modules/semver/functions/cmp.js"(exports3,module3){"use strict";var eq=require_eq(),neq=require_neq(),gt=require_gt(),gte=require_gte(),lt=require_lt(),lte=require_lte(),cmp=(a,op,b,loose)=>{switch(op){case"===":return typeof a=="object"&&(a=a.version),typeof b=="object"&&(b=b.version),a===b;case"!==":return typeof a=="object"&&(a=a.version),typeof b=="object"&&(b=b.version),a!==b;case"":case"=":case"==":return eq(a,b,loose);case"!=":return neq(a,b,loose);case">":return gt(a,b,loose);case">=":return gte(a,b,loose);case"<":return lt(a,b,loose);case"<=":return lte(a,b,loose);default:throw new TypeError(`Invalid operator: ${op}`)}};module3.exports=cmp}});var require_coerce=__commonJS({"node_modules/semver/functions/coerce.js"(exports3,module3){"use strict";var SemVer=require_semver(),parse10=require_parse6(),{safeRe:re2,t}=require_re(),coerce3=(version5,options)=>{if(version5 instanceof SemVer)return version5;if(typeof version5=="number"&&(version5=String(version5)),typeof version5!="string")return null;options=options||{};let match=null;if(!options.rtl)match=version5.match(options.includePrerelease?re2[t.COERCEFULL]:re2[t.COERCE]);else{let coerceRtlRegex=options.includePrerelease?re2[t.COERCERTLFULL]:re2[t.COERCERTL],next;for(;(next=coerceRtlRegex.exec(version5))&&(!match||match.index+match[0].length!==version5.length);)(!match||next.index+next[0].length!==match.index+match[0].length)&&(match=next),coerceRtlRegex.lastIndex=next.index+next[1].length+next[2].length;coerceRtlRegex.lastIndex=-1}if(match===null)return null;let major2=match[2],minor=match[3]||"0",patch=match[4]||"0",prerelease=options.includePrerelease&&match[5]?`-${match[5]}`:"",build=options.includePrerelease&&match[6]?`+${match[6]}`:"";return parse10(`${major2}.${minor}.${patch}${prerelease}${build}`,options)};module3.exports=coerce3}});var require_truncate=__commonJS({"node_modules/semver/functions/truncate.js"(exports3,module3){"use strict";var parse10=require_parse6(),constants2=require_constants8(),SemVer=require_semver(),truncate=(version5,truncation,options)=>{if(!constants2.RELEASE_TYPES.includes(truncation))return null;let clonedVersion=cloneInputVersion(version5,options);return clonedVersion&&doTruncation(clonedVersion,truncation)},cloneInputVersion=(version5,options)=>{let versionStringToParse=version5 instanceof SemVer?version5.version:version5;return parse10(versionStringToParse,options)},doTruncation=(version5,truncation)=>{if(isPrerelease(truncation))return version5.version;switch(version5.prerelease=[],truncation){case"major":version5.minor=0,version5.patch=0;break;case"minor":version5.patch=0;break}return version5.format()},isPrerelease=type3=>type3.startsWith("pre");module3.exports=truncate}});var require_lrucache=__commonJS({"node_modules/semver/internal/lrucache.js"(exports3,module3){"use strict";var LRUCache=class{constructor(){this.max=1e3,this.map=new Map}get(key){let value=this.map.get(key);if(value!==void 0)return this.map.delete(key),this.map.set(key,value),value}delete(key){return this.map.delete(key)}set(key,value){if(!this.delete(key)&&value!==void 0){if(this.map.size>=this.max){let firstKey=this.map.keys().next().value;this.delete(firstKey)}this.map.set(key,value)}return this}};module3.exports=LRUCache}});var require_range2=__commonJS({"node_modules/semver/classes/range.js"(exports3,module3){"use strict";var SPACE_CHARACTERS=/\s+/g,Range=class _Range{constructor(range,options){if(options=parseOptions(options),range instanceof _Range)return range.loose===!!options.loose&&range.includePrerelease===!!options.includePrerelease?range:new _Range(range.raw,options);if(range instanceof Comparator)return this.raw=range.value,this.set=[[range]],this.formatted=void 0,this;if(this.options=options,this.loose=!!options.loose,this.includePrerelease=!!options.includePrerelease,this.raw=range.trim().replace(SPACE_CHARACTERS," "),this.set=this.raw.split("||").map(r=>this.parseRange(r.trim())).filter(c=>c.length),!this.set.length)throw new TypeError(`Invalid SemVer Range: ${this.raw}`);if(this.set.length>1){let first=this.set[0];if(this.set=this.set.filter(c=>!isNullSet(c[0])),this.set.length===0)this.set=[first];else if(this.set.length>1){for(let c of this.set)if(c.length===1&&isAny(c[0])){this.set=[c];break}}}this.formatted=void 0}get range(){if(this.formatted===void 0){this.formatted="";for(let i2=0;i2<this.set.length;i2++){i2>0&&(this.formatted+="||");let comps=this.set[i2];for(let k=0;k<comps.length;k++)k>0&&(this.formatted+=" "),this.formatted+=comps[k].toString().trim()}}return this.formatted}format(){return this.range}toString(){return this.range}parseRange(range){let memoKey=((this.options.includePrerelease&&FLAG_INCLUDE_PRERELEASE)|(this.options.loose&&FLAG_LOOSE))+":"+range,cached4=cache5.get(memoKey);if(cached4)return cached4;let loose=this.options.loose,hr=loose?re2[t.HYPHENRANGELOOSE]:re2[t.HYPHENRANGE];range=range.replace(hr,hyphenReplace(this.options.includePrerelease)),debug2("hyphen replace",range),range=range.replace(re2[t.COMPARATORTRIM],comparatorTrimReplace),debug2("comparator trim",range),range=range.replace(re2[t.TILDETRIM],tildeTrimReplace),debug2("tilde trim",range),range=range.replace(re2[t.CARETTRIM],caretTrimReplace),debug2("caret trim",range);let rangeList=range.split(" ").map(comp=>parseComparator(comp,this.options)).join(" ").split(/\s+/).map(comp=>replaceGTE0(comp,this.options));loose&&(rangeList=rangeList.filter(comp=>(debug2("loose invalid filter",comp,this.options),!!comp.match(re2[t.COMPARATORLOOSE])))),debug2("range list",rangeList);let rangeMap=new Map,comparators=rangeList.map(comp=>new Comparator(comp,this.options));for(let comp of comparators){if(isNullSet(comp))return[comp];rangeMap.set(comp.value,comp)}rangeMap.size>1&&rangeMap.has("")&&rangeMap.delete("");let result=[...rangeMap.values()];return cache5.set(memoKey,result),result}intersects(range,options){if(!(range instanceof _Range))throw new TypeError("a Range is required");return this.set.some(thisComparators=>isSatisfiable(thisComparators,options)&&range.set.some(rangeComparators=>isSatisfiable(rangeComparators,options)&&thisComparators.every(thisComparator=>rangeComparators.every(rangeComparator=>thisComparator.intersects(rangeComparator,options)))))}test(version5){if(!version5)return!1;if(typeof version5=="string")try{version5=new SemVer(version5,this.options)}catch{return!1}for(let i2=0;i2<this.set.length;i2++)if(testSet(this.set[i2],version5,this.options))return!0;return!1}};module3.exports=Range;var LRU=require_lrucache(),cache5=new LRU,parseOptions=require_parse_options(),Comparator=require_comparator(),debug2=require_debug(),SemVer=require_semver(),{safeRe:re2,t,comparatorTrimReplace,tildeTrimReplace,caretTrimReplace}=require_re(),{FLAG_INCLUDE_PRERELEASE,FLAG_LOOSE}=require_constants8(),isNullSet=c=>c.value==="<0.0.0-0",isAny=c=>c.value==="",isSatisfiable=(comparators,options)=>{let result=!0,remainingComparators=comparators.slice(),testComparator=remainingComparators.pop();for(;result&&remainingComparators.length;)result=remainingComparators.every(otherComparator=>testComparator.intersects(otherComparator,options)),testComparator=remainingComparators.pop();return result},parseComparator=(comp,options)=>(comp=comp.replace(re2[t.BUILD],""),debug2("comp",comp,options),comp=replaceCarets(comp,options),debug2("caret",comp),comp=replaceTildes(comp,options),debug2("tildes",comp),comp=replaceXRanges(comp,options),debug2("xrange",comp),comp=replaceStars(comp,options),debug2("stars",comp),comp),isX=id=>!id||id.toLowerCase()==="x"||id==="*",replaceTildes=(comp,options)=>comp.trim().split(/\s+/).map(c=>replaceTilde(c,options)).join(" "),replaceTilde=(comp,options)=>{let r=options.loose?re2[t.TILDELOOSE]:re2[t.TILDE];return comp.replace(r,(_,M,m,p,pr)=>{debug2("tilde",comp,_,M,m,p,pr);let ret;return isX(M)?ret="":isX(m)?ret=`>=${M}.0.0 <${+M+1}.0.0-0`:isX(p)?ret=`>=${M}.${m}.0 <${M}.${+m+1}.0-0`:pr?(debug2("replaceTilde pr",pr),ret=`>=${M}.${m}.${p}-${pr} <${M}.${+m+1}.0-0`):ret=`>=${M}.${m}.${p} <${M}.${+m+1}.0-0`,debug2("tilde return",ret),ret})},replaceCarets=(comp,options)=>comp.trim().split(/\s+/).map(c=>replaceCaret(c,options)).join(" "),replaceCaret=(comp,options)=>{debug2("caret",comp,options);let r=options.loose?re2[t.CARETLOOSE]:re2[t.CARET],z2=options.includePrerelease?"-0":"";return comp.replace(r,(_,M,m,p,pr)=>{debug2("caret",comp,_,M,m,p,pr);let ret;return isX(M)?ret="":isX(m)?ret=`>=${M}.0.0${z2} <${+M+1}.0.0-0`:isX(p)?M==="0"?ret=`>=${M}.${m}.0${z2} <${M}.${+m+1}.0-0`:ret=`>=${M}.${m}.0${z2} <${+M+1}.0.0-0`:pr?(debug2("replaceCaret pr",pr),M==="0"?m==="0"?ret=`>=${M}.${m}.${p}-${pr} <${M}.${m}.${+p+1}-0`:ret=`>=${M}.${m}.${p}-${pr} <${M}.${+m+1}.0-0`:ret=`>=${M}.${m}.${p}-${pr} <${+M+1}.0.0-0`):(debug2("no pr"),M==="0"?m==="0"?ret=`>=${M}.${m}.${p}${z2} <${M}.${m}.${+p+1}-0`:ret=`>=${M}.${m}.${p}${z2} <${M}.${+m+1}.0-0`:ret=`>=${M}.${m}.${p} <${+M+1}.0.0-0`),debug2("caret return",ret),ret})},replaceXRanges=(comp,options)=>(debug2("replaceXRanges",comp,options),comp.split(/\s+/).map(c=>replaceXRange(c,options)).join(" ")),replaceXRange=(comp,options)=>{comp=comp.trim();let r=options.loose?re2[t.XRANGELOOSE]:re2[t.XRANGE];return comp.replace(r,(ret,gtlt,M,m,p,pr)=>{debug2("xRange",comp,ret,gtlt,M,m,p,pr);let xM=isX(M),xm=xM||isX(m),xp=xm||isX(p),anyX=xp;return gtlt==="="&&anyX&&(gtlt=""),pr=options.includePrerelease?"-0":"",xM?gtlt===">"||gtlt==="<"?ret="<0.0.0-0":ret="*":gtlt&&anyX?(xm&&(m=0),p=0,gtlt===">"?(gtlt=">=",xm?(M=+M+1,m=0,p=0):(m=+m+1,p=0)):gtlt==="<="&&(gtlt="<",xm?M=+M+1:m=+m+1),gtlt==="<"&&(pr="-0"),ret=`${gtlt+M}.${m}.${p}${pr}`):xm?ret=`>=${M}.0.0${pr} <${+M+1}.0.0-0`:xp&&(ret=`>=${M}.${m}.0${pr} <${M}.${+m+1}.0-0`),debug2("xRange return",ret),ret})},replaceStars=(comp,options)=>(debug2("replaceStars",comp,options),comp.trim().replace(re2[t.STAR],"")),replaceGTE0=(comp,options)=>(debug2("replaceGTE0",comp,options),comp.trim().replace(re2[options.includePrerelease?t.GTE0PRE:t.GTE0],"")),hyphenReplace=incPr=>($0,from,fM,fm,fp,fpr,fb,to,tM,tm,tp,tpr)=>(isX(fM)?from="":isX(fm)?from=`>=${fM}.0.0${incPr?"-0":""}`:isX(fp)?from=`>=${fM}.${fm}.0${incPr?"-0":""}`:fpr?from=`>=${from}`:from=`>=${from}${incPr?"-0":""}`,isX(tM)?to="":isX(tm)?to=`<${+tM+1}.0.0-0`:isX(tp)?to=`<${tM}.${+tm+1}.0-0`:tpr?to=`<=${tM}.${tm}.${tp}-${tpr}`:incPr?to=`<${tM}.${tm}.${+tp+1}-0`:to=`<=${to}`,`${from} ${to}`.trim()),testSet=(set4,version5,options)=>{for(let i2=0;i2<set4.length;i2++)if(!set4[i2].test(version5))return!1;if(version5.prerelease.length&&!options.includePrerelease){for(let i2=0;i2<set4.length;i2++)if(debug2(set4[i2].semver),set4[i2].semver!==Comparator.ANY&&set4[i2].semver.prerelease.length>0){let allowed=set4[i2].semver;if(allowed.major===version5.major&&allowed.minor===version5.minor&&allowed.patch===version5.patch)return!0}return!1}return!0}}});var require_comparator=__commonJS({"node_modules/semver/classes/comparator.js"(exports3,module3){"use strict";var ANY=Symbol("SemVer ANY"),Comparator=class _Comparator{static get ANY(){return ANY}constructor(comp,options){if(options=parseOptions(options),comp instanceof _Comparator){if(comp.loose===!!options.loose)return comp;comp=comp.value}comp=comp.trim().split(/\s+/).join(" "),debug2("comparator",comp,options),this.options=options,this.loose=!!options.loose,this.parse(comp),this.semver===ANY?this.value="":this.value=this.operator+this.semver.version,debug2("comp",this)}parse(comp){let r=this.options.loose?re2[t.COMPARATORLOOSE]:re2[t.COMPARATOR],m=comp.match(r);if(!m)throw new TypeError(`Invalid comparator: ${comp}`);this.operator=m[1]!==void 0?m[1]:"",this.operator==="="&&(this.operator=""),m[2]?this.semver=new SemVer(m[2],this.options.loose):this.semver=ANY}toString(){return this.value}test(version5){if(debug2("Comparator.test",version5,this.options.loose),this.semver===ANY||version5===ANY)return!0;if(typeof version5=="string")try{version5=new SemVer(version5,this.options)}catch{return!1}return cmp(version5,this.operator,this.semver,this.options)}intersects(comp,options){if(!(comp instanceof _Comparator))throw new TypeError("a Comparator is required");return this.operator===""?this.value===""?!0:new Range(comp.value,options).test(this.value):comp.operator===""?comp.value===""?!0:new Range(this.value,options).test(comp.semver):(options=parseOptions(options),options.includePrerelease&&(this.value==="<0.0.0-0"||comp.value==="<0.0.0-0")||!options.includePrerelease&&(this.value.startsWith("<0.0.0")||comp.value.startsWith("<0.0.0"))?!1:!!(this.operator.startsWith(">")&&comp.operator.startsWith(">")||this.operator.startsWith("<")&&comp.operator.startsWith("<")||this.semver.version===comp.semver.version&&this.operator.includes("=")&&comp.operator.includes("=")||cmp(this.semver,"<",comp.semver,options)&&this.operator.startsWith(">")&&comp.operator.startsWith("<")||cmp(this.semver,">",comp.semver,options)&&this.operator.startsWith("<")&&comp.operator.startsWith(">")))}};module3.exports=Comparator;var parseOptions=require_parse_options(),{safeRe:re2,t}=require_re(),cmp=require_cmp(),debug2=require_debug(),SemVer=require_semver(),Range=require_range2()}});var require_satisfies=__commonJS({"node_modules/semver/functions/satisfies.js"(exports3,module3){"use strict";var Range=require_range2(),satisfies2=(version5,range,options)=>{try{range=new Range(range,options)}catch{return!1}return range.test(version5)};module3.exports=satisfies2}});var require_to_comparators=__commonJS({"node_modules/semver/ranges/to-comparators.js"(exports3,module3){"use strict";var Range=require_range2(),toComparators=(range,options)=>new Range(range,options).set.map(comp=>comp.map(c=>c.value).join(" ").trim().split(" "));module3.exports=toComparators}});var require_max_satisfying=__commonJS({"node_modules/semver/ranges/max-satisfying.js"(exports3,module3){"use strict";var SemVer=require_semver(),Range=require_range2(),maxSatisfying=(versions,range,options)=>{let max=null,maxSV=null,rangeObj=null;try{rangeObj=new Range(range,options)}catch{return null}return versions.forEach(v=>{rangeObj.test(v)&&(!max||maxSV.compare(v)===-1)&&(max=v,maxSV=new SemVer(max,options))}),max};module3.exports=maxSatisfying}});var require_min_satisfying=__commonJS({"node_modules/semver/ranges/min-satisfying.js"(exports3,module3){"use strict";var SemVer=require_semver(),Range=require_range2(),minSatisfying=(versions,range,options)=>{let min=null,minSV=null,rangeObj=null;try{rangeObj=new Range(range,options)}catch{return null}return versions.forEach(v=>{rangeObj.test(v)&&(!min||minSV.compare(v)===1)&&(min=v,minSV=new SemVer(min,options))}),min};module3.exports=minSatisfying}});var require_min_version=__commonJS({"node_modules/semver/ranges/min-version.js"(exports3,module3){"use strict";var SemVer=require_semver(),Range=require_range2(),gt=require_gt(),minVersion=(range,loose)=>{range=new Range(range,loose);let minver=new SemVer("0.0.0");if(range.test(minver)||(minver=new SemVer("0.0.0-0"),range.test(minver)))return minver;minver=null;for(let i2=0;i2<range.set.length;++i2){let comparators=range.set[i2],setMin=null;comparators.forEach(comparator=>{let compver=new SemVer(comparator.semver.version);switch(comparator.operator){case">":compver.prerelease.length===0?compver.patch++:compver.prerelease.push(0),compver.raw=compver.format();case"":case">=":(!setMin||gt(compver,setMin))&&(setMin=compver);break;case"<":case"<=":break;default:throw new Error(`Unexpected operation: ${comparator.operator}`)}}),setMin&&(!minver||gt(minver,setMin))&&(minver=setMin)}return minver&&range.test(minver)?minver:null};module3.exports=minVersion}});var require_valid2=__commonJS({"node_modules/semver/ranges/valid.js"(exports3,module3){"use strict";var Range=require_range2(),validRange=(range,options)=>{try{return new Range(range,options).range||"*"}catch{return null}};module3.exports=validRange}});var require_outside=__commonJS({"node_modules/semver/ranges/outside.js"(exports3,module3){"use strict";var SemVer=require_semver(),Comparator=require_comparator(),{ANY}=Comparator,Range=require_range2(),satisfies2=require_satisfies(),gt=require_gt(),lt=require_lt(),lte=require_lte(),gte=require_gte(),outside=(version5,range,hilo,options)=>{version5=new SemVer(version5,options),range=new Range(range,options);let gtfn,ltefn,ltfn,comp,ecomp;switch(hilo){case">":gtfn=gt,ltefn=lte,ltfn=lt,comp=">",ecomp=">=";break;case"<":gtfn=lt,ltefn=gte,ltfn=gt,comp="<",ecomp="<=";break;default:throw new TypeError('Must provide a hilo val of "<" or ">"')}if(satisfies2(version5,range,options))return!1;for(let i2=0;i2<range.set.length;++i2){let comparators=range.set[i2],high=null,low=null;if(comparators.forEach(comparator=>{comparator.semver===ANY&&(comparator=new Comparator(">=0.0.0")),high=high||comparator,low=low||comparator,gtfn(comparator.semver,high.semver,options)?high=comparator:ltfn(comparator.semver,low.semver,options)&&(low=comparator)}),high.operator===comp||high.operator===ecomp||(!low.operator||low.operator===comp)&<efn(version5,low.semver))return!1;if(low.operator===ecomp&<fn(version5,low.semver))return!1}return!0};module3.exports=outside}});var require_gtr=__commonJS({"node_modules/semver/ranges/gtr.js"(exports3,module3){"use strict";var outside=require_outside(),gtr=(version5,range,options)=>outside(version5,range,">",options);module3.exports=gtr}});var require_ltr=__commonJS({"node_modules/semver/ranges/ltr.js"(exports3,module3){"use strict";var outside=require_outside(),ltr=(version5,range,options)=>outside(version5,range,"<",options);module3.exports=ltr}});var require_intersects=__commonJS({"node_modules/semver/ranges/intersects.js"(exports3,module3){"use strict";var Range=require_range2(),intersects=(r1,r2,options)=>(r1=new Range(r1,options),r2=new Range(r2,options),r1.intersects(r2,options));module3.exports=intersects}});var require_simplify=__commonJS({"node_modules/semver/ranges/simplify.js"(exports3,module3){"use strict";var satisfies2=require_satisfies(),compare2=require_compare();module3.exports=(versions,range,options)=>{let set4=[],first=null,prev=null,v=versions.sort((a,b)=>compare2(a,b,options));for(let version5 of v)satisfies2(version5,range,options)?(prev=version5,first||(first=version5)):(prev&&set4.push([first,prev]),prev=null,first=null);first&&set4.push([first,null]);let ranges=[];for(let[min,max]of set4)min===max?ranges.push(min):!max&&min===v[0]?ranges.push("*"):max?min===v[0]?ranges.push(`<=${max}`):ranges.push(`${min} - ${max}`):ranges.push(`>=${min}`);let simplified=ranges.join(" || "),original=typeof range.raw=="string"?range.raw:String(range);return simplified.length<original.length?simplified:range}}});var require_subset=__commonJS({"node_modules/semver/ranges/subset.js"(exports3,module3){"use strict";var Range=require_range2(),Comparator=require_comparator(),{ANY}=Comparator,satisfies2=require_satisfies(),compare2=require_compare(),subset=(sub,dom,options={})=>{if(sub===dom)return!0;sub=new Range(sub,options),dom=new Range(dom,options);let sawNonNull=!1;OUTER:for(let simpleSub of sub.set){for(let simpleDom of dom.set){let isSub=simpleSubset(simpleSub,simpleDom,options);if(sawNonNull=sawNonNull||isSub!==null,isSub)continue OUTER}if(sawNonNull)return!1}return!0},minimumVersionWithPreRelease=[new Comparator(">=0.0.0-0")],minimumVersion=[new Comparator(">=0.0.0")],simpleSubset=(sub,dom,options)=>{if(sub===dom)return!0;if(sub.length===1&&sub[0].semver===ANY){if(dom.length===1&&dom[0].semver===ANY)return!0;options.includePrerelease?sub=minimumVersionWithPreRelease:sub=minimumVersion}if(dom.length===1&&dom[0].semver===ANY){if(options.includePrerelease)return!0;dom=minimumVersion}let eqSet=new Set,gt,lt;for(let c of sub)c.operator===">"||c.operator===">="?gt=higherGT(gt,c,options):c.operator==="<"||c.operator==="<="?lt=lowerLT(lt,c,options):eqSet.add(c.semver);if(eqSet.size>1)return null;let gtltComp;if(gt&<){if(gtltComp=compare2(gt.semver,lt.semver,options),gtltComp>0)return null;if(gtltComp===0&&(gt.operator!==">="||lt.operator!=="<="))return null}for(let eq of eqSet){if(gt&&!satisfies2(eq,String(gt),options)||lt&&!satisfies2(eq,String(lt),options))return null;for(let c of dom)if(!satisfies2(eq,String(c),options))return!1;return!0}let higher,lower,hasDomLT,hasDomGT,needDomLTPre=lt&&!options.includePrerelease&<.semver.prerelease.length?lt.semver:!1,needDomGTPre=gt&&!options.includePrerelease&>.semver.prerelease.length?gt.semver:!1;needDomLTPre&&needDomLTPre.prerelease.length===1&<.operator==="<"&&needDomLTPre.prerelease[0]===0&&(needDomLTPre=!1);for(let c of dom){if(hasDomGT=hasDomGT||c.operator===">"||c.operator===">=",hasDomLT=hasDomLT||c.operator==="<"||c.operator==="<=",gt){if(needDomGTPre&&c.semver.prerelease&&c.semver.prerelease.length&&c.semver.major===needDomGTPre.major&&c.semver.minor===needDomGTPre.minor&&c.semver.patch===needDomGTPre.patch&&(needDomGTPre=!1),c.operator===">"||c.operator===">="){if(higher=higherGT(gt,c,options),higher===c&&higher!==gt)return!1}else if(gt.operator===">="&&!satisfies2(gt.semver,String(c),options))return!1}if(lt){if(needDomLTPre&&c.semver.prerelease&&c.semver.prerelease.length&&c.semver.major===needDomLTPre.major&&c.semver.minor===needDomLTPre.minor&&c.semver.patch===needDomLTPre.patch&&(needDomLTPre=!1),c.operator==="<"||c.operator==="<="){if(lower=lowerLT(lt,c,options),lower===c&&lower!==lt)return!1}else if(lt.operator==="<="&&!satisfies2(lt.semver,String(c),options))return!1}if(!c.operator&&(lt||gt)&>ltComp!==0)return!1}return!(gt&&hasDomLT&&!lt&>ltComp!==0||lt&&hasDomGT&&!gt&>ltComp!==0||needDomGTPre||needDomLTPre)},higherGT=(a,b,options)=>{if(!a)return b;let comp=compare2(a.semver,b.semver,options);return comp>0?a:comp<0||b.operator===">"&&a.operator===">="?b:a},lowerLT=(a,b,options)=>{if(!a)return b;let comp=compare2(a.semver,b.semver,options);return comp<0?a:comp>0||b.operator==="<"&&a.operator==="<="?b:a};module3.exports=subset}});var require_semver2=__commonJS({"node_modules/semver/index.js"(exports3,module3){"use strict";var internalRe=require_re(),constants2=require_constants8(),SemVer=require_semver(),identifiers=require_identifiers(),parse10=require_parse6(),valid=require_valid(),clean=require_clean(),inc=require_inc(),diff=require_diff(),major2=require_major(),minor=require_minor(),patch=require_patch(),prerelease=require_prerelease(),compare2=require_compare(),rcompare=require_rcompare(),compareLoose=require_compare_loose(),compareBuild=require_compare_build(),sort=require_sort(),rsort=require_rsort(),gt=require_gt(),lt=require_lt(),eq=require_eq(),neq=require_neq(),gte=require_gte(),lte=require_lte(),cmp=require_cmp(),coerce3=require_coerce(),truncate=require_truncate(),Comparator=require_comparator(),Range=require_range2(),satisfies2=require_satisfies(),toComparators=require_to_comparators(),maxSatisfying=require_max_satisfying(),minSatisfying=require_min_satisfying(),minVersion=require_min_version(),validRange=require_valid2(),outside=require_outside(),gtr=require_gtr(),ltr=require_ltr(),intersects=require_intersects(),simplifyRange=require_simplify(),subset=require_subset();module3.exports={parse:parse10,valid,clean,inc,diff,major:major2,minor,patch,prerelease,compare:compare2,rcompare,compareLoose,compareBuild,sort,rsort,gt,lt,eq,neq,gte,lte,cmp,coerce:coerce3,truncate,Comparator,Range,satisfies:satisfies2,toComparators,maxSatisfying,minSatisfying,minVersion,validRange,outside,gtr,ltr,intersects,simplifyRange,subset,SemVer,re:internalRe.re,src:internalRe.src,tokens:internalRe.t,SEMVER_SPEC_VERSION:constants2.SEMVER_SPEC_VERSION,RELEASE_TYPES:constants2.RELEASE_TYPES,compareIdentifiers:identifiers.compareIdentifiers,rcompareIdentifiers:identifiers.rcompareIdentifiers}}});function loadWorkflowFromYaml(yamlContent){let raw=jsYaml.load(yamlContent);if(!raw||typeof raw!="object")throw new Error("Invalid workflow YAML: document is not an object");let document2=parseDocument(raw.document);validateDslVersion(document2.dsl);let doList=parseTaskList(raw.do);if(doList.length===0)throw new Error("Workflow must have at least one task in 'do'");return{document:document2,do:doList,input:raw.input?parseInputDef(raw.input):void 0,output:raw.output?parseOutputDef(raw.output):void 0}}function parseDocument(raw){if(!raw||typeof raw!="object")throw new Error("Workflow must have a 'document' field");let doc=raw;if(typeof doc.dsl!="string")throw new Error("document.dsl must be a string");if(typeof doc.name!="string")throw new Error("document.name must be a string");return{dsl:doc.dsl,name:doc.name,namespace:typeof doc.namespace=="string"?doc.namespace:void 0,version:typeof doc.version=="string"?doc.version:void 0,description:typeof doc.description=="string"?doc.description:void 0}}function validateDslVersion(dsl){if(!(0,import_semver2.satisfies)(dsl,SUPPORTED_DSL_RANGE))throw new Error(`Unsupported DSL version '${dsl}'. Supported range: ${SUPPORTED_DSL_RANGE}`)}function parseTaskList(raw){if(!Array.isArray(raw))throw new Error("'do' must be an array of task entries");return raw.map((entry,index2)=>{if(!entry||typeof entry!="object")throw new Error(`Task entry at index ${index2} is not an object`);let keys=Object.keys(entry);if(keys.length!==1)throw new Error(`Task entry at index ${index2} must have exactly one key (task name), got: ${keys.join(", ")}`);let taskName=keys[0],taskRaw=entry[taskName];return{key:taskName,task:discriminateTask(taskName,taskRaw)}})}function discriminateTask(taskName,raw){let base=parseTaskBase(raw);if("set"in raw)return{kind:"set",...base,set:raw.set};if("switch"in raw)return{kind:"switch",...base,switch:parseSwitchCases(raw.switch)};if("do"in raw&&!("for"in raw)&&!("try"in raw))return{kind:"do",...base,do:parseTaskList(raw.do)};if("for"in raw){let forConfig=raw.for;return{kind:"for",...base,for:{each:typeof forConfig.each=="string"?forConfig.each:void 0,in:forConfig.in,at:typeof forConfig.at=="string"?forConfig.at:void 0},while:typeof raw.while=="string"?raw.while:void 0,do:parseTaskList(raw.do)}}if("fork"in raw){let forkConfig=raw.fork;return{kind:"fork",...base,fork:{branches:parseTaskList(forkConfig.branches),compete:typeof forkConfig.compete=="boolean"?forkConfig.compete:void 0}}}if("try"in raw)return{kind:"try",...base,try:parseTaskList(raw.try),catch:parseCatchConfig(raw.catch)};if("wait"in raw)return{kind:"wait",...base,wait:raw.wait};if("listen"in raw)return{kind:"listen",...base,listen:raw.listen};if("raise"in raw)return{kind:"raise",...base,raise:parseRaiseConfig(taskName,raw.raise)};if("call"in raw){let callValue=raw.call;return callValue==="http"?{kind:"call:http",...base,call:"http",with:raw.with}:callValue==="grpc"?{kind:"call:grpc",...base,call:"grpc",with:raw.with}:callValue==="agent"?{kind:"call:agent",...base,call:"agent",with:parseAgentCallConfig(raw.with)}:callValue==="human_input"?{kind:"human_input",...base,humanInput:parseHumanInputConfig(taskName,raw.with)}:{kind:"call:function",...base,call:callValue,with:raw.with}}if("run"in raw)return{kind:"run",...base,run:raw.run};throw new Error(`Cannot determine task type for '${taskName}'. Expected one of: set, switch, do, for, fork, try, wait, listen, raise, call, run`)}function parseTaskBase(raw){return{if:typeof raw.if=="string"?raw.if:void 0,input:raw.input?parseInputDef(raw.input):void 0,output:raw.output?parseOutputDef(raw.output):void 0,export:raw.export?parseExportDef(raw.export):void 0,then:typeof raw.then=="string"?raw.then:void 0,metadata:raw.metadata}}function parseSwitchCases(raw){if(!Array.isArray(raw))throw new Error("'switch' must be an array of cases");return raw.map((entry,index2)=>{if(!entry||typeof entry!="object")throw new Error(`Switch case at index ${index2} is not an object`);let keys=Object.keys(entry);if(keys.length!==1)throw new Error(`Switch case at index ${index2} must have exactly one key (case name)`);let caseName=keys[0],caseRaw=entry[caseName];return{name:caseName,when:typeof caseRaw.when=="string"?caseRaw.when:void 0,then:caseRaw.then}})}function parseCatchConfig(raw){if(!raw||typeof raw!="object")return{};let catchRaw=raw;return{errors:catchRaw.errors,as:typeof catchRaw.as=="string"?catchRaw.as:void 0,when:typeof catchRaw.when=="string"?catchRaw.when:void 0,do:catchRaw.do?parseTaskList(catchRaw.do):void 0,retry:catchRaw.retry?parseRetryConfig(catchRaw.retry):void 0}}function parseRetryConfig(raw){if(!raw||typeof raw!="object")return{};let obj=raw;return{when:typeof obj.when=="string"?obj.when:void 0,exceptWhen:typeof obj.exceptWhen=="string"?obj.exceptWhen:void 0,delay:obj.delay?parseDurationDef(obj.delay):void 0,backoff:obj.backoff?parseBackoffConfig(obj.backoff):void 0,limit:obj.limit?parseRetryLimit(obj.limit):void 0,jitter:obj.jitter?parseJitterConfig(obj.jitter):void 0}}function parseDurationDef(raw){if(!raw||typeof raw!="object")return{};let obj=raw;return{days:typeof obj.days=="number"?obj.days:void 0,hours:typeof obj.hours=="number"?obj.hours:void 0,minutes:typeof obj.minutes=="number"?obj.minutes:void 0,seconds:typeof obj.seconds=="number"?obj.seconds:void 0,milliseconds:typeof obj.milliseconds=="number"?obj.milliseconds:void 0}}function parseBackoffConfig(raw){if(!raw||typeof raw!="object")return{};let obj=raw,present=["constant","exponential","linear"].filter(s=>s in obj);if(present.length>1)throw new Error(`Retry backoff must specify exactly one strategy (constant, exponential, or linear), got: ${present.join(", ")}`);return{constant:obj.constant!=null?obj.constant:void 0,exponential:obj.exponential!=null?obj.exponential:void 0,linear:obj.linear!=null?obj.linear:void 0}}function parseRetryLimit(raw){if(!raw||typeof raw!="object")return{};let obj=raw,attempt;if(obj.attempt&&typeof obj.attempt=="object"){let count=obj.attempt.count;typeof count=="number"&&count>0&&Number.isInteger(count)&&(attempt={count})}return{attempt,duration:obj.duration?parseDurationDef(obj.duration):void 0}}function parseJitterConfig(raw){if(!raw||typeof raw!="object")return{};let obj=raw;return{from:obj.from?parseDurationDef(obj.from):void 0,to:obj.to?parseDurationDef(obj.to):void 0}}function parseInputDef(raw){if(typeof raw!="object"||raw===null)return{};let obj=raw;return{from:obj.from,schema:obj.schema}}function parseOutputDef(raw){if(typeof raw!="object"||raw===null)return{};let obj=raw;return{as:obj.as,schema:obj.schema}}function parseExportDef(raw){if(typeof raw!="object"||raw===null)return{};let obj=raw;return{as:obj.as,schema:obj.schema}}function parseRaiseConfig(taskName,raw){if(!raw||typeof raw!="object")throw new Error(`raise task '${taskName}' requires an error definition`);let errorDef=raw.error;if(!errorDef||typeof errorDef!="object")throw new Error(`raise task '${taskName}' requires 'error' in raise definition`);if(typeof errorDef.type!="string"||!errorDef.type)throw new Error(`raise task '${taskName}' requires 'error.type' (string)`);if(typeof errorDef.status!="number")throw new Error(`raise task '${taskName}' requires 'error.status' (number)`);return{error:{type:errorDef.type,status:errorDef.status,title:typeof errorDef.title=="string"?errorDef.title:void 0,detail:typeof errorDef.detail=="string"?errorDef.detail:void 0,instance:typeof errorDef.instance=="string"?errorDef.instance:void 0}}}function parseAgentCallConfig(raw){if(!raw||typeof raw!="object")throw new Error("call:agent task requires a 'with' configuration block");let obj=raw;if(typeof obj.agent!="string"||!obj.agent)throw new Error("call:agent requires 'agent' (slug or org/slug) in 'with'");if(typeof obj.message!="string"||!obj.message)throw new Error("call:agent requires 'message' in 'with'");let harness=typeof obj.harness=="string"?HARNESS_SHORTHANDS[obj.harness.toLowerCase()]??obj.harness:void 0;return{agent:obj.agent,message:obj.message,org:typeof obj.org=="string"?obj.org:void 0,env:obj.env,config:obj.config,output:obj.output,harness}}function parseHumanInputConfig(taskName,raw){if(!raw||typeof raw!="object")throw new Error(`human_input task '${taskName}' requires a 'with' configuration block`);let obj=raw;if(typeof obj.prompt!="string"||!obj.prompt)throw new Error(`human_input task '${taskName}' requires 'prompt' in 'with'`);return{prompt:obj.prompt,outcomes:Array.isArray(obj.outcomes)&&obj.outcomes.length>0?obj.outcomes.map(o=>({name:o.name,label:o.label,then:o.then})):void 0,formSchema:obj.form_schema&&typeof obj.form_schema=="object"?obj.form_schema:void 0,approvers:Array.isArray(obj.approvers)?obj.approvers.filter(a=>typeof a=="string"):void 0,timeout:typeof obj.timeout=="number"?obj.timeout:void 0,onTimeout:obj.on_timeout??void 0}}var import_semver2,SUPPORTED_DSL_RANGE,HARNESS_SHORTHANDS,init_loader=__esm({"dist/workflow-engine/loader.js"(){"use strict";init_js_yaml();import_semver2=__toESM(require_semver2(),1),SUPPORTED_DSL_RANGE=">=1.0.0 <2.0.0";HARNESS_SHORTHANDS={native:"HARNESS_NATIVE",cursor:"HARNESS_CURSOR"}}});var hydrate_workflow_execution_exports={};__export(hydrate_workflow_execution_exports,{createHydrateWorkflowActivities:()=>createHydrateWorkflowActivities,hydrateWorkflowExecution:()=>hydrateWorkflowExecution});function createHydrateWorkflowActivities(config4){let client2=new StigmerClient({endpoint:config4.stigmerBackendEndpoint,token:config4.stigmerToken,tokenRef:config4.stigmerTokenRef});return{HydrateWorkflowExecution:input=>hydrateWorkflowExecution(input,client2)}}async function hydrateWorkflowExecution(input,client2){let{execution_id,workflow_instance_id,workflow_id,org_id}=input,workflowExecution=await fetchWorkflowExecution(client2,execution_id),triggerMessage=workflowExecution.spec?.triggerMessage??"",versionHash=workflowExecution.status?.workflowVersionHash,resolvedWorkflowId=await resolveWorkflowId(client2,workflow_id,workflow_instance_id),yaml2=await fetchWorkflowYaml(client2,resolvedWorkflowId,versionHash),model=parseWorkflowYaml(yaml2,resolvedWorkflowId),env=await fetchAndFlattenEnv(client2,execution_id),workflow_input=parseTriggerMessage(triggerMessage);return{model,workflow_input,env,metadata:{execution_id,workflow_id:resolvedWorkflowId,workflow_instance_id,org_id}}}async function fetchWorkflowExecution(client2,executionId){try{return await client2.getWorkflowExecution(executionId)}catch(err){let code=err?.code;throw code===5||code==="not_found"||code==="NOT_FOUND"?import_activity14.ApplicationFailure.nonRetryable(`WorkflowExecution '${executionId}' not found`,"WORKFLOW_EXECUTION_NOT_FOUND"):err}}async function resolveWorkflowId(client2,workflowId,workflowInstanceId){if(workflowId)return workflowId;if(!workflowInstanceId)throw import_activity14.ApplicationFailure.nonRetryable("Neither workflow_id nor workflow_instance_id provided \u2014 cannot resolve workflow","MISSING_WORKFLOW_REFERENCE");try{let resolved=(await client2.getWorkflowInstance(workflowInstanceId)).spec?.workflowId;if(!resolved)throw import_activity14.ApplicationFailure.nonRetryable(`WorkflowInstance '${workflowInstanceId}' has no workflow_id in spec`,"INVALID_WORKFLOW_INSTANCE");return resolved}catch(err){if(err instanceof import_activity14.ApplicationFailure)throw err;let code=err?.code;throw code===5||code==="not_found"||code==="NOT_FOUND"?import_activity14.ApplicationFailure.nonRetryable(`WorkflowInstance '${workflowInstanceId}' not found`,"WORKFLOW_INSTANCE_NOT_FOUND"):err}}async function fetchWorkflowYaml(client2,workflowId,versionHash){if(versionHash)try{let versionEntry=await client2.getWorkflowVersion(workflowId,versionHash);if(versionEntry?.validatedYaml)return console.log(`[hydrate] Resolved workflow YAML from pinned version: hash=${versionHash.slice(0,12)}...`),versionEntry.validatedYaml}catch(err){console.warn(`[hydrate] Failed to fetch workflow version ${versionHash.slice(0,12)}... \u2014 falling back to live workflow fetch`,err)}return fetchAndValidateWorkflowYamlLive(client2,workflowId)}async function fetchAndValidateWorkflowYamlLive(client2,workflowId){let workflow;try{workflow=await client2.getWorkflow(workflowId)}catch(err){let code=err?.code;throw code===5||code==="not_found"||code==="NOT_FOUND"?import_activity14.ApplicationFailure.nonRetryable(`Workflow '${workflowId}' not found`,"WORKFLOW_NOT_FOUND"):err}let validation=workflow.status?.serverlessWorkflowValidation;if(!validation)throw import_activity14.ApplicationFailure.nonRetryable(`Workflow '${workflowId}' has no serverless_workflow_validation in status \u2014 the workflow may not have been validated yet`,"MISSING_VALIDATION");switch(validation.state){case ValidationState2.VALID:break;case ValidationState2.PENDING:throw import_activity14.ApplicationFailure.retryable(`Workflow '${workflowId}' validation is still in progress \u2014 retrying`,"VALIDATION_PENDING");case ValidationState2.INVALID:throw import_activity14.ApplicationFailure.nonRetryable(`Workflow '${workflowId}' validation failed: ${validation.errors.join("; ")}`,"VALIDATION_INVALID");case ValidationState2.FAILED:throw import_activity14.ApplicationFailure.nonRetryable(`Workflow '${workflowId}' validation encountered a system error \u2014 retry validation or contact support`,"VALIDATION_FAILED");default:throw import_activity14.ApplicationFailure.nonRetryable(`Workflow '${workflowId}' has unexpected validation state: ${validation.state}`,"VALIDATION_UNKNOWN_STATE")}let yaml2=validation.yaml;if(!yaml2)throw import_activity14.ApplicationFailure.nonRetryable(`Workflow '${workflowId}' has VALID validation state but empty YAML \u2014 the workflow status may not be fully populated (known OSS gap: PopulateServerlessValidation step is not implemented in the Go server)`,"YAML_EMPTY");return yaml2}function parseWorkflowYaml(yaml2,workflowId){try{return loadWorkflowFromYaml(yaml2)}catch(err){let message=err instanceof Error?err.message:String(err);throw import_activity14.ApplicationFailure.nonRetryable(`Failed to parse CNCF Serverless Workflow YAML for workflow '${workflowId}': ${message}`,"YAML_PARSE_ERROR")}}async function fetchAndFlattenEnv(client2,executionId){let execCtx;try{execCtx=await client2.getExecutionContextByExecutionId(executionId)}catch(err){let code=err?.code;if(code===5||code==="not_found"||code==="NOT_FOUND")return console.log(`[hydrate] No ExecutionContext found for execution ${executionId} \u2014 proceeding with empty environment`),{};throw err}let env={},data=execCtx.spec?.data;if(data)for(let[key,execValue]of Object.entries(data))env[key]=execValue.value;return console.log(`[hydrate] Resolved environment: env_count=${Object.keys(env).length}`),env}function parseTriggerMessage(triggerMessage){if(!triggerMessage)return null;try{return JSON.parse(triggerMessage)}catch{return null}}var import_activity14,init_hydrate_workflow_execution=__esm({"dist/activities/hydrate-workflow-execution.js"(){"use strict";import_activity14=__toESM(require_lib4(),1);init_stigmer_client();init_loader();init_validation_pb()}});var workflow_event_activities_exports={};__export(workflow_event_activities_exports,{createWorkflowEventActivities:()=>createWorkflowEventActivities,emitWorkflowEvents:()=>emitWorkflowEvents,initSequenceFromEventLog:()=>initSequenceFromEventLog,loadRecoveryContext:()=>loadRecoveryContext,toProtoEvent:()=>toProtoEvent});function toJsonObject(value){if(value!=null&&!(typeof value!="object"||Array.isArray(value)))try{return JSON.parse(JSON.stringify(value))}catch{return}}function buildClient2(){let config4=loadConfig();return new StigmerClient({endpoint:config4.stigmerBackendEndpoint,token:config4.stigmerToken})}function nextSequence(){return sequenceCounter+=1,BigInt(sequenceCounter)}async function initSequenceFromEventLog(executionId){if(!executionId){sequenceCounter=0;return}let highWaterMark=await buildClient2().getEventLogHighWaterMark(executionId);sequenceCounter=Number(highWaterMark)}function toProtoEvent(desc){let base=create(WorkflowExecutionEventSchema,{eventId:crypto.randomUUID(),sequenceNumber:nextSequence(),occurredAt:desc.occurredAt,taskName:desc.taskName??""});switch(desc.type){case"execution_started":base.eventType=WorkflowEventType.execution_started,base.payload={case:"executionStarted",value:create(ExecutionStartedPayloadSchema,{totalTasks:desc.totalTasks,workflowId:desc.workflowId,workflowInstanceId:desc.workflowInstanceId})};break;case"execution_completed":base.eventType=WorkflowEventType.execution_completed,base.payload={case:"executionCompleted",value:create(ExecutionCompletedPayloadSchema,{durationMs:BigInt(desc.durationMs),totalCostMicros:BigInt(desc.totalCostMicros),totalTokens:BigInt(desc.totalTokens)})};break;case"execution_failed":base.eventType=WorkflowEventType.execution_failed,base.payload={case:"executionFailed",value:create(ExecutionFailedPayloadSchema,{error:desc.error,failedTaskName:desc.failedTaskName,durationMs:BigInt(desc.durationMs)})};break;case"task_started":base.eventType=WorkflowEventType.task_started,base.payload={case:"taskStarted",value:create(TaskStartedPayloadSchema,{taskKind:TASK_KIND_MAP[desc.taskKind]??0,attemptNumber:desc.attemptNumber})};break;case"task_completed":base.eventType=WorkflowEventType.task_completed,base.payload={case:"taskCompleted",value:create(TaskCompletedPayloadSchema,{taskKind:TASK_KIND_MAP[desc.taskKind]??0,durationMs:BigInt(desc.durationMs),costMicros:BigInt(desc.costMicros),tokensUsed:BigInt(desc.tokensUsed)})};break;case"task_failed":base.eventType=WorkflowEventType.task_failed,base.payload={case:"taskFailed",value:create(TaskFailedPayloadSchema,{taskKind:TASK_KIND_MAP[desc.taskKind]??0,error:desc.error,attemptNumber:desc.attemptNumber,willRetry:desc.willRetry,durationMs:BigInt(desc.durationMs)})};break;case"task_skipped":base.eventType=WorkflowEventType.task_skipped,base.payload={case:"taskSkipped",value:create(TaskSkippedPayloadSchema,{taskKind:TASK_KIND_MAP[desc.taskKind]??0,reason:desc.reason})};break;case"task_retrying":base.eventType=WorkflowEventType.task_retrying,base.payload={case:"taskRetrying",value:create(TaskRetryingPayloadSchema,{failedAttempt:desc.failedAttempt,nextAttempt:desc.nextAttempt,delayMs:BigInt(desc.delayMs)})};break;case"approval_requested":base.eventType=WorkflowEventType.approval_requested,base.payload={case:"approvalRequested",value:create(ApprovalRequestedPayloadSchema,{prompt:desc.prompt,approvers:[...desc.approvers],timeoutSeconds:desc.timeoutSeconds,outcomes:desc.outcomes.map(o=>create(HumanInputOutcomeInfoSchema,{name:o.name,label:o.label})),formSchema:desc.formSchema?desc.formSchema:void 0})};break;case"approval_resolved":base.eventType=WorkflowEventType.approval_resolved,base.payload={case:"approvalResolved",value:create(ApprovalResolvedPayloadSchema,{resolvedBy:desc.resolvedBy,comment:desc.comment,waitDurationMs:BigInt(desc.waitDurationMs)})};break;case"agent_call_started":base.eventType=WorkflowEventType.agent_call_started,base.payload={case:"agentCallStarted",value:create(AgentCallStartedPayloadSchema,{childExecutionId:desc.childExecutionId,agentSlug:desc.agentSlug,messageSummary:desc.messageSummary})};break;case"agent_call_progress":base.eventType=WorkflowEventType.agent_call_progress,base.payload={case:"agentCallProgress",value:create(AgentCallProgressPayloadSchema,{childExecutionId:desc.childExecutionId,agentPhase:desc.agentPhase,currentToolName:desc.currentToolName,tokensConsumed:BigInt(desc.tokensConsumed),messagesCount:desc.messagesCount,toolCallsCount:desc.toolCallsCount})};break;case"agent_call_completed":base.eventType=WorkflowEventType.agent_call_completed,base.payload={case:"agentCallCompleted",value:create(AgentCallCompletedPayloadSchema,{childExecutionId:desc.childExecutionId,durationMs:BigInt(desc.durationMs),tokensConsumed:BigInt(desc.tokensConsumed),costMicros:BigInt(desc.costMicros),error:desc.error})};break;case"artifact_created":base.eventType=WorkflowEventType.artifact_created,base.payload={case:"artifactCreated",value:create(ArtifactCreatedPayloadSchema,{artifactId:desc.artifactId,displayName:desc.displayName,contentType:desc.contentType,sizeBytes:BigInt(desc.sizeBytes)})};break}return base}async function emitWorkflowEvents(executionId,events,taskStatuses){if(!(!executionId||events.length===0))try{let client2=buildClient2(),protoEvents=events.map(toProtoEvent),protoTasks=(taskStatuses??[]).map(ts=>create(WorkflowTaskSchema,{taskId:ts.taskId??"",taskName:ts.taskName,taskType:TASK_KIND_TO_TYPE_MAP[ts.taskKind]??WorkflowTaskType.WORKFLOW_TASK_TYPE_UNSPECIFIED,status:TASK_STATUS_MAP[ts.status],startedAt:ts.startedAt??"",completedAt:ts.completedAt??"",error:ts.error??"",input:toJsonObject(ts.input),output:toJsonObject(ts.output),metadata:toJsonObject(ts.metadata),costMicros:BigInt(ts.costMicros??0),inputTokens:BigInt(ts.inputTokens??0),outputTokens:BigInt(ts.outputTokens??0)})),startedEvent=events.find(e=>e.type==="execution_started"),completedEvent=events.find(e=>e.type==="execution_completed"),failedEvent=events.find(e=>e.type==="execution_failed"),statusFields={tasks:protoTasks};startedEvent&&(statusFields.phase=ExecutionPhase2.EXECUTION_IN_PROGRESS,statusFields.startedAt=startedEvent.occurredAt),completedEvent&&completedEvent.type==="execution_completed"&&(statusFields.phase=ExecutionPhase2.EXECUTION_COMPLETED,statusFields.completedAt=completedEvent.occurredAt,statusFields.totalCostMicros=BigInt(completedEvent.totalCostMicros),statusFields.totalInputTokens=BigInt(completedEvent.totalInputTokens??0),statusFields.totalOutputTokens=BigInt(completedEvent.totalOutputTokens??0)),failedEvent&&failedEvent.type==="execution_failed"&&(statusFields.phase=ExecutionPhase2.EXECUTION_FAILED,statusFields.completedAt=failedEvent.occurredAt,statusFields.error=failedEvent.error);let input=create(WorkflowExecutionUpdateStatusInputSchema,{executionId,status:create(WorkflowExecutionStatusSchema,statusFields),events:protoEvents});await client2.workflowExecutionCommand.updateStatus(input)}catch(err){console.error(`Failed to emit ${events.length} workflow event(s) for ${executionId}:`,err)}}function structToPlain(value){if(value!==void 0)try{return JSON.parse(JSON.stringify(value))}catch{return}}async function loadRecoveryContext(executionId){return((await buildClient2().getWorkflowExecution(executionId)).status?.tasks??[]).map(t=>({taskName:t.taskName,status:PROTO_STATUS_TO_STRING[t.status]??"unknown",output:structToPlain(t.output)}))}function createWorkflowEventActivities(){return{EmitWorkflowEvents:emitWorkflowEvents,ResetEventSequence:initSequenceFromEventLog,LoadRecoveryContext:loadRecoveryContext}}var TASK_STATUS_MAP,TASK_KIND_MAP,TASK_KIND_TO_TYPE_MAP,sequenceCounter,PROTO_STATUS_TO_STRING,init_workflow_event_activities=__esm({"dist/activities/workflow-event-activities.js"(){"use strict";init_stigmer_client();init_config();init_esm4();init_event_pb();init_api_pb11();init_io_pb11();init_enum_pb7();init_enum_pb8();TASK_STATUS_MAP={started:WorkflowTaskStatus.WORKFLOW_TASK_IN_PROGRESS,completed:WorkflowTaskStatus.WORKFLOW_TASK_COMPLETED,failed:WorkflowTaskStatus.WORKFLOW_TASK_FAILED,skipped:WorkflowTaskStatus.WORKFLOW_TASK_SKIPPED,waiting_approval:WorkflowTaskStatus.WORKFLOW_TASK_WAITING_APPROVAL},TASK_KIND_MAP={set:WorkflowTaskKind.set_vars,"call:http":WorkflowTaskKind.http_call,"call:grpc":WorkflowTaskKind.grpc_call,"call:function":WorkflowTaskKind.activity_call,"call:function:llm":WorkflowTaskKind.llm_call,"call:function:transform":WorkflowTaskKind.transform,"call:function:validate":WorkflowTaskKind.validate,"call:function:emit_event":WorkflowTaskKind.emit_event,"call:function:notification":WorkflowTaskKind.notification,"call:function:eval":WorkflowTaskKind.eval,switch:WorkflowTaskKind.switch_case,for:WorkflowTaskKind.for_each,fork:WorkflowTaskKind.fork,try:WorkflowTaskKind.try_catch,listen:WorkflowTaskKind.listen,wait:WorkflowTaskKind.wait,raise:WorkflowTaskKind.raise_error,run:WorkflowTaskKind.run_workflow,"call:function:cursor":WorkflowTaskKind.agent_call,"call:agent":WorkflowTaskKind.agent_call,human_input:WorkflowTaskKind.human_input},TASK_KIND_TO_TYPE_MAP={"call:agent":WorkflowTaskType.WORKFLOW_TASK_AGENT_INVOCATION,"call:function:llm":WorkflowTaskType.WORKFLOW_TASK_API_CALL,"call:function:eval":WorkflowTaskType.WORKFLOW_TASK_API_CALL,"call:function:cursor":WorkflowTaskType.WORKFLOW_TASK_AGENT_INVOCATION,"call:http":WorkflowTaskType.WORKFLOW_TASK_API_CALL,"call:grpc":WorkflowTaskType.WORKFLOW_TASK_API_CALL,"call:function":WorkflowTaskType.WORKFLOW_TASK_API_CALL,human_input:WorkflowTaskType.WORKFLOW_TASK_APPROVAL,switch:WorkflowTaskType.WORKFLOW_TASK_CONDITIONAL,fork:WorkflowTaskType.WORKFLOW_TASK_PARALLEL,for:WorkflowTaskType.WORKFLOW_TASK_PARALLEL,set:WorkflowTaskType.WORKFLOW_TASK_TRANSFORM,"call:function:transform":WorkflowTaskType.WORKFLOW_TASK_TRANSFORM,"call:function:validate":WorkflowTaskType.WORKFLOW_TASK_TRANSFORM,try:WorkflowTaskType.WORKFLOW_TASK_CUSTOM,listen:WorkflowTaskType.WORKFLOW_TASK_CUSTOM,do:WorkflowTaskType.WORKFLOW_TASK_CUSTOM,wait:WorkflowTaskType.WORKFLOW_TASK_CUSTOM,raise:WorkflowTaskType.WORKFLOW_TASK_CUSTOM,run:WorkflowTaskType.WORKFLOW_TASK_CUSTOM};sequenceCounter=0;PROTO_STATUS_TO_STRING={[WorkflowTaskStatus.WORKFLOW_TASK_IN_PROGRESS]:"started",[WorkflowTaskStatus.WORKFLOW_TASK_COMPLETED]:"completed",[WorkflowTaskStatus.WORKFLOW_TASK_FAILED]:"failed",[WorkflowTaskStatus.WORKFLOW_TASK_SKIPPED]:"skipped",[WorkflowTaskStatus.WORKFLOW_TASK_WAITING_APPROVAL]:"waiting_approval"}}});var promote_task_output_exports={};__export(promote_task_output_exports,{createPromoteTaskOutputActivities:()=>createPromoteTaskOutputActivities});function getClient(){if(!cachedClient){let config4=loadConfig();cachedClient=new StigmerClient({endpoint:config4.stigmerBackendEndpoint,token:config4.stigmerToken})}return cachedClient}function createPromoteTaskOutputActivities(){return{async PromoteTaskOutput(taskOutput,workflowExecutionId,taskName){if(taskOutput==null)return{output:taskOutput,artifactIds:[],artifactCreatedEvents:[]};let serialized;try{serialized=JSON.stringify(taskOutput)}catch{return{output:taskOutput,artifactIds:[],artifactCreatedEvents:[]}}let byteLength=Buffer.byteLength(serialized,"utf-8");if(byteLength<PROMOTION_THRESHOLD_BYTES)return{output:taskOutput,artifactIds:[],artifactCreatedEvents:[]};let displayName=`${taskName} \u2014 output.json`,contentType="application/json",contentBytes=Buffer.from(serialized,"utf-8"),input=create(CreateArtifactInputSchema,{spec:create(ArtifactSpecSchema,{contentType,displayName,source:create(ArtifactSourceSchema,{workflowExecutionId,taskName})}),content:new Uint8Array(contentBytes)}),artifactId=(await getClient().createArtifact(input)).metadata?.id??"";return{output:{_artifact_ref:artifactId,display_name:displayName,content_type:contentType,size_bytes:byteLength},artifactIds:[artifactId],artifactCreatedEvents:[{type:"artifact_created",artifactId,displayName,contentType,sizeBytes:byteLength,occurredAt:new Date().toISOString()}]}}}}var PROMOTION_THRESHOLD_BYTES,cachedClient,init_promote_task_output=__esm({"dist/activities/promote-task-output.js"(){"use strict";init_stigmer_client();init_config();init_esm4();init_io_pb8();init_spec_pb9();PROMOTION_THRESHOLD_BYTES=256*1024,cachedClient=null}});function compress(data){return(0,import_node_zlib3.gzipSync)(data)}function decompress(data){return(0,import_node_zlib3.gunzipSync)(data)}var import_node_zlib3,init_compressor=__esm({"dist/claimcheck/compressor.js"(){"use strict";import_node_zlib3=require("node:zlib")}});var import_node_crypto21,MARKER_METADATA_KEY,MARKER_ENCODING_VALUE,ClaimcheckPayloadCodec,init_payload_codec=__esm({"dist/claimcheck/payload-codec.js"(){"use strict";import_node_crypto21=require("node:crypto");init_compressor();MARKER_METADATA_KEY="encoding",MARKER_ENCODING_VALUE="binary/claimcheck",ClaimcheckPayloadCodec=class{storage;config;constructor(storage,config4){this.storage=storage,this.config=config4}async encode(payloads){return Promise.all(payloads.map(p=>this.encodePayload(p)))}async decode(payloads){return Promise.all(payloads.map(p=>this.decodePayload(p)))}async encodePayload(payload){let data=payload.data;if(!data||data.length<this.config.thresholdBytes)return payload;let originalBuf=Buffer.from(data),uploadBuf=originalBuf,compressed=!1;if(this.config.compressionEnabled){let compressedBuf=compress(originalBuf);compressedBuf.length<originalBuf.length&&(uploadBuf=compressedBuf,compressed=!0)}let key=`${this.config.keyPrefix}${(0,import_node_crypto21.randomUUID)()}`;await this.storage.upload(key,uploadBuf,"application/octet-stream");let marker={key,size:data.length,compressed};return{metadata:{[MARKER_METADATA_KEY]:Buffer.from(MARKER_ENCODING_VALUE)},data:Buffer.from(JSON.stringify(marker))}}async decodePayload(payload){if(!this.isClaimcheckPayload(payload))return payload;let marker=JSON.parse(Buffer.from(payload.data).toString("utf-8")),rawBuf;try{rawBuf=await this.storage.download(marker.key)}catch(err){let cause=err instanceof Error?err.message:String(err);throw new Error(`Claimcheck retrieve failed for key ${marker.key}: ${cause}`)}let dataBuf=marker.compressed?decompress(rawBuf):rawBuf;return{metadata:payload.metadata,data:dataBuf}}isClaimcheckPayload(payload){let encoding=payload.metadata?.[MARKER_METADATA_KEY];return encoding?Buffer.from(encoding).toString("utf-8")===MARKER_ENCODING_VALUE:!1}}}});function loadClaimcheckConfig(){return{enabled:process.env.CLAIMCHECK_ENABLED==="true",thresholdBytes:parseInt(process.env.CLAIMCHECK_THRESHOLD_BYTES??String(131072),10),compressionEnabled:process.env.CLAIMCHECK_COMPRESSION_ENABLED!=="false",keyPrefix:process.env.CLAIMCHECK_KEY_PREFIX??"claimcheck/"}}var init_config4=__esm({"dist/claimcheck/config.js"(){"use strict"}});var claimcheck_exports={};__export(claimcheck_exports,{ClaimcheckPayloadCodec:()=>ClaimcheckPayloadCodec,compress:()=>compress,decompress:()=>decompress,loadClaimcheckConfig:()=>loadClaimcheckConfig});var init_claimcheck=__esm({"dist/claimcheck/index.js"(){"use strict";init_payload_codec();init_config4();init_compressor()}});function getShutdownSignalForQueue(taskQueue){return _shutdownSignalRegistry.get(taskQueue)}async function createStigmerRunnerManager(options){validateManagerOptions(options);let tokenRef={current:options.stigmerToken??null},baseConfig=mapManagerOptionsToConfig(options,tokenRef),{installFetchInterceptor:installFetchInterceptor2,updateInterceptorToken:updateInterceptorToken2,getExecutionContext:getExecutionContext2}=await Promise.resolve().then(()=>(init_fetch_interceptor(),fetch_interceptor_exports));installFetchInterceptor2({proxyEndpoint:baseConfig.proxyEndpoint??void 0,stigmerToken:baseConfig.stigmerToken??void 0});let{installHttp2Interceptor:installHttp2Interceptor2,updateHttp2InterceptorToken:updateHttp2InterceptorToken2,assertHttp2ConnectPatched:assertHttp2ConnectPatched2}=await Promise.resolve().then(()=>(init_http2_interceptor(),http2_interceptor_exports));installHttp2Interceptor2({proxyEndpoint:baseConfig.proxyEndpoint??void 0,stigmerToken:baseConfig.stigmerToken??void 0}),await assertHttp2ConnectPatched2();let tokenCoordinator=createRunnerTokenCoordinator({applyProxyToken:token=>{updateInterceptorToken2(token),updateHttp2InterceptorToken2(token)},reMint:()=>refreshRunnerAccessToken({token:tokenRef.current,stigmerEndpoint:baseConfig.stigmerBackendEndpoint})}),bootstrap=await resolveRunnerBootstrap({explicitAddress:options.temporalAddress,explicitNamespace:options.temporalNamespace,token:options.stigmerToken,stigmerEndpoint:baseConfig.stigmerBackendEndpoint}),config4={...baseConfig,temporalAddress:bootstrap.temporalAddress,temporalNamespace:bootstrap.temporalNamespace};bootstrap.runnerAccessToken?(tokenCoordinator.adoptMintedToken(bootstrap.runnerAccessToken,bootstrap.runnerAccessTokenExpiresInSeconds),console.log("[runner-manager] Adopted minted proxy token from bootstrap")):baseConfig.proxyEndpoint&&tokenRef.current&&console.warn("[runner-manager] Proxy endpoint configured but no runner token was minted; falling back to the control-plane token for x-stigmer-auth");let{setExecutionContextRef:setExecutionContextRef2}=await Promise.resolve().then(()=>(init_rejection_capture(),rejection_capture_exports));setExecutionContextRef2(getExecutionContext2());let activities=await createAllActivities(config4),payloadCodec=await createPayloadCodec(config4),connection=await import_worker2.NativeConnection.connect({address:config4.temporalAddress}),interceptorConfig2=await buildInterceptorConfig(),workflowSource=resolveWorkflowSource(),workflowBundle;workflowSource.kind==="prebuilt"?(console.log(`[runner-manager] Using pre-built workflow bundle: ${workflowSource.codePath}`),workflowBundle={codePath:workflowSource.codePath}):(console.log("[runner-manager] Pre-bundling workflow code..."),workflowBundle=await(0,import_worker2.bundleWorkflowCode)({workflowsPath:workflowSource.workflowsPath,workflowInterceptorModules:interceptorConfig2.workflowInterceptorModules}),console.log("[runner-manager] Workflow code bundled successfully"));let sessions=new Map,workflowExecutions=new Map,shutdownSignals=new Map,shuttingDown=!1;async function createWorkerOnQueue(taskQueue){let shutdownController=new AbortController;shutdownSignals.set(taskQueue,shutdownController),_shutdownSignalRegistry.set(taskQueue,shutdownController.signal);let worker=await import_worker2.Worker.create({connection,namespace:config4.temporalNamespace,taskQueue,activities,workflowBundle,maxConcurrentActivityTaskExecutions:config4.maxConcurrentActivities,dataConverter:payloadCodec?{payloadCodecs:[payloadCodec]}:void 0,sinks:interceptorConfig2.sinks,interceptors:interceptorConfig2.interceptors}),runPromise=worker.run().catch(err=>{console.error(`[runner-manager] Worker for queue ${taskQueue} exited with error:`,err)});return{worker,runPromise,shutdownController,pendingClose:!1}}function reuseExistingWorker(registry5,id,taskQueue,kind){let existing=registry5.get(id);return existing?(existing.pendingClose&&(existing.pendingClose=!1,setQueueDrainCallback(taskQueue,void 0),console.log(`[runner-manager] Re-opened ${kind} ${id}; cancelled deferred teardown`)),!0):!1}async function teardownManaged(registry5,id,taskQueue,kind){let managed=registry5.get(id);managed&&(managed.worker.shutdown(),await managed.runPromise,registry5.delete(id),shutdownSignals.delete(taskQueue),_shutdownSignalRegistry.delete(taskQueue),forgetQueue(taskQueue),console.log(`[runner-manager] Removed ${kind} ${id} (active=${registry5.size})`))}async function removeManaged(registry5,id,taskQueue,kind){let managed=registry5.get(id);if(managed){if(inFlightCountForQueue(taskQueue)>0){managed.pendingClose=!0,setQueueDrainCallback(taskQueue,()=>{shuttingDown||teardownManaged(registry5,id,taskQueue,kind)}),console.log(`[runner-manager] Deferring teardown of ${kind} ${id} \u2014 ${inFlightCountForQueue(taskQueue)} activity(ies) still in flight (runs in background)`);return}await teardownManaged(registry5,id,taskQueue,kind)}}return{async addSession(sessionId){if(shuttingDown)throw new Error("RunnerManager is shutting down");let taskQueue=SESSION_QUEUE_PREFIX+sessionId;if(reuseExistingWorker(sessions,sessionId,taskQueue,"session"))return;let managed=await createWorkerOnQueue(taskQueue);sessions.set(sessionId,managed),console.log(`[runner-manager] Added session ${sessionId} (queue=${taskQueue}, active=${sessions.size})`)},async removeSession(sessionId){await removeManaged(sessions,sessionId,SESSION_QUEUE_PREFIX+sessionId,"session")},activeSessions(){return Array.from(sessions.keys())},async addWorkflowExecution(executionId){if(shuttingDown)throw new Error("RunnerManager is shutting down");let taskQueue=WFEXEC_QUEUE_PREFIX+executionId;if(reuseExistingWorker(workflowExecutions,executionId,taskQueue,"workflow execution"))return;let managed=await createWorkerOnQueue(taskQueue);workflowExecutions.set(executionId,managed),console.log(`[runner-manager] Added workflow execution ${executionId} (queue=${taskQueue}, active=${workflowExecutions.size})`)},async removeWorkflowExecution(executionId){await removeManaged(workflowExecutions,executionId,WFEXEC_QUEUE_PREFIX+executionId,"workflow execution")},activeWorkflowExecutions(){return Array.from(workflowExecutions.keys())},updateToken(token){tokenRef.current=token,token?process.env.STIGMER_TOKEN=token:delete process.env.STIGMER_TOKEN,tokenCoordinator.onControlPlaneTokenChanged(token),console.log("[runner-manager] Auth token updated")},async shutdown(){shuttingDown=!0,tokenCoordinator.stop();let totalWorkers=sessions.size+workflowExecutions.size;console.log(`[runner-manager] Shutting down ${totalWorkers} workers (${sessions.size} sessions, ${workflowExecutions.size} workflow executions)...`);let shutdownPromises=[...Array.from(sessions.entries()).map(async([id,session])=>{session.worker.shutdown(),await session.runPromise,console.log(`[runner-manager] Session worker ${id} stopped`)}),...Array.from(workflowExecutions.entries()).map(async([id,execution])=>{execution.worker.shutdown(),await execution.runPromise,console.log(`[runner-manager] Workflow execution worker ${id} stopped`)})];await Promise.all(shutdownPromises),sessions.clear(),workflowExecutions.clear(),connection.close(),console.log("[runner-manager] All workers stopped, connection closed")}}}function validateManagerOptions(options){if(!options.stigmerEndpoint)throw new Error("RunnerManagerOptions.stigmerEndpoint is required \u2014 specify the Stigmer server endpoint")}function mapManagerOptionsToConfig(options,tokenRef){let proxyActive=!!options.proxyEndpoint,mode=options.executionMode??"local";return{taskQueue:"manager",temporalAddress:options.temporalAddress??"",temporalNamespace:options.temporalNamespace??"default",stigmerBackendEndpoint:normalizeEndpoint2(options.stigmerEndpoint),stigmerToken:options.stigmerToken??null,stigmerTokenRef:tokenRef,cursorApiKey:proxyActive?options.cursorApiKey??"proxy-managed":options.cursorApiKey??"",workspaceRootDir:options.workspaceRootDir??resolveDefaultWorkspaceDir(),mode,proxyEndpoint:options.proxyEndpoint??null,maxConcurrentActivities:options.maxConcurrentActivitiesPerSession??5,idleTimeoutSeconds:null,cloudModeEnabled:options.cloudModeEnabled??!1,checkpointerType:options.checkpointerType??(proxyActive?"http":"memory"),checkpointerProxyEndpoint:options.checkpointerProxyEndpoint??options.proxyEndpoint??null,primaryModel:options.primaryModel??"gpt-4.1",cursorStreamStallTimeoutMs:options.cursorStreamStallTimeoutMs??DEFAULT_CURSOR_STREAM_STALL_TIMEOUT_MS,workspaceLockTimeoutMs:options.workspaceLockTimeoutMs??DEFAULT_WORKSPACE_LOCK_TIMEOUT_MS}}async function createAllActivities(config4){let[{createCursorActivities:createCursorActivities2},{createDeepAgentActivities:createDeepAgentActivities2},{createEnsureThreadActivities:createEnsureThreadActivities2},{createClassifyToolApprovalsActivities:createClassifyToolApprovalsActivities2},{createDiscoverMcpServerActivities:createDiscoverMcpServerActivities2},{createEvaluateExpressionsActivities:createEvaluateExpressionsActivities2},{createCallHttpActivities:createCallHttpActivities2},{createCallGrpcActivities:createCallGrpcActivities2},{createCallFunctionActivities:createCallFunctionActivities2},{createCallLlmActivities:createCallLlmActivities2},{createCallAgentActivities:createCallAgentActivities2},{createCallAgentStatusActivities:createCallAgentStatusActivities2},{createRunCommandActivities:createRunCommandActivities2},{createHydrateWorkflowActivities:createHydrateWorkflowActivities2},{createWorkflowEventActivities:createWorkflowEventActivities2},{createPromoteTaskOutputActivities:createPromoteTaskOutputActivities2}]=await Promise.all([Promise.resolve().then(()=>(init_execute_cursor(),execute_cursor_exports)),Promise.resolve().then(()=>(init_execute_deep_agent(),execute_deep_agent_exports)),Promise.resolve().then(()=>(init_ensure_thread(),ensure_thread_exports)),Promise.resolve().then(()=>(init_classify_tool_approvals(),classify_tool_approvals_exports)),Promise.resolve().then(()=>(init_discover_mcp_server(),discover_mcp_server_exports)),Promise.resolve().then(()=>(init_evaluate_expressions(),evaluate_expressions_exports)),Promise.resolve().then(()=>(init_call_http(),call_http_exports)),Promise.resolve().then(()=>(init_call_grpc(),call_grpc_exports)),Promise.resolve().then(()=>(init_call_function(),call_function_exports)),Promise.resolve().then(()=>(init_call_llm(),call_llm_exports)),Promise.resolve().then(()=>(init_call_agent(),call_agent_exports)),Promise.resolve().then(()=>(init_call_agent_status(),call_agent_status_exports)),Promise.resolve().then(()=>(init_run_command(),run_command_exports)),Promise.resolve().then(()=>(init_hydrate_workflow_execution(),hydrate_workflow_execution_exports)),Promise.resolve().then(()=>(init_workflow_event_activities(),workflow_event_activities_exports)),Promise.resolve().then(()=>(init_promote_task_output(),promote_task_output_exports))]);return{...createCursorActivities2(config4),...createDeepAgentActivities2(config4),...createEnsureThreadActivities2(),...createClassifyToolApprovalsActivities2(config4),...createDiscoverMcpServerActivities2(config4),...createEvaluateExpressionsActivities2(),...createCallHttpActivities2(),...createCallGrpcActivities2(),...createCallFunctionActivities2(),...createCallLlmActivities2(),...createCallAgentActivities2(),...createCallAgentStatusActivities2(),...createRunCommandActivities2(),...createHydrateWorkflowActivities2(config4),...createWorkflowEventActivities2(),...createPromoteTaskOutputActivities2()}}async function createPayloadCodec(config4){let{loadClaimcheckConfig:loadClaimcheckConfig2,ClaimcheckPayloadCodec:ClaimcheckPayloadCodec2}=await Promise.resolve().then(()=>(init_claimcheck(),claimcheck_exports)),claimcheckConfig=loadClaimcheckConfig2();if(!claimcheckConfig.enabled)return;let{loadArtifactStorageConfig:loadArtifactStorageConfig2,createArtifactStorage:createArtifactStorage2}=await Promise.resolve().then(()=>(init_artifact_storage(),artifact_storage_exports)),storageConfig=loadArtifactStorageConfig2(config4),storage=createArtifactStorage2(storageConfig);return new ClaimcheckPayloadCodec2(storage,claimcheckConfig)}async function buildInterceptorConfig(){let{createWorkflowMetricsSinks:createWorkflowMetricsSinks2}=await Promise.resolve().then(()=>(init_workflow_metrics_sink(),workflow_metrics_sink_exports)),activityInterceptors=[],sinks={...createWorkflowMetricsSinks2()},workflowInterceptorModules=[];if(activityInterceptors.push(ctx=>({inbound:{async execute(input,next){let taskQueue=ctx.info.taskQueue;activityStartedOnQueue(taskQueue);try{return await next(input)}finally{activityFinishedOnQueue(taskQueue)}}}})),process.env.OTEL_EXPORTER_OTLP_ENDPOINT){let{OpenTelemetryActivityInboundInterceptor,makeWorkflowExporter}=await Promise.resolve().then(()=>__toESM(require_lib8(),1)),{OTLPTraceExporter}=await Promise.resolve().then(()=>__toESM(require_src13(),1)),{resourceFromAttributes}=await Promise.resolve().then(()=>__toESM(require_src3(),1));activityInterceptors.push(ctx=>({inbound:new OpenTelemetryActivityInboundInterceptor(ctx)}));let resource=resourceFromAttributes({"service.name":"stigmer-runner-manager"}),exporter=new OTLPTraceExporter({url:process.env.OTEL_EXPORTER_OTLP_ENDPOINT}),otelSinks=makeWorkflowExporter(exporter,resource);sinks={...sinks,...otelSinks};let esmRequire=(0,import_node_module3.createRequire)(__stigmerImportMetaUrl);workflowInterceptorModules.push(esmRequire.resolve(OTEL_WORKFLOW_INTERCEPTOR_MODULE))}return{sinks,interceptors:{...activityInterceptors.length>0?{activity:activityInterceptors}:{}},workflowInterceptorModules}}function resolveDefaultWorkspaceDir(){try{let dir=(0,import_node_path34.join)((0,import_node_os5.homedir)(),".stigmer","workspaces","runner");return(0,import_node_fs8.mkdirSync)(dir,{recursive:!0}),dir}catch{let dir=(0,import_node_path34.join)((0,import_node_os5.tmpdir)(),"stigmer-runner-workspace");return(0,import_node_fs8.mkdirSync)(dir,{recursive:!0}),dir}}function normalizeEndpoint2(endpoint){return endpoint.startsWith("http://")||endpoint.startsWith("https://")?endpoint:endpoint.endsWith(":443")?`https://${endpoint}`:`http://${endpoint}`}var import_node_fs8,import_node_path34,import_node_os5,import_node_module3,import_worker2,SESSION_QUEUE_PREFIX,WFEXEC_QUEUE_PREFIX,_shutdownSignalRegistry,init_runner_manager=__esm({"dist/runner-manager.js"(){"use strict";import_node_fs8=require("node:fs"),import_node_path34=require("node:path"),import_node_os5=require("node:os"),import_node_module3=require("node:module"),import_worker2=__toESM(require_lib6(),1);init_config();init_workflow_source();init_bootstrap();init_runner_token_coordinator();init_in_flight();SESSION_QUEUE_PREFIX="session:",WFEXEC_QUEUE_PREFIX="wfexec:",_shutdownSignalRegistry=new Map}});var execute_cursor_exports={};__export(execute_cursor_exports,{buildPrompt:()=>buildPrompt,createCursorActivities:()=>createCursorActivities});function createCursorActivities(config4){let client2=new StigmerClient({endpoint:config4.stigmerBackendEndpoint,token:config4.stigmerToken,tokenRef:config4.stigmerTokenRef});return{ExecuteCursor:async(arg0,arg1)=>{let{executionId,threadId,turnSeq}=normalizeActivityInput(arg0,arg1);activityStarted();try{return await executeCursor(config4,client2,executionId,threadId,turnSeq)}finally{activityFinished()}}}}async function executeCursor(config4,client2,executionId,threadId,turnSeq){return console.log(`ExecuteCursor started: execution=${executionId}, threadId=${threadId||"(new)"}, turnSeq=${turnSeq}`),closeProxySessions(),setInterceptorExecutionId(executionId),runWithExecutionContext(executionId,()=>executeCursorInner(config4,client2,executionId,threadId,turnSeq))}async function executeCursorInner(config4,client2,executionId,threadId,turnSeq){let status=create(AgentExecutionStatusSchema,{phase:ExecutionPhase.EXECUTION_IN_PROGRESS,startedAt:utcTimestamp()}),artifactStorage=await resolveUsableArtifactStorage(loadArtifactStorageConfig(config4),{executionId}),statusOffload=artifactStorage?{artifactStorage,executionId}:void 0,persist=(s=status)=>(withholdSecretContentFromMessages(s.messages,s.subAgentExecutions),persistStatus(client2,executionId,s,{offload:statusOffload})),sessionId,session,turnState=newTurnStreamState(),workerShutdownDetected=!1,stopDenialWatcher,periodicHeartbeat,finishTurnTelemetry,hitlDir,hitlCleanup,releaseWorkspaceLock,errorContext={model:"default",mode:"local",agentId:""};try{await reportSetupProgress(client2,executionId,"Fetching execution");let execution=await client2.getExecution(executionId),spec=execution.spec;sessionId=spec.sessionId,await reportSetupProgress(client2,executionId,"Resolving agent blueprint"),session=await client2.getSession(sessionId);let blueprint=await resolveBlueprint(client2,session,config4.workspaceRootDir);await reportSetupProgress(client2,executionId,"Resolving environment");let{envVars,secretKeys}=await resolveExecutionEnv(client2,executionId);(0,import_activity15.heartbeat)(),await reportSetupProgress(client2,executionId,"Provisioning workspace");let workspaceProvision=await provisionCursorWorkspace(config4,session,envVars,sessionId??"");blueprint.workspaceDirs=workspaceProvision.workspaceDirs,(0,import_activity15.heartbeat)();let writebackCoordinator=workspaceProvision.provisionResults.length>0?new WriteBackCoordinator({statusWriter:statusProtoWriter(status),executionId,sessionId:sessionId??"",githubToken:envVars.GITHUB_TOKEN??"",provisionResults:workspaceProvision.provisionResults,workspaceEntries:session.spec?.workspaceEntries??[],workspaceBackend:workspaceProvision.workspaceBackend}):null,primaryWorkspaceDir=blueprint.workspaceDirs[0],gitWorkspace=primaryWorkspaceDir?await isGitWorkTree(primaryWorkspaceDir):!1,captureMode=deriveCaptureMode(primaryWorkspaceDir,gitWorkspace,!!artifactStorage),baselineTree,progressState=newProgressCaptureState(),changeSetId=`${executionId}:${turnSeq}`;if((0,import_activity15.heartbeat)(),primaryWorkspaceDir)try{releaseWorkspaceLock=await acquireWorkspaceLock(primaryWorkspaceDir,{onWaiting:()=>reportSetupProgress(client2,executionId,"Waiting for workspace \u2014 in use by another session"),heartbeat:import_activity15.heartbeat,signal:import_activity15.Context.current().cancellationSignal,timeoutMs:config4.workspaceLockTimeoutMs})}catch(lockErr){if(lockErr instanceof WorkspaceLockCancelledError)throw new import_activity15.CancelledFailure("Activity cancelled while waiting for the workspace lock");if(lockErr instanceof WorkspaceLockTimeoutError)return status.phase=ExecutionPhase.EXECUTION_FAILED,status.error=lockErr.message,status.completedAt=utcTimestamp(),status.messages.push(create(AgentMessageSchema,{type:MessageType.MESSAGE_SYSTEM,content:`Execution failed: ${lockErr.message}`,timestamp:utcTimestamp()})),await persist(status),console.warn(`ExecuteCursor workspace lock timeout: execution=${executionId}`),slimStatus(status);throw lockErr}(0,import_activity15.heartbeat)();try{let{setBaggage:setBaggage3,BAGGAGE_EXECUTION_ID:BAGGAGE_EXECUTION_ID2,BAGGAGE_SESSION_ID:BAGGAGE_SESSION_ID2,BAGGAGE_ORG_ID:BAGGAGE_ORG_ID2}=await Promise.resolve().then(()=>(init_otel(),otel_exports));await setBaggage3({[BAGGAGE_EXECUTION_ID2]:executionId,[BAGGAGE_SESSION_ID2]:sessionId??"",[BAGGAGE_ORG_ID2]:session?.metadata?.org??""})}catch{}let cursorMode=determineCursorMode(blueprint.sessionSpec.workspaceEntries,config4.cloudModeEnabled),agentMode=isCloudMode(cursorMode)?"cloud":"local";(0,import_activity15.heartbeat)();let isReinvocation=!!threadId,approvalDecisions,adjudicatedApprovals=[],adjudicatedContentDigests=new Map,seededSubAgents=[];if(isReinvocation){let existingStatus=execution.status;seededSubAgents=seedCursorTranscriptFromExecution(status,execution);let reconciledFileReview=!1,fileReviewFailed=!1,fileReviewFailureDetail="",discardedPaths=[];if(captureMode&&primaryWorkspaceDir){let decidedSets=(existingStatus?.fileChangeSets??[]).filter(cs=>cs.status===FileChangeSetStatus.DECIDED);for(let changeSet of decidedSets){let capResult=await applyCaptureDecisions2({status,gitRoot:primaryWorkspaceDir,executionId,changeSet,storage:artifactStorage,gitWorkspace});capResult.isCaptureTurn&&(reconciledFileReview=!0,capResult.failed&&(fileReviewFailed=!0,fileReviewFailureDetail=capResult.failureDetail??"file review reconcile failed"),capResult.hadReject&&discardedPaths.push(...capResult.rejectedPaths))}}let adjudicated=reconstructAdjudicatedApprovals(existingStatus?.messages??[]);if(adjudicated.decisions.size>0){if(approvalDecisions=adjudicated.decisions,adjudicatedApprovals=adjudicated.pendingApprovals,adjudicatedContentDigests=adjudicated.contentDigests,[...approvalDecisions.values()].some(a=>a===ApprovalAction.REJECT))return status.phase=ExecutionPhase.EXECUTION_FAILED,status.error="Execution rejected by user",status.completedAt=utcTimestamp(),status.messages.push(create(AgentMessageSchema,{type:MessageType.MESSAGE_SYSTEM,content:"Execution was rejected by the user during tool approval.",timestamp:utcTimestamp()})),await persist(status),slimStatus(status)}else if(reconciledFileReview)return status.phase=ExecutionPhase.EXECUTION_COMPLETED,status.completedAt=utcTimestamp(),!fileReviewFailed&&writebackCoordinator&&await writebackCoordinator.finalize(),fileReviewFailed?status.messages.push(create(AgentMessageSchema,{type:MessageType.MESSAGE_SYSTEM,content:"Some approved file changes could not be applied because the file changed after review: "+fileReviewFailureDetail+".",timestamp:utcTimestamp()})):discardedPaths.length>0&&status.messages.push(create(AgentMessageSchema,{type:MessageType.MESSAGE_SYSTEM,content:"Some proposed file changes were discarded by the user and were not applied: "+discardedPaths.join(", ")+".",timestamp:utcTimestamp()})),await persist(status),console.log(`ExecuteCursor file-review resume short-circuit: execution=${executionId}, failed=${fileReviewFailed}, discarded=${discardedPaths.length}`),slimStatus(status)}await reportSetupProgress(client2,executionId,"Resolving MCP servers");let mcpResolution=await resolveMcpServers(client2,blueprint.mergedMcpServerUsages,envVars),sessionOrg=session.metadata?.org??"";mcpResolution=await backfillMcpServersIfNeeded2(client2,mcpResolution,blueprint.mergedMcpServerUsages,envVars,sessionOrg,import_activity15.heartbeat,secretKeys);let mcpConfig=mcpResolution.cursorConfig,leases=deriveActiveLeases(execution),globalBypass=leases.global,agentOverrides=blueprint.mergedMcpServerUsages.flatMap(u=>u.toolApprovalOverrides??[]),mergedPolicies=mergeApprovalPolicies(mcpResolution.resolvedServers,agentOverrides,leases);(0,import_activity15.heartbeat)();let mcpWarnings=validateMcpServerEnv(mcpResolution.resolvedServers,blueprint.mergedMcpServerUsages,envVars);mcpWarnings.length>0&&console.warn(`ExecuteCursor MCP pre-flight warnings: execution=${executionId}
|
|
2405
2407
|
`+mcpWarnings.map(w=>` - ${w}`).join(`
|
|
2406
2408
|
`)),await reportSetupProgress(client2,executionId,"Resolving skills");let skillMetadata=await resolveSkills(client2,blueprint.mergedSkillRefs,{sessionId,primaryWorkspaceDir});(0,import_activity15.heartbeat)();let attachmentPaths=(await resolveAttachments(spec.attachments,{sessionId,primaryWorkspaceDir,mode:config4.mode,storage:artifactStorage})).map(a=>a.relativePath),appliedToolCallIds=new Set;!captureMode&&isReinvocation&&approvalDecisions&&(appliedToolCallIds=await applyApprovedWholeFileWrites({messages:status.messages,workspaceBackend:new LocalWorkspaceBackend(primaryWorkspaceDir),workspaceDirs:blueprint.workspaceDirs,executionId}),appliedToolCallIds.size>0&&await persist(status)),captureMode&&primaryWorkspaceDir&&(baselineTree=await captureBaselineToLedger2({status,gitRoot:primaryWorkspaceDir,executionId,changeSetId,gitWorkspace})),hitlDir=await ensureHitlDir(sessionId);let grantApprovals=excludeAppliedFromGrants(adjudicatedApprovals,appliedToolCallIds),approvalGrants=approvalDecisions?buildApprovalGrants(grantApprovals,approvalDecisions,adjudicatedContentDigests):void 0;approvalGrants&&approvalGrants.length>0&&!globalBypass&&emitCursorGrantReceipts(approvalGrants,deriveExecutionFingerprintKey(getRunnerHitlMasterSecret(),executionId),executionId);let captureIgnored=captureMode&&!!artifactStorage,approvalState=buildApprovalState(mergedPolicies,globalBypass,leases.categories,approvalGrants,captureMode,captureIgnored,gitWorkspace),hitlGate=await installHitlGate({workspaceRoot:primaryWorkspaceDir,hitlDir,approvalState,runnerPid:process.pid});hitlCleanup=async()=>{await removeHitlGate(hitlGate),await removeStigmerSymlink(primaryWorkspaceDir)},stopDenialWatcher=watchDenialLedger(hitlDir,()=>{turnState.denialLedgerDirty=!0});let progressSubstrate=buildCursorProgressSubstrate({captureMode,gitWorkspace,workspaceRoot:primaryWorkspaceDir,baselineTree,executionId,hitlDir,storage:artifactStorage});await ensureLoaded();let requestedModel=spec.executionConfig?.modelName||"default",validatedModel=resolveModelId(requestedModel);validatedModel!==requestedModel&&console.log(`ExecuteCursor model resolved: execution=${executionId}, requested="${requestedModel}", using="${validatedModel}"`),(0,import_activity15.heartbeat)(),await reportSetupProgress(client2,executionId,"Initializing Cursor agent");let effectiveApiKey=config4.proxyEndpoint?config4.stigmerTokenRef?.current??config4.stigmerToken??config4.cursorApiKey:config4.cursorApiKey;if(!effectiveApiKey||effectiveApiKey==="proxy-managed"){let source=config4.proxyEndpoint?"proxy (STIGMER_TOKEN)":"direct (CURSOR_API_KEY)";throw new Error(`No Cursor API credential available. Mode=${source}, proxyEndpoint=${config4.proxyEndpoint??"unset"}, hasStigmerToken=${!!config4.stigmerToken}, hasTokenRef=${!!config4.stigmerTokenRef?.current}`)}let cursorSubAgents=buildCursorSubAgentDefinitions(blueprint.subAgents);cursorSubAgents&&console.log(`ExecuteCursor registering ${Object.keys(cursorSubAgents).length} custom sub-agent(s): execution=${executionId}, names=${Object.keys(cursorSubAgents).join(", ")}`);let createOptions=agentMode==="cloud"?{apiKey:effectiveApiKey,model:validatedModel||void 0,repos:blueprint.cloudRepos,sessionId,mcpServers:mcpConfig,agents:cursorSubAgents}:{apiKey:effectiveApiKey,model:validatedModel,workspaceDirs:blueprint.workspaceDirs,sessionId,workspaceRootDir:config4.workspaceRootDir,mcpServers:mcpConfig,agents:cursorSubAgents},resolution=await resolveAgent(threadId,createOptions,agentMode);if(console.log(`ExecuteCursor agent resolved: execution=${executionId}, reason=${resolution.reason}, mode=${resolution.mode}, agentId=${resolution.agentId}, resumed=${resolution.resumed}`+(resolution.resumeFailureDetail?`, failureDetail=${resolution.resumeFailureDetail}`:"")),errorContext={model:validatedModel,mode:agentMode,agentId:resolution.agentId},resolution.isNew&&resolution.agentId)try{blueprint.sessionSpec.harnessStateId=resolution.agentId,blueprint.sessionSpec.cursorMode===CursorMode.UNSPECIFIED&&(blueprint.sessionSpec.cursorMode=cursorMode),blueprint.session.metadata&&(blueprint.session.metadata.slug=""),await client2.updateSession(blueprint.session),console.log(`Stored Cursor agentId=${resolution.agentId} as harness_state_id, cursorMode=${CursorMode[cursorMode]} on session ${sessionId}`)}catch(err){console.warn("Failed to persist harness_state_id/cursorMode on session (non-fatal):",err)}let structuredOutputSchema=spec.executionConfig?.structuredOutputSchema,interactionMode=spec.executionConfig?.interactionMode??InteractionMode.UNSPECIFIED,buildFromPlan=spec.executionConfig?.buildFromPlan??!1,effectivePrompt=buildPrompt({resolution,approvalDecisions,instructions:blueprint.instructions,userMessage:spec.message,skills:skillMetadata,subAgents:blueprint.subAgents,workspaceDirs:blueprint.workspaceDirs,workspaceFileRefs:spec.workspaceFileRefs??[],attachmentPaths,pendingApprovals:adjudicatedApprovals,appliedToolCallIds,interactionMode,buildFromPlan});if(structuredOutputSchema){let schemaStr=JSON.stringify(structuredOutputSchema,null,2);effectivePrompt+=`
|
|
2407
2409
|
|
|
@@ -2410,9 +2412,9 @@ CRITICAL OUTPUT REQUIREMENT:
|
|
|
2410
2412
|
Your final response MUST be a single valid JSON object (no markdown, no commentary, no code fences) that matches this schema:
|
|
2411
2413
|
${schemaStr}
|
|
2412
2414
|
|
|
2413
|
-
Respond with ONLY the JSON object. Nothing else.`}let promptChars=effectivePrompt.length,promptEstimatedTokens=Math.ceil(promptChars/4);console.log(`ExecuteCursor prompt built: execution=${executionId}, chars=${promptChars}, estimatedTokens=${promptEstimatedTokens}, resolution=${resolution.reason}, mode=${resolution.mode}`),await ensureLoaded();let usageAccumulator=new UsageAccumulator(validatedModel),{startCursorTurnSpan:startCursorTurnSpan2}=await Promise.resolve().then(()=>(init_otel(),otel_exports)),turnSpan=await startCursorTurnSpan2({model:validatedModel,mode:agentMode,sessionId:sessionId??""}),turnTelemetryFinished=!1;finishTurnTelemetry=async()=>{if(turnTelemetryFinished)return;turnTelemetryFinished=!0;let usage=usageAccumulator.snapshot();turnSpan.setTokens(Number(usage.inputTokens),Number(usage.outputTokens)),turnSpan.end();try{let{recordTurnMetrics:recordTurnMetrics2}=await Promise.resolve().then(()=>(init_otel(),otel_exports)),durationMs=Date.now()-(status.startedAt?new Date(status.startedAt).getTime():Date.now());await recordTurnMetrics2({durationMs,inputTokens:Number(usage.inputTokens),outputTokens:Number(usage.outputTokens),model:validatedModel,mode:agentMode})}catch{}},status.phase=ExecutionPhase.EXECUTION_IN_PROGRESS;let deltaEnricher=new DeltaEnricher,todoTracker=new TodoTracker(status.todos),eventRecorder=createCursorEventRecorder(executionId),alreadyRetriedWithFreshAgent=!1,onDeltaDeps={usageAccumulator,deltaEnricher,heartbeat:import_activity15.heartbeat,promptEstimatedTokens,executionId,state:turnState},taskQueue=import_activity15.Context.current().info.taskQueue,shutdownSignal=getShutdownSignalForQueue(taskQueue);periodicHeartbeat=startHeartbeat(3e4,()=>({phase:"cursor_streaming",execution:executionId}),{shutdownSignal});try{(0,import_node_events.setMaxListeners)(25,import_activity15.Context.current().cancellationSignal)}catch{}let run=await resolution.agent.send(effectivePrompt,{onDelta:makeCursorTurnOnDelta(onDeltaDeps)}),turnStartMessageIndex=status.messages.length,accumulator=new MessageAccumulator(status.messages,{mergedPolicies,provenance:{globalBypass,leasedCategories:leases.categories},workspaceRoot:primaryWorkspaceDir,seededSubAgents}),scheduler=new StreamingUpdateScheduler(loadStreamingConfig()),streamDeps={...onDeltaDeps,status,accumulator,todoTracker,eventRecorder,scheduler,progressSubstrate,progressState,changeSetId,hitlDir,stallTimeoutMs:config4.cursorStreamStallTimeoutMs,persist,isCancelled:()=>import_activity15.Context.current().cancellationSignal.aborted};await consumeCursorTurnStream(run,streamDeps),periodicHeartbeat.stop();let isShutdown=periodicHeartbeat.workerShutdown||(shutdownSignal?.aborted??!1);isShutdown?turnState.pauseDetected=!1:periodicHeartbeat.cancelled&&(turnState.pauseDetected=!0),workerShutdownDetected=isShutdown;let finalizeStreamPhase=async()=>{accumulator.finalize(),deltaEnricher.finalize(status.messages),(turnState.pauseDetected||workerShutdownDetected||turnState.stallDetected||import_activity15.Context.current().cancellationSignal.aborted)&&accumulator.cancelInProgressSubAgents(),status.subAgentExecutions=accumulator.subAgentExecutions,await eventRecorder?.flush(),usageAccumulator.hasTurns&&(status.streamingUsage=create(StreamingUsageSummarySchema,usageAccumulator.snapshot())),console.log(`ExecuteCursor stream ended: execution=${executionId}, events=${turnState.eventCount}, messages=${status.messages.length}, subAgents=${status.subAgentExecutions.length}`),await persist(status),(0,import_activity15.heartbeat)()},resolvePreBoundaryTerminal=async()=>{if(turnState.stallDetected){let err=turnState.stallError??new StallTimeoutError(config4.cursorStreamStallTimeoutMs);return status.phase=ExecutionPhase.EXECUTION_FAILED,status.error=formatStallFailure(err),status.completedAt=utcTimestamp(),status.messages.push(create(AgentMessageSchema,{type:MessageType.MESSAGE_SYSTEM,content:`Execution failed: the agent made no progress for too long and was stopped (${err.message}). You can retry or resume.`,timestamp:utcTimestamp()})),await persist(status),console.warn(`ExecuteCursor stalled: execution=${executionId}, events=${turnState.eventCount}, error=${status.error}`),{kind:"return"}}if(workerShutdownDetected||(shutdownSignal?.aborted??!1))return status.phase=ExecutionPhase.EXECUTION_FAILED,status.error="Execution interrupted: runner worker was shut down. Retry or resume.",status.completedAt=utcTimestamp(),status.messages.push(create(AgentMessageSchema,{type:MessageType.MESSAGE_SYSTEM,content:"Execution interrupted: the runner worker was shut down while the agent was still running. You can retry or resume.",timestamp:utcTimestamp()})),await persist(status),console.log(`ExecuteCursor interrupted (worker shutdown): execution=${executionId}, events=${turnState.eventCount}`),{kind:"throw",message:"Activity cancelled (worker shutdown, not user pause)"};if(turnState.pauseDetected)return status.phase=ExecutionPhase.EXECUTION_PAUSED,status.messages.push(create(AgentMessageSchema,{type:MessageType.MESSAGE_SYSTEM,content:"Execution paused by user. Use resume to continue.",timestamp:utcTimestamp()})),await persist(status),console.log(`ExecuteCursor paused: execution=${executionId}, events=${turnState.eventCount}`),{kind:"throw",message:"Activity paused by orchestrator"};if(import_activity15.Context.current().cancellationSignal.aborted)return status.phase=ExecutionPhase.EXECUTION_FAILED,status.error="Execution interrupted: agent was unresponsive (heartbeat timeout). Retry or resume.",status.completedAt=utcTimestamp(),status.messages.push(create(AgentMessageSchema,{type:MessageType.MESSAGE_SYSTEM,content:"Execution interrupted: the agent was unresponsive for too long. You can retry or resume.",timestamp:utcTimestamp()})),await persist(status),console.log(`ExecuteCursor interrupted (infrastructure cancel): execution=${executionId}, events=${turnState.eventCount}`),{kind:"throw",message:"Activity cancelled (heartbeat timeout, not user pause)"};if(turnState.platformStopSignaled){status.phase=ExecutionPhase.EXECUTION_COMPLETED,status.completedAt=utcTimestamp(),status.messages.push(create(AgentMessageSchema,{type:MessageType.MESSAGE_SYSTEM,content:"Execution stopped by the platform.",timestamp:utcTimestamp()})),await persist(status);try{resolution.agent.close()}catch{}return console.log(`ExecuteCursor completed (platform stop): execution=${executionId}`),{kind:"return"}}return{kind:"proceed"}};await finalizeStreamPhase();let primaryTerminal=await resolvePreBoundaryTerminal();if(primaryTerminal.kind==="return")return slimStatus(status);if(primaryTerminal.kind==="throw")throw new import_activity15.CancelledFailure(primaryTerminal.message);let runBoundary=denialSettled=>runTurnBoundary({status,executionId,changeSetId,hitlDir,captureMode,baselineTree,primaryWorkspaceDir,gitWorkspace,turnStartMessageIndex,approvalGrants,globalBypass,seededSubAgents,artifactStorage,mergedPolicies,denialCancelSettled:denialSettled}),enterApprovalPause=async boundary2=>(status.phase=ExecutionPhase.EXECUTION_WAITING_FOR_APPROVAL,await persist(status),console.log(`ExecuteCursor returning WAITING_FOR_APPROVAL: ${boundary2.deniedToolCallCount} gated tool(s), ${boundary2.capturedChangeCount} file card(s) pending`),slimStatus(status)),settleRetryTurn=async retryResultStatus=>{let retryBoundary=retryResultStatus==="cancelled"?void 0:await runBoundary(turnState.firstDenialDetected?turnState.denialCancelSettled:void 0);return status.completedAt=retryBoundary?.waiting?"":utcTimestamp(),retryBoundary},runRecoveryStream=async(freshAgent,retryPrompt)=>{resolution={...resolution,agent:freshAgent,agentId:freshAgent.agentId,isNew:!0},turnState.streamErrorMessage=void 0;let retryRun=await freshAgent.send(retryPrompt,{onDelta:makeCursorTurnOnDelta(onDeltaDeps)});await consumeCursorTurnStream(retryRun,streamDeps),await finalizeStreamPhase();let terminal=await resolvePreBoundaryTerminal();if(terminal.kind!=="proceed")return{proceeded:!1,terminal};let retryResult=await retryRun.wait();console.log(`ExecuteCursor retry run.wait(): execution=${executionId}, retryResult=${JSON.stringify(retryResult)}`);let retryBoundary=await settleRetryTurn(retryResult.status);return{proceeded:!0,retryRun,retryResult,retryBoundary}},boundary=await runBoundary(turnState.firstDenialDetected?turnState.denialCancelSettled:void 0);if(boundary.waiting)return enterApprovalPause(boundary);let result=await run.wait(),sdkResolvedModel=result.model?.id||void 0;switch(console.log(`ExecuteCursor run.wait() result: execution=${executionId}, result=${JSON.stringify(result)}`),sdkResolvedModel&&sdkResolvedModel!==validatedModel&&console.log(`ExecuteCursor model divergence: execution=${executionId}, requested=${validatedModel}, sdkResolved=${sdkResolvedModel}`),status.completedAt=utcTimestamp(),result.status){case"finished":status.phase=ExecutionPhase.EXECUTION_COMPLETED;break;case"error":{let resultAny=result,sdkError=result.result??resultAny.error??resultAny.message??resultAny.reason,sdkErrorStr=sdkError?String(sdkError):void 0,conversationErrorText=await introspectConversation(run,executionId),capturedRejection=getCapturedRejection(executionId);capturedRejection&&clearCapturedRejection(executionId);let classified=synthesizeError({sdkResultFields:sdkErrorStr,streamErrorMessage:turnState.streamErrorMessage,capturedRejection,conversationErrorText,isResumedHandle:resolution.reason==="resumed_successfully",fallbackContext:{model:validatedModel,mode:agentMode,agentId:resolution.agentId},durationMs:result.durationMs,messageCount:status.messages.length});if(console.error(`ExecuteCursor agent error: execution=${executionId}, classified=${JSON.stringify(classified)}, rawResult=${JSON.stringify(result)}`),shouldRetryWithFreshAgent(classified)&&resolution.reason==="resumed_successfully"&&!alreadyRetriedWithFreshAgent){alreadyRetriedWithFreshAgent=!0,console.warn(`ExecuteCursor poisoned-handle recovery: execution=${executionId}, disposing agent ${resolution.agentId} and creating fresh agent`);try{resolution.agent.close()}catch{}let freshAgent=agentMode==="cloud"?await createCloudAgent(createOptions):await createAgent(createOptions),freshPrompt=buildPrompt({resolution:{...resolution,agent:freshAgent,agentId:freshAgent.agentId,isNew:!0,resumed:!1,reason:"created_after_resume_failure",resumeFailureDetail:`poisoned-handle recovery: ${classified.message}`},approvalDecisions,instructions:blueprint.instructions,userMessage:spec.message,skills:skillMetadata,subAgents:blueprint.subAgents,workspaceDirs:blueprint.workspaceDirs,workspaceFileRefs:spec.workspaceFileRefs??[],attachmentPaths,pendingApprovals:adjudicatedApprovals,interactionMode});console.log(`ExecuteCursor retry with fresh agent: execution=${executionId}, newAgentId=${freshAgent.agentId}`);try{blueprint.sessionSpec.harnessStateId=freshAgent.agentId,blueprint.session.metadata&&(blueprint.session.metadata.slug=""),await client2.updateSession(blueprint.session)}catch(updateErr){console.warn("Failed to update session with fresh agentId (non-fatal):",updateErr)}let outcome=await runRecoveryStream(freshAgent,freshPrompt);if(!outcome.proceeded){if(outcome.terminal.kind==="return")return slimStatus(status);throw new import_activity15.CancelledFailure(outcome.terminal.message)}let{retryRun,retryResult,retryBoundary}=outcome;if(retryBoundary?.waiting)return console.log(`ExecuteCursor poisoned-handle recovery paused for review: execution=${executionId}`),enterApprovalPause(retryBoundary);if(retryResult.status==="finished"){status.phase=ExecutionPhase.EXECUTION_COMPLETED,console.log(`ExecuteCursor poisoned-handle recovery SUCCEEDED: execution=${executionId}`);break}if(retryResult.status==="cancelled"){status.phase=ExecutionPhase.EXECUTION_CANCELLED;break}let retryRejection=getCapturedRejection(executionId);retryRejection&&clearCapturedRejection(executionId);let retryConversationErrorText=await introspectConversation(retryRun,executionId),retryClassified=synthesizeError({sdkResultFields:retryResult.result?String(retryResult.result):void 0,streamErrorMessage:turnState.streamErrorMessage,capturedRejection:retryRejection,conversationErrorText:retryConversationErrorText,isResumedHandle:!1,fallbackContext:{model:validatedModel,mode:agentMode,agentId:freshAgent.agentId}});status.phase=ExecutionPhase.EXECUTION_FAILED,status.error=formatClassifiedError(retryClassified),console.error(`ExecuteCursor poisoned-handle recovery FAILED: execution=${executionId}, retryError=${status.error}`);break}if(classified.category==="network"&&classified.retryable&&resolution.reason!=="resumed_successfully"&&!alreadyRetriedWithFreshAgent){alreadyRetriedWithFreshAgent=!0,console.warn(`ExecuteCursor transport-timeout recovery: execution=${executionId}, resetting proxy sessions and retrying with fresh agent`);try{resolution.agent.close()}catch{}closeProxySessions();let freshAgent=agentMode==="cloud"?await createCloudAgent(createOptions):await createAgent(createOptions);try{blueprint.sessionSpec.harnessStateId=freshAgent.agentId,blueprint.session.metadata&&(blueprint.session.metadata.slug=""),await client2.updateSession(blueprint.session)}catch(updateErr){console.warn("Failed to update session with fresh agentId (non-fatal):",updateErr)}let outcome=await runRecoveryStream(freshAgent,effectivePrompt);if(!outcome.proceeded){if(outcome.terminal.kind==="return")return slimStatus(status);throw new import_activity15.CancelledFailure(outcome.terminal.message)}let{retryResult,retryBoundary}=outcome;if(retryBoundary?.waiting)return console.log(`ExecuteCursor transport-timeout recovery paused for review: execution=${executionId}`),enterApprovalPause(retryBoundary);if(retryResult.status==="finished"){status.phase=ExecutionPhase.EXECUTION_COMPLETED;break}status.phase=ExecutionPhase.EXECUTION_FAILED,status.error=`Transport recovery failed: ${formatClassifiedError(classified)}`;break}status.phase=ExecutionPhase.EXECUTION_FAILED,status.error=formatClassifiedError(classified);break}case"cancelled":status.phase=ExecutionPhase.EXECUTION_CANCELLED;break;default:status.phase=ExecutionPhase.EXECUTION_COMPLETED}let structuredOutput,finalText;if(status.phase===ExecutionPhase.EXECUTION_COMPLETED){if(finalText=[...status.messages].reverse().find(m=>m.type===MessageType.MESSAGE_AI)?.content,structuredOutputSchema&&finalText){let{extractJsonFromText:extractJsonFromText2}=await Promise.resolve().then(()=>(init_extract_json(),extract_json_exports));if(structuredOutput=extractJsonFromText2(finalText),structuredOutput!==void 0&&console.log(`ExecuteCursor structured output extracted (text): execution=${executionId}, finalTextLength=${finalText.length}`),structuredOutput===void 0){console.log(`ExecuteCursor text extraction failed, trying LLM extraction: execution=${executionId}, finalTextLength=${finalText.length}`);try{structuredOutput=await extractStructuredOutput(finalText,structuredOutputSchema,config4,requestedModel),structuredOutput!==void 0&&console.log(`ExecuteCursor structured output extracted (LLM): execution=${executionId}`)}catch(extractErr){let errMsg=extractErr instanceof Error?extractErr.message:String(extractErr);console.error(`ExecuteCursor structured output extraction FAILED: execution=${executionId}, requestedModel=${requestedModel}, finalTextLength=${finalText.length}, error=${errMsg}`)}}}if(structuredOutput!==void 0&&(status.structuredOutput=structuredOutput),interactionMode===InteractionMode.PLAN&&finalText&&artifactStorage)try{await publishPlanArtifact({status,executionId,planText:finalText,artifactStorage})}catch(err){console.warn(`ExecuteCursor plan artifact publish skipped (non-fatal): execution=${executionId}, error=${err}`)}}let collapsedTwins=collapseRedundantToolCallTwins(status.messages);collapsedTwins>0&&console.log(`ExecuteCursor collapsed ${collapsedTwins} redundant tool-call twin(s) at terminal finalize (kept in place as hidden SKIPPED rows): execution=${executionId}`),await persist(status),console.log(`ExecuteCursor completed: execution=${executionId}, phase=${ExecutionPhase[status.phase]}, hasStructuredOutput=${structuredOutput!==void 0}`+(status.error?`, error=${status.error}`:""));try{resolution.agent.close()}catch{}let slim=slimStatus(status);return finalText!==void 0&&(slim.final_text=finalText),structuredOutput!==void 0&&(slim.structured=structuredOutput),slim}catch(err){if(periodicHeartbeat?.stop(),err instanceof import_activity15.CancelledFailure)throw workerShutdownDetected?(console.log(`ExecuteCursor cancelled (worker shutdown) for execution ${executionId}`),status.phase=ExecutionPhase.EXECUTION_FAILED,status.error="Execution interrupted: runner worker was shut down. Retry or resume.",status.completedAt=utcTimestamp(),status.messages.push(create(AgentMessageSchema,{type:MessageType.MESSAGE_SYSTEM,content:"Execution interrupted: the runner worker was shut down while the agent was still running. You can retry or resume.",timestamp:utcTimestamp()}))):turnState.pauseDetected?(console.log(`ExecuteCursor cancelled (pause) for execution ${executionId}`),status.phase=ExecutionPhase.EXECUTION_PAUSED,status.messages.push(create(AgentMessageSchema,{type:MessageType.MESSAGE_SYSTEM,content:"Execution paused by user. Use resume to continue.",timestamp:utcTimestamp()}))):(console.log(`ExecuteCursor cancelled (infrastructure) for execution ${executionId}`),status.phase=ExecutionPhase.EXECUTION_FAILED,status.error="Execution interrupted: agent was unresponsive (heartbeat timeout). Retry or resume.",status.completedAt=utcTimestamp(),status.messages.push(create(AgentMessageSchema,{type:MessageType.MESSAGE_SYSTEM,content:"Execution interrupted: the agent was unresponsive for too long. You can retry or resume.",timestamp:utcTimestamp()}))),cancelInProgressSubAgentProtos(status.subAgentExecutions),await persist(status).catch(()=>{}),err;if(turnState.pauseDetected){let errDetail=err instanceof Error?err.message:String(err);throw console.log(`ExecuteCursor error during pause (treating as pause): execution=${executionId}, error=${errDetail}`),status.phase=ExecutionPhase.EXECUTION_PAUSED,status.messages.push(create(AgentMessageSchema,{type:MessageType.MESSAGE_SYSTEM,content:"Execution paused by user. Use resume to continue.",timestamp:utcTimestamp()})),cancelInProgressSubAgentProtos(status.subAgentExecutions),await persist(status).catch(()=>{}),new import_activity15.CancelledFailure("Activity paused by orchestrator (error during pause)")}if(import_activity15.Context.current().cancellationSignal.aborted){let errDetail=err instanceof Error?err.message:String(err);throw console.log(`ExecuteCursor error during infrastructure cancel: execution=${executionId}, error=${errDetail}`),status.phase=ExecutionPhase.EXECUTION_FAILED,status.error=`Execution interrupted: ${errDetail}`,status.completedAt=utcTimestamp(),status.messages.push(create(AgentMessageSchema,{type:MessageType.MESSAGE_SYSTEM,content:"Execution interrupted: the agent was unresponsive for too long. You can retry or resume.",timestamp:utcTimestamp()})),cancelInProgressSubAgentProtos(status.subAgentExecutions),await persist(status).catch(()=>{}),new import_activity15.CancelledFailure("Activity cancelled (infrastructure, not user pause)")}let{CursorSdkError}=await import("@cursor/sdk");if(err instanceof CursorSdkError){let sdkErrorJson=err.toJSON();console.error(`ExecuteCursor SDK error: execution=${executionId}, sdkError=${JSON.stringify(sdkErrorJson)}`);let classified=synthesizeError({sdkError:{code:err.code,status:err.status,message:err.message},sdkResultFields:void 0,streamErrorMessage:void 0,capturedRejection:getCapturedRejection(executionId),isResumedHandle:!1,fallbackContext:errorContext});clearCapturedRejection(executionId),status.phase=ExecutionPhase.EXECUTION_FAILED,status.error=formatClassifiedError(classified),status.completedAt=utcTimestamp(),status.messages.push(create(AgentMessageSchema,{type:MessageType.MESSAGE_SYSTEM,content:"Internal system error occurred. Please contact support if this issue persists.",timestamp:utcTimestamp()}),create(AgentMessageSchema,{type:MessageType.MESSAGE_SYSTEM,content:`Error details: ${status.error}`,timestamp:utcTimestamp()}));try{await persist(status)}catch(persistErr){console.error("Failed to persist error status (best-effort):",persistErr)}return slimStatus(status)}let errMsg=err instanceof Error?err.message:String(err),errType=err instanceof Error?err.constructor.name:"Unknown";console.error(`ExecuteCursor failed: execution=${executionId}, [${errType}] ${errMsg}`),status.phase=ExecutionPhase.EXECUTION_FAILED,status.error=`Execution failed: [${errType}] ${errMsg}`,status.completedAt=utcTimestamp(),status.messages.push(create(AgentMessageSchema,{type:MessageType.MESSAGE_SYSTEM,content:"Internal system error occurred. Please contact support if this issue persists.",timestamp:utcTimestamp()}),create(AgentMessageSchema,{type:MessageType.MESSAGE_SYSTEM,content:`Error details: [${errType}] ${errMsg}`,timestamp:utcTimestamp()}));try{await persist(status)}catch(persistErr){console.error("Failed to persist error status (best-effort):",persistErr)}return slimStatus(status)}finally{if(await finishTurnTelemetry?.(),turnState.stallWatchdog?.stop(),stopDenialWatcher?.(),hitlCleanup)try{await hitlCleanup()}catch(cleanupErr){console.warn(`ExecuteCursor HITL gate teardown failed (non-fatal): execution=${executionId}, error=${cleanupErr instanceof Error?cleanupErr.message:cleanupErr}`)}await releaseWorkspaceLock?.()}}function seedCursorTranscriptFromExecution(status,execution){let persisted=execution.status;if(!persisted||persisted.messages.length===0)return[];for(let message of persisted.messages)status.messages.push(clone(AgentMessageSchema,message));return persisted.subAgentExecutions.map(sub=>clone(SubAgentExecutionSchema,sub))}async function extractStructuredOutput(agentResponse,schema2,config4,primaryModel){let{getEconomyModel:getEconomyModel2}=await Promise.resolve().then(()=>(init_model_registry(),model_registry_exports)),{buildChatModel:buildChatModel2}=await Promise.resolve().then(()=>(init_model_client(),model_client_exports)),extractionModel=await getEconomyModel2(primaryModel),proxyEndpoint=config4.proxyEndpoint??config4.stigmerBackendEndpoint,{model:llm}=await buildChatModel2({modelName:extractionModel,proxyEndpoint,stigmerToken:config4.stigmerToken??void 0,maxTokens:4096}),zodSchema=jsonSchemaToZod(schema2);return await llm.withStructuredOutput(zodSchema).invoke([{role:"system",content:"Extract the structured data from the agent's response. Return only the data that matches the schema."},{role:"user",content:agentResponse}])??null}function buildPrompt(input){let{resolution,approvalDecisions,instructions,userMessage,skills,subAgents,workspaceDirs,workspaceFileRefs,attachmentPaths,interactionMode,buildFromPlan}=input;if(approvalDecisions!==void 0&&approvalDecisions.size>0)return buildReinvocationPrompt(input.pendingApprovals,approvalDecisions,input.appliedToolCallIds);if(resolution.reason==="resumed_successfully"){let prefixes=[formatInteractionModePrefix(interactionMode),formatImplementPlanSection(buildFromPlan,attachmentPaths)].filter(p=>p!==void 0);return prefixes.length>0?[...prefixes,userMessage].join(`
|
|
2415
|
+
Respond with ONLY the JSON object. Nothing else.`}let promptChars=effectivePrompt.length,promptEstimatedTokens=Math.ceil(promptChars/4);console.log(`ExecuteCursor prompt built: execution=${executionId}, chars=${promptChars}, estimatedTokens=${promptEstimatedTokens}, resolution=${resolution.reason}, mode=${resolution.mode}`),await ensureLoaded();let usageAccumulator=new UsageAccumulator(validatedModel),{startCursorTurnSpan:startCursorTurnSpan2}=await Promise.resolve().then(()=>(init_otel(),otel_exports)),turnSpan=await startCursorTurnSpan2({model:validatedModel,mode:agentMode,sessionId:sessionId??""}),turnTelemetryFinished=!1;finishTurnTelemetry=async()=>{if(turnTelemetryFinished)return;turnTelemetryFinished=!0;let usage=usageAccumulator.snapshot();turnSpan.setTokens(Number(usage.inputTokens),Number(usage.outputTokens)),turnSpan.end();try{let{recordTurnMetrics:recordTurnMetrics2}=await Promise.resolve().then(()=>(init_otel(),otel_exports)),durationMs=Date.now()-(status.startedAt?new Date(status.startedAt).getTime():Date.now());await recordTurnMetrics2({durationMs,inputTokens:Number(usage.inputTokens),outputTokens:Number(usage.outputTokens),model:validatedModel,mode:agentMode})}catch{}},status.phase=ExecutionPhase.EXECUTION_IN_PROGRESS;let deltaEnricher=new DeltaEnricher,todoTracker=new TodoTracker(status.todos),eventRecorder=createCursorEventRecorder(executionId),alreadyRetriedWithFreshAgent=!1,onDeltaDeps={usageAccumulator,deltaEnricher,heartbeat:import_activity15.heartbeat,promptEstimatedTokens,executionId,state:turnState},taskQueue=import_activity15.Context.current().info.taskQueue,shutdownSignal=getShutdownSignalForQueue(taskQueue);periodicHeartbeat=startHeartbeat(3e4,()=>({phase:"cursor_streaming",execution:executionId}),{shutdownSignal});try{(0,import_node_events.setMaxListeners)(25,import_activity15.Context.current().cancellationSignal)}catch{}let run=await resolution.agent.send(effectivePrompt,{onDelta:makeCursorTurnOnDelta(onDeltaDeps)}),turnStartMessageIndex=status.messages.length,accumulator=new MessageAccumulator(status.messages,{mergedPolicies,provenance:{globalBypass,leasedCategories:leases.categories},workspaceRoot:primaryWorkspaceDir,seededSubAgents}),scheduler=new StreamingUpdateScheduler(loadStreamingConfig()),streamDeps={...onDeltaDeps,status,accumulator,todoTracker,eventRecorder,scheduler,progressSubstrate,progressState,changeSetId,hitlDir,stallTimeoutMs:config4.cursorStreamStallTimeoutMs,persist,isCancelled:()=>import_activity15.Context.current().cancellationSignal.aborted};await consumeCursorTurnStream(run,streamDeps),periodicHeartbeat.stop();let isShutdown=periodicHeartbeat.workerShutdown||(shutdownSignal?.aborted??!1);isShutdown?turnState.pauseDetected=!1:periodicHeartbeat.cancelled&&(turnState.pauseDetected=!0),workerShutdownDetected=isShutdown;let finalizeStreamPhase=async()=>{accumulator.finalize(),deltaEnricher.finalize(status.messages),(turnState.pauseDetected||workerShutdownDetected||turnState.stallDetected||import_activity15.Context.current().cancellationSignal.aborted)&&accumulator.cancelInProgressSubAgents(),status.subAgentExecutions=accumulator.subAgentExecutions,await eventRecorder?.flush(),usageAccumulator.hasTurns&&(status.streamingUsage=create(StreamingUsageSummarySchema,usageAccumulator.snapshot())),console.log(`ExecuteCursor stream ended: execution=${executionId}, events=${turnState.eventCount}, messages=${status.messages.length}, subAgents=${status.subAgentExecutions.length}`),await persist(status),(0,import_activity15.heartbeat)()},resolvePreBoundaryTerminal=async()=>{if(turnState.stallDetected){let err=turnState.stallError??new StallTimeoutError(config4.cursorStreamStallTimeoutMs);return status.phase=ExecutionPhase.EXECUTION_FAILED,status.error=formatStallFailure(err),status.completedAt=utcTimestamp(),status.messages.push(create(AgentMessageSchema,{type:MessageType.MESSAGE_SYSTEM,content:`Execution failed: the agent made no progress for too long and was stopped (${err.message}). You can retry or resume.`,timestamp:utcTimestamp()})),await persist(status),console.warn(`ExecuteCursor stalled: execution=${executionId}, events=${turnState.eventCount}, error=${status.error}`),{kind:"return"}}if(workerShutdownDetected||(shutdownSignal?.aborted??!1))return status.phase=ExecutionPhase.EXECUTION_FAILED,status.error="Execution interrupted: runner worker was shut down. Retry or resume.",status.completedAt=utcTimestamp(),status.messages.push(create(AgentMessageSchema,{type:MessageType.MESSAGE_SYSTEM,content:"Execution interrupted: the runner worker was shut down while the agent was still running. You can retry or resume.",timestamp:utcTimestamp()})),await persist(status),console.log(`ExecuteCursor interrupted (worker shutdown): execution=${executionId}, events=${turnState.eventCount}`),{kind:"throw",message:"Activity cancelled (worker shutdown, not user pause)"};if(turnState.pauseDetected)return status.phase=ExecutionPhase.EXECUTION_PAUSED,status.messages.push(create(AgentMessageSchema,{type:MessageType.MESSAGE_SYSTEM,content:"Execution paused by user. Use resume to continue.",timestamp:utcTimestamp()})),await persist(status),console.log(`ExecuteCursor paused: execution=${executionId}, events=${turnState.eventCount}`),{kind:"throw",message:"Activity paused by orchestrator"};if(import_activity15.Context.current().cancellationSignal.aborted)return status.phase=ExecutionPhase.EXECUTION_FAILED,status.error="Execution interrupted: agent was unresponsive (heartbeat timeout). Retry or resume.",status.completedAt=utcTimestamp(),status.messages.push(create(AgentMessageSchema,{type:MessageType.MESSAGE_SYSTEM,content:"Execution interrupted: the agent was unresponsive for too long. You can retry or resume.",timestamp:utcTimestamp()})),await persist(status),console.log(`ExecuteCursor interrupted (infrastructure cancel): execution=${executionId}, events=${turnState.eventCount}`),{kind:"throw",message:"Activity cancelled (heartbeat timeout, not user pause)"};if(turnState.platformStopSignaled){status.phase=ExecutionPhase.EXECUTION_COMPLETED,status.completedAt=utcTimestamp(),status.messages.push(create(AgentMessageSchema,{type:MessageType.MESSAGE_SYSTEM,content:"Execution stopped by the platform.",timestamp:utcTimestamp()})),await persist(status);try{resolution.agent.close()}catch{}return console.log(`ExecuteCursor completed (platform stop): execution=${executionId}`),{kind:"return"}}return{kind:"proceed"}};await finalizeStreamPhase();let primaryTerminal=await resolvePreBoundaryTerminal();if(primaryTerminal.kind==="return")return slimStatus(status);if(primaryTerminal.kind==="throw")throw new import_activity15.CancelledFailure(primaryTerminal.message);let runBoundary=denialSettled=>runTurnBoundary({status,executionId,changeSetId,hitlDir,captureMode,baselineTree,primaryWorkspaceDir,gitWorkspace,turnStartMessageIndex,approvalGrants,globalBypass,seededSubAgents,artifactStorage,mergedPolicies,denialCancelSettled:denialSettled}),enterApprovalPause=async boundary2=>(status.phase=ExecutionPhase.EXECUTION_WAITING_FOR_APPROVAL,await persist(status),console.log(`ExecuteCursor returning WAITING_FOR_APPROVAL: ${boundary2.deniedToolCallCount} gated tool(s), ${boundary2.capturedChangeCount} file card(s) pending`),slimStatus(status)),settleRetryTurn=async retryResultStatus=>{let retryBoundary=retryResultStatus==="cancelled"?void 0:await runBoundary(turnState.firstDenialDetected?turnState.denialCancelSettled:void 0);return status.completedAt=retryBoundary?.waiting?"":utcTimestamp(),retryBoundary},runRecoveryStream=async(freshAgent,retryPrompt)=>{resolution={...resolution,agent:freshAgent,agentId:freshAgent.agentId,isNew:!0},turnState.streamErrorMessage=void 0;let retryRun=await freshAgent.send(retryPrompt,{onDelta:makeCursorTurnOnDelta(onDeltaDeps)});await consumeCursorTurnStream(retryRun,streamDeps),await finalizeStreamPhase();let terminal=await resolvePreBoundaryTerminal();if(terminal.kind!=="proceed")return{proceeded:!1,terminal};let retryResult=await retryRun.wait();console.log(`ExecuteCursor retry run.wait(): execution=${executionId}, retryResult=${JSON.stringify(retryResult)}`);let retryBoundary=await settleRetryTurn(retryResult.status);return{proceeded:!0,retryRun,retryResult,retryBoundary}},boundary=await runBoundary(turnState.firstDenialDetected?turnState.denialCancelSettled:void 0);if(boundary.waiting)return enterApprovalPause(boundary);let result=await run.wait(),sdkResolvedModel=result.model?.id||void 0;switch(console.log(`ExecuteCursor run.wait() result: execution=${executionId}, result=${JSON.stringify(result)}`),sdkResolvedModel&&sdkResolvedModel!==validatedModel&&console.log(`ExecuteCursor model divergence: execution=${executionId}, requested=${validatedModel}, sdkResolved=${sdkResolvedModel}`),status.completedAt=utcTimestamp(),result.status){case"finished":status.phase=ExecutionPhase.EXECUTION_COMPLETED;break;case"error":{let resultAny=result,sdkError=result.result??resultAny.error??resultAny.message??resultAny.reason,sdkErrorStr=sdkError?String(sdkError):void 0,conversationErrorText=await introspectConversation(run,executionId),capturedRejection=getCapturedRejection(executionId);capturedRejection&&clearCapturedRejection(executionId);let classified=synthesizeError({sdkResultFields:sdkErrorStr,streamErrorMessage:turnState.streamErrorMessage,capturedRejection,conversationErrorText,isResumedHandle:resolution.reason==="resumed_successfully",fallbackContext:{model:validatedModel,mode:agentMode,agentId:resolution.agentId},durationMs:result.durationMs,messageCount:status.messages.length});if(console.error(`ExecuteCursor agent error: execution=${executionId}, classified=${JSON.stringify(classified)}, rawResult=${JSON.stringify(result)}`),shouldRetryWithFreshAgent(classified)&&resolution.reason==="resumed_successfully"&&!alreadyRetriedWithFreshAgent){alreadyRetriedWithFreshAgent=!0,console.warn(`ExecuteCursor poisoned-handle recovery: execution=${executionId}, disposing agent ${resolution.agentId} and creating fresh agent`);try{resolution.agent.close()}catch{}let freshAgent=agentMode==="cloud"?await createCloudAgent(createOptions):await createAgent(createOptions),freshPrompt=buildPrompt({resolution:{...resolution,agent:freshAgent,agentId:freshAgent.agentId,isNew:!0,resumed:!1,reason:"created_after_resume_failure",resumeFailureDetail:`poisoned-handle recovery: ${classified.message}`},approvalDecisions,instructions:blueprint.instructions,userMessage:spec.message,skills:skillMetadata,subAgents:blueprint.subAgents,workspaceDirs:blueprint.workspaceDirs,workspaceFileRefs:spec.workspaceFileRefs??[],attachmentPaths,pendingApprovals:adjudicatedApprovals,interactionMode});console.log(`ExecuteCursor retry with fresh agent: execution=${executionId}, newAgentId=${freshAgent.agentId}`);try{blueprint.sessionSpec.harnessStateId=freshAgent.agentId,blueprint.session.metadata&&(blueprint.session.metadata.slug=""),await client2.updateSession(blueprint.session)}catch(updateErr){console.warn("Failed to update session with fresh agentId (non-fatal):",updateErr)}let outcome=await runRecoveryStream(freshAgent,freshPrompt);if(!outcome.proceeded){if(outcome.terminal.kind==="return")return slimStatus(status);throw new import_activity15.CancelledFailure(outcome.terminal.message)}let{retryRun,retryResult,retryBoundary}=outcome;if(retryBoundary?.waiting)return console.log(`ExecuteCursor poisoned-handle recovery paused for review: execution=${executionId}`),enterApprovalPause(retryBoundary);if(retryResult.status==="finished"){status.phase=ExecutionPhase.EXECUTION_COMPLETED,console.log(`ExecuteCursor poisoned-handle recovery SUCCEEDED: execution=${executionId}`);break}if(retryResult.status==="cancelled"){status.phase=ExecutionPhase.EXECUTION_CANCELLED;break}let retryRejection=getCapturedRejection(executionId);retryRejection&&clearCapturedRejection(executionId);let retryConversationErrorText=await introspectConversation(retryRun,executionId),retryClassified=synthesizeError({sdkResultFields:retryResult.result?String(retryResult.result):void 0,streamErrorMessage:turnState.streamErrorMessage,capturedRejection:retryRejection,conversationErrorText:retryConversationErrorText,isResumedHandle:!1,fallbackContext:{model:validatedModel,mode:agentMode,agentId:freshAgent.agentId}});status.phase=ExecutionPhase.EXECUTION_FAILED,status.error=formatClassifiedError(retryClassified),console.error(`ExecuteCursor poisoned-handle recovery FAILED: execution=${executionId}, retryError=${status.error}`);break}if(classified.category==="network"&&classified.retryable&&resolution.reason!=="resumed_successfully"&&!alreadyRetriedWithFreshAgent){alreadyRetriedWithFreshAgent=!0,console.warn(`ExecuteCursor transport-timeout recovery: execution=${executionId}, resetting proxy sessions and retrying with fresh agent`);try{resolution.agent.close()}catch{}closeProxySessions();let freshAgent=agentMode==="cloud"?await createCloudAgent(createOptions):await createAgent(createOptions);try{blueprint.sessionSpec.harnessStateId=freshAgent.agentId,blueprint.session.metadata&&(blueprint.session.metadata.slug=""),await client2.updateSession(blueprint.session)}catch(updateErr){console.warn("Failed to update session with fresh agentId (non-fatal):",updateErr)}let outcome=await runRecoveryStream(freshAgent,effectivePrompt);if(!outcome.proceeded){if(outcome.terminal.kind==="return")return slimStatus(status);throw new import_activity15.CancelledFailure(outcome.terminal.message)}let{retryResult,retryBoundary}=outcome;if(retryBoundary?.waiting)return console.log(`ExecuteCursor transport-timeout recovery paused for review: execution=${executionId}`),enterApprovalPause(retryBoundary);if(retryResult.status==="finished"){status.phase=ExecutionPhase.EXECUTION_COMPLETED;break}status.phase=ExecutionPhase.EXECUTION_FAILED,status.error=`Transport recovery failed: ${formatClassifiedError(classified)}`;break}status.phase=ExecutionPhase.EXECUTION_FAILED,status.error=formatClassifiedError(classified);break}case"cancelled":status.phase=ExecutionPhase.EXECUTION_CANCELLED;break;default:status.phase=ExecutionPhase.EXECUTION_COMPLETED}let structuredOutput,finalText;if(status.phase===ExecutionPhase.EXECUTION_COMPLETED){if(finalText=[...status.messages].reverse().find(m=>m.type===MessageType.MESSAGE_AI)?.content,structuredOutputSchema&&finalText){let{extractJsonFromText:extractJsonFromText2}=await Promise.resolve().then(()=>(init_extract_json(),extract_json_exports));if(structuredOutput=extractJsonFromText2(finalText),structuredOutput!==void 0&&console.log(`ExecuteCursor structured output extracted (text): execution=${executionId}, finalTextLength=${finalText.length}`),structuredOutput===void 0){console.log(`ExecuteCursor text extraction failed, trying LLM extraction: execution=${executionId}, finalTextLength=${finalText.length}`);try{structuredOutput=await extractStructuredOutput(finalText,structuredOutputSchema,config4,requestedModel),structuredOutput!==void 0&&console.log(`ExecuteCursor structured output extracted (LLM): execution=${executionId}`)}catch(extractErr){let errMsg=extractErr instanceof Error?extractErr.message:String(extractErr);console.error(`ExecuteCursor structured output extraction FAILED: execution=${executionId}, requestedModel=${requestedModel}, finalTextLength=${finalText.length}, error=${errMsg}`)}}}if(structuredOutput!==void 0&&(status.structuredOutput=structuredOutput),interactionMode===InteractionMode.PLAN&&finalText&&artifactStorage)try{await publishPlanArtifact({status,executionId,planText:finalText,artifactStorage})}catch(err){console.warn(`ExecuteCursor plan artifact publish skipped (non-fatal): execution=${executionId}, error=${err}`)}}let collapsedTwins=collapseRedundantToolCallTwins(status.messages);collapsedTwins>0&&console.log(`ExecuteCursor collapsed ${collapsedTwins} redundant tool-call twin(s) at terminal finalize (kept in place as hidden SKIPPED rows): execution=${executionId}`),status.phase===ExecutionPhase.EXECUTION_COMPLETED&&writebackCoordinator&&await writebackCoordinator.finalize(),await persist(status),console.log(`ExecuteCursor completed: execution=${executionId}, phase=${ExecutionPhase[status.phase]}, hasStructuredOutput=${structuredOutput!==void 0}`+(status.error?`, error=${status.error}`:""));try{resolution.agent.close()}catch{}let slim=slimStatus(status);return finalText!==void 0&&(slim.final_text=finalText),structuredOutput!==void 0&&(slim.structured=structuredOutput),slim}catch(err){if(periodicHeartbeat?.stop(),err instanceof import_activity15.CancelledFailure)throw workerShutdownDetected?(console.log(`ExecuteCursor cancelled (worker shutdown) for execution ${executionId}`),status.phase=ExecutionPhase.EXECUTION_FAILED,status.error="Execution interrupted: runner worker was shut down. Retry or resume.",status.completedAt=utcTimestamp(),status.messages.push(create(AgentMessageSchema,{type:MessageType.MESSAGE_SYSTEM,content:"Execution interrupted: the runner worker was shut down while the agent was still running. You can retry or resume.",timestamp:utcTimestamp()}))):turnState.pauseDetected?(console.log(`ExecuteCursor cancelled (pause) for execution ${executionId}`),status.phase=ExecutionPhase.EXECUTION_PAUSED,status.messages.push(create(AgentMessageSchema,{type:MessageType.MESSAGE_SYSTEM,content:"Execution paused by user. Use resume to continue.",timestamp:utcTimestamp()}))):(console.log(`ExecuteCursor cancelled (infrastructure) for execution ${executionId}`),status.phase=ExecutionPhase.EXECUTION_FAILED,status.error="Execution interrupted: agent was unresponsive (heartbeat timeout). Retry or resume.",status.completedAt=utcTimestamp(),status.messages.push(create(AgentMessageSchema,{type:MessageType.MESSAGE_SYSTEM,content:"Execution interrupted: the agent was unresponsive for too long. You can retry or resume.",timestamp:utcTimestamp()}))),cancelInProgressSubAgentProtos(status.subAgentExecutions),await persist(status).catch(()=>{}),err;if(turnState.pauseDetected){let errDetail=err instanceof Error?err.message:String(err);throw console.log(`ExecuteCursor error during pause (treating as pause): execution=${executionId}, error=${errDetail}`),status.phase=ExecutionPhase.EXECUTION_PAUSED,status.messages.push(create(AgentMessageSchema,{type:MessageType.MESSAGE_SYSTEM,content:"Execution paused by user. Use resume to continue.",timestamp:utcTimestamp()})),cancelInProgressSubAgentProtos(status.subAgentExecutions),await persist(status).catch(()=>{}),new import_activity15.CancelledFailure("Activity paused by orchestrator (error during pause)")}if(import_activity15.Context.current().cancellationSignal.aborted){let errDetail=err instanceof Error?err.message:String(err);throw console.log(`ExecuteCursor error during infrastructure cancel: execution=${executionId}, error=${errDetail}`),status.phase=ExecutionPhase.EXECUTION_FAILED,status.error=`Execution interrupted: ${errDetail}`,status.completedAt=utcTimestamp(),status.messages.push(create(AgentMessageSchema,{type:MessageType.MESSAGE_SYSTEM,content:"Execution interrupted: the agent was unresponsive for too long. You can retry or resume.",timestamp:utcTimestamp()})),cancelInProgressSubAgentProtos(status.subAgentExecutions),await persist(status).catch(()=>{}),new import_activity15.CancelledFailure("Activity cancelled (infrastructure, not user pause)")}let{CursorSdkError}=await import("@cursor/sdk");if(err instanceof CursorSdkError){let sdkErrorJson=err.toJSON();console.error(`ExecuteCursor SDK error: execution=${executionId}, sdkError=${JSON.stringify(sdkErrorJson)}`);let classified=synthesizeError({sdkError:{code:err.code,status:err.status,message:err.message},sdkResultFields:void 0,streamErrorMessage:void 0,capturedRejection:getCapturedRejection(executionId),isResumedHandle:!1,fallbackContext:errorContext});clearCapturedRejection(executionId),status.phase=ExecutionPhase.EXECUTION_FAILED,status.error=formatClassifiedError(classified),status.completedAt=utcTimestamp(),status.messages.push(create(AgentMessageSchema,{type:MessageType.MESSAGE_SYSTEM,content:"Internal system error occurred. Please contact support if this issue persists.",timestamp:utcTimestamp()}),create(AgentMessageSchema,{type:MessageType.MESSAGE_SYSTEM,content:`Error details: ${status.error}`,timestamp:utcTimestamp()}));try{await persist(status)}catch(persistErr){console.error("Failed to persist error status (best-effort):",persistErr)}return slimStatus(status)}let errMsg=err instanceof Error?err.message:String(err),errType=err instanceof Error?err.constructor.name:"Unknown";console.error(`ExecuteCursor failed: execution=${executionId}, [${errType}] ${errMsg}`),status.phase=ExecutionPhase.EXECUTION_FAILED,status.error=`Execution failed: [${errType}] ${errMsg}`,status.completedAt=utcTimestamp(),status.messages.push(create(AgentMessageSchema,{type:MessageType.MESSAGE_SYSTEM,content:"Internal system error occurred. Please contact support if this issue persists.",timestamp:utcTimestamp()}),create(AgentMessageSchema,{type:MessageType.MESSAGE_SYSTEM,content:`Error details: [${errType}] ${errMsg}`,timestamp:utcTimestamp()}));try{await persist(status)}catch(persistErr){console.error("Failed to persist error status (best-effort):",persistErr)}return slimStatus(status)}finally{if(await finishTurnTelemetry?.(),turnState.stallWatchdog?.stop(),stopDenialWatcher?.(),hitlCleanup)try{await hitlCleanup()}catch(cleanupErr){console.warn(`ExecuteCursor HITL gate teardown failed (non-fatal): execution=${executionId}, error=${cleanupErr instanceof Error?cleanupErr.message:cleanupErr}`)}await releaseWorkspaceLock?.()}}function seedCursorTranscriptFromExecution(status,execution){let persisted=execution.status;if(!persisted||persisted.messages.length===0)return[];for(let message of persisted.messages)status.messages.push(clone(AgentMessageSchema,message));return persisted.subAgentExecutions.map(sub=>clone(SubAgentExecutionSchema,sub))}async function extractStructuredOutput(agentResponse,schema2,config4,primaryModel){let{getEconomyModel:getEconomyModel2}=await Promise.resolve().then(()=>(init_model_registry(),model_registry_exports)),{buildChatModel:buildChatModel2}=await Promise.resolve().then(()=>(init_model_client(),model_client_exports)),extractionModel=await getEconomyModel2(primaryModel),proxyEndpoint=config4.proxyEndpoint??config4.stigmerBackendEndpoint,{model:llm}=await buildChatModel2({modelName:extractionModel,proxyEndpoint,stigmerToken:config4.stigmerToken??void 0,maxTokens:4096}),zodSchema=jsonSchemaToZod(schema2);return await llm.withStructuredOutput(zodSchema).invoke([{role:"system",content:"Extract the structured data from the agent's response. Return only the data that matches the schema."},{role:"user",content:agentResponse}])??null}function buildPrompt(input){let{resolution,approvalDecisions,instructions,userMessage,skills,subAgents,workspaceDirs,workspaceFileRefs,attachmentPaths,interactionMode,buildFromPlan}=input;if(approvalDecisions!==void 0&&approvalDecisions.size>0)return buildReinvocationPrompt(input.pendingApprovals,approvalDecisions,input.appliedToolCallIds);if(resolution.reason==="resumed_successfully"){let prefixes=[formatInteractionModePrefix(interactionMode),formatImplementPlanSection(buildFromPlan,attachmentPaths)].filter(p=>p!==void 0);return prefixes.length>0?[...prefixes,userMessage].join(`
|
|
2414
2416
|
|
|
2415
|
-
`):userMessage}return buildEnhancedPrompt({instructions,userMessage,skills,subAgents,workspaceDirs,workspaceFileRefs,attachmentPaths,interactionMode,buildFromPlan})}async function introspectConversation(run,executionId){try{if(!run.supports("conversation")){console.log(`ExecuteCursor conversation introspection unsupported: execution=${executionId}, reason=${run.unsupportedReason("conversation")??"n/a"}`);return}let turns=await run.conversation(),raw=JSON.stringify(turns),bounded=raw.length>8e3?`${raw.slice(0,8e3)}\u2026(truncated ${raw.length} chars)`:raw;return console.error(`ExecuteCursor conversation introspection: execution=${executionId}, turns=${turns.length}, raw=${bounded}`),extractConversationErrorText(turns)}catch(introspectErr){console.warn(`ExecuteCursor conversation introspection failed (non-fatal): execution=${executionId}, error=${introspectErr instanceof Error?introspectErr.message:String(introspectErr)}`);return}}function extractConversationErrorText(turns){if(!turns||turns.length===0)return;let collected=[],visit=(node,depth)=>{if(node==null||depth>6||typeof node!="object")return;if(Array.isArray(node)){for(let item of node)visit(item,depth+1);return}let obj=node;obj.status==="error"&&obj.error!=null&&collected.push(typeof obj.error=="string"?obj.error:JSON.stringify(obj.error));for(let[key,value]of Object.entries(obj))(key==="text"||key==="message"||key==="reason")&&typeof value=="string"&&value.trim().length>0?collected.push(value.trim()):typeof value=="object"&&value!=null&&visit(value,depth+1)};if(visit(turns[turns.length-1],0),collected.length===0)return;let joined=[...new Set(collected)].join(" | ");return joined.length>600?`${joined.slice(0,600)}\u2026`:joined}var import_activity15,import_node_events,init_execute_cursor=__esm({"dist/activities/execute-cursor/index.js"(){"use strict";import_activity15=__toESM(require_lib4(),1);init_esm4();init_api_pb3();init_message_pb();init_subagent_pb();init_enum_pb();init_stigmer_client();init_session_lifecycle();init_enum_pb4();init_cursor_mode();init_message_translator();init_status2();init_tool_row();init_stall_watchdog();init_artifact_storage();init_plan_artifact();init_delta_enricher();init_todo_tracker();init_streaming_scheduler();init_cursor_event_recorder();init_mcp_resolver();init_approval_policy2();init_approval_policy();init_connect_backfill2();init_env_resolver();init_blueprint_resolver();init_subagent_config();init_skill_resolver();init_stigmer_link();init_attachment_resolver();init_prompt_builder();init_workspace_setup();init_platform_dir();init_workspace_lock();init_local_backend();init_approval_state();init_exact_apply();init_git_substrate();init_capture_flow();init_turn_boundary();init_turn_stream();init_progress();init_approval_fingerprint();init_fingerprint_secret();init_workspace_provision();init_fetch_interceptor();init_http2_interceptor();init_model_pricing();init_usage_accumulator();init_usage_pb();init_idle_watchdog();init_activity_input();init_rejection_capture();init_error_classifier();init_session_lifecycle();import_node_events=require("node:events");init_heartbeat();init_runner_manager();init_json_schema_to_zod()}});var import_node_crypto22=require("node:crypto"),import_node_fs10=require("node:fs"),import_node_path36=require("node:path"),import_node_readline=require("node:readline");init_config();init_otel();var import_node_fs9=require("node:fs"),import_node_path35=require("node:path"),import_node_os6=require("node:os");init_config();init_bootstrap();async function createStigmerRunner(options){validateOptions(options);let baseConfig=mapOptionsToConfig(options),{installFetchInterceptor:installFetchInterceptor2,getExecutionContext:getExecutionContext2}=await Promise.resolve().then(()=>(init_fetch_interceptor(),fetch_interceptor_exports));installFetchInterceptor2({proxyEndpoint:baseConfig.proxyEndpoint??void 0,stigmerToken:baseConfig.stigmerToken??void 0});let{installHttp2Interceptor:installHttp2Interceptor2,assertHttp2ConnectPatched:assertHttp2ConnectPatched2}=await Promise.resolve().then(()=>(init_http2_interceptor(),http2_interceptor_exports));installHttp2Interceptor2({proxyEndpoint:baseConfig.proxyEndpoint??void 0,stigmerToken:baseConfig.stigmerToken??void 0}),await assertHttp2ConnectPatched2();let coordinates=await resolveRunnerBootstrap({explicitAddress:options.temporalAddress,explicitNamespace:options.temporalNamespace,token:options.stigmerToken,stigmerEndpoint:baseConfig.stigmerBackendEndpoint}),config4={...baseConfig,temporalAddress:coordinates.temporalAddress,temporalNamespace:coordinates.temporalNamespace},{setExecutionContextRef:setExecutionContextRef2}=await Promise.resolve().then(()=>(init_rejection_capture(),rejection_capture_exports));setExecutionContextRef2(getExecutionContext2());let activities=await createAllActivities2(config4);console.log(`[runner] Registered activities: ${Object.keys(activities).join(", ")}`),console.log(`[runner] Task queue: ${config4.taskQueue} | Mode: ${config4.mode} | Max concurrency: ${config4.maxConcurrentActivities}`);let payloadCodec=await createPayloadCodec2(config4),{startWorker:startWorker2}=await Promise.resolve().then(()=>(init_worker(),worker_exports)),worker=await startWorker2({config:config4,activities,payloadCodec});return{async start(){console.log("Worker ready, polling for tasks..."),await worker.run(),console.log("Worker stopped")},shutdown(){worker.shutdown()}}}function validateOptions(options){if(!options.taskQueue)throw new Error("StigmerRunnerOptions.taskQueue is required \u2014 specify the Temporal task queue to poll");if(!options.stigmerEndpoint)throw new Error("StigmerRunnerOptions.stigmerEndpoint is required \u2014 specify the Stigmer server endpoint (e.g. 'http://localhost:7234')")}function mapOptionsToConfig(options){let proxyActive=!!options.proxyEndpoint,mode=options.executionMode??(proxyActive?"cloud":"local");return{taskQueue:options.taskQueue,temporalAddress:options.temporalAddress??"",temporalNamespace:options.temporalNamespace??"default",stigmerBackendEndpoint:normalizeEndpoint3(options.stigmerEndpoint),stigmerToken:options.stigmerToken??null,cursorApiKey:proxyActive?options.cursorApiKey??"proxy-managed":options.cursorApiKey??"",workspaceRootDir:options.workspaceRootDir??resolveDefaultWorkspaceDir2(),mode,proxyEndpoint:options.proxyEndpoint??null,maxConcurrentActivities:options.maxConcurrentActivities??5,idleTimeoutSeconds:null,cloudModeEnabled:options.cloudModeEnabled??!1,checkpointerType:options.checkpointerType??(proxyActive?"http":"memory"),checkpointerProxyEndpoint:options.checkpointerProxyEndpoint??options.proxyEndpoint??null,primaryModel:options.primaryModel??"gpt-4.1",cursorStreamStallTimeoutMs:options.cursorStreamStallTimeoutMs??DEFAULT_CURSOR_STREAM_STALL_TIMEOUT_MS,workspaceLockTimeoutMs:options.workspaceLockTimeoutMs??DEFAULT_WORKSPACE_LOCK_TIMEOUT_MS}}async function createAllActivities2(config4){let[{createCursorActivities:createCursorActivities2},{createDeepAgentActivities:createDeepAgentActivities2},{createEnsureThreadActivities:createEnsureThreadActivities2},{createClassifyToolApprovalsActivities:createClassifyToolApprovalsActivities2},{createDiscoverMcpServerActivities:createDiscoverMcpServerActivities2},{createEvaluateExpressionsActivities:createEvaluateExpressionsActivities2},{createCallHttpActivities:createCallHttpActivities2},{createCallGrpcActivities:createCallGrpcActivities2},{createCallFunctionActivities:createCallFunctionActivities2},{createCallLlmActivities:createCallLlmActivities2},{createCallAgentActivities:createCallAgentActivities2},{createCallAgentStatusActivities:createCallAgentStatusActivities2},{createRunCommandActivities:createRunCommandActivities2},{createHydrateWorkflowActivities:createHydrateWorkflowActivities2},{createWorkflowEventActivities:createWorkflowEventActivities2},{createPromoteTaskOutputActivities:createPromoteTaskOutputActivities2}]=await Promise.all([Promise.resolve().then(()=>(init_execute_cursor(),execute_cursor_exports)),Promise.resolve().then(()=>(init_execute_deep_agent(),execute_deep_agent_exports)),Promise.resolve().then(()=>(init_ensure_thread(),ensure_thread_exports)),Promise.resolve().then(()=>(init_classify_tool_approvals(),classify_tool_approvals_exports)),Promise.resolve().then(()=>(init_discover_mcp_server(),discover_mcp_server_exports)),Promise.resolve().then(()=>(init_evaluate_expressions(),evaluate_expressions_exports)),Promise.resolve().then(()=>(init_call_http(),call_http_exports)),Promise.resolve().then(()=>(init_call_grpc(),call_grpc_exports)),Promise.resolve().then(()=>(init_call_function(),call_function_exports)),Promise.resolve().then(()=>(init_call_llm(),call_llm_exports)),Promise.resolve().then(()=>(init_call_agent(),call_agent_exports)),Promise.resolve().then(()=>(init_call_agent_status(),call_agent_status_exports)),Promise.resolve().then(()=>(init_run_command(),run_command_exports)),Promise.resolve().then(()=>(init_hydrate_workflow_execution(),hydrate_workflow_execution_exports)),Promise.resolve().then(()=>(init_workflow_event_activities(),workflow_event_activities_exports)),Promise.resolve().then(()=>(init_promote_task_output(),promote_task_output_exports))]);return{...createCursorActivities2(config4),...createDeepAgentActivities2(config4),...createEnsureThreadActivities2(),...createClassifyToolApprovalsActivities2(config4),...createDiscoverMcpServerActivities2(config4),...createEvaluateExpressionsActivities2(),...createCallHttpActivities2(),...createCallGrpcActivities2(),...createCallFunctionActivities2(),...createCallLlmActivities2(),...createCallAgentActivities2(),...createCallAgentStatusActivities2(),...createRunCommandActivities2(),...createHydrateWorkflowActivities2(config4),...createWorkflowEventActivities2(),...createPromoteTaskOutputActivities2()}}async function createPayloadCodec2(config4){let{loadClaimcheckConfig:loadClaimcheckConfig2,ClaimcheckPayloadCodec:ClaimcheckPayloadCodec2}=await Promise.resolve().then(()=>(init_claimcheck(),claimcheck_exports)),claimcheckConfig=loadClaimcheckConfig2();if(!claimcheckConfig.enabled)return;let{loadArtifactStorageConfig:loadArtifactStorageConfig2,createArtifactStorage:createArtifactStorage2}=await Promise.resolve().then(()=>(init_artifact_storage(),artifact_storage_exports)),storageConfig=loadArtifactStorageConfig2(config4),storage=createArtifactStorage2(storageConfig);return console.log(`[runner] Claimcheck enabled (threshold=${claimcheckConfig.thresholdBytes}B, compression=${claimcheckConfig.compressionEnabled}, storage=${storageConfig.type})`),new ClaimcheckPayloadCodec2(storage,claimcheckConfig)}function resolveDefaultWorkspaceDir2(){try{let dir=(0,import_node_path35.join)((0,import_node_os6.homedir)(),".stigmer","workspaces","runner");return(0,import_node_fs9.mkdirSync)(dir,{recursive:!0}),dir}catch{let dir=(0,import_node_path35.join)((0,import_node_os6.tmpdir)(),"stigmer-runner-workspace");return(0,import_node_fs9.mkdirSync)(dir,{recursive:!0}),dir}}function normalizeEndpoint3(endpoint){return endpoint.startsWith("http://")||endpoint.startsWith("https://")?endpoint:endpoint.endsWith(":443")?`https://${endpoint}`:`http://${endpoint}`}init_runner_manager();function buildReadyMessage(){return{type:"ready",protocolVersion:1}}init_rejection_capture();var BROKEN_PIPE_CODES=new Set(["EPIPE","ERR_STREAM_DESTROYED","ERR_STREAM_WRITE_AFTER_END"]);function isBrokenPipeError(err){let code=err?.code;return typeof code=="string"&&BROKEN_PIPE_CODES.has(code)}function guardStream(stream,onUnexpectedError){let detached=!1;return stream.on("error",err=>{let wasAttached=!detached;detached=!0,wasAttached&&!isBrokenPipeError(err)&&onUnexpectedError?.(err)}),chunk=>{if(detached)return!1;try{return stream.write(chunk)}catch{return detached=!0,!1}}}var installed=null;function installProcessPipeGuards(){if(installed)return installed;let writeStderr2=guardStream(process.stderr);return installed={writeStdout:guardStream(process.stdout,err=>{writeStderr2(`[pipe-safety] stdout (IPC) channel error, detaching: ${err.stack??err}
|
|
2417
|
+
`):userMessage}return buildEnhancedPrompt({instructions,userMessage,skills,subAgents,workspaceDirs,workspaceFileRefs,attachmentPaths,interactionMode,buildFromPlan})}async function introspectConversation(run,executionId){try{if(!run.supports("conversation")){console.log(`ExecuteCursor conversation introspection unsupported: execution=${executionId}, reason=${run.unsupportedReason("conversation")??"n/a"}`);return}let turns=await run.conversation(),raw=JSON.stringify(turns),bounded=raw.length>8e3?`${raw.slice(0,8e3)}\u2026(truncated ${raw.length} chars)`:raw;return console.error(`ExecuteCursor conversation introspection: execution=${executionId}, turns=${turns.length}, raw=${bounded}`),extractConversationErrorText(turns)}catch(introspectErr){console.warn(`ExecuteCursor conversation introspection failed (non-fatal): execution=${executionId}, error=${introspectErr instanceof Error?introspectErr.message:String(introspectErr)}`);return}}function extractConversationErrorText(turns){if(!turns||turns.length===0)return;let collected=[],visit=(node,depth)=>{if(node==null||depth>6||typeof node!="object")return;if(Array.isArray(node)){for(let item of node)visit(item,depth+1);return}let obj=node;obj.status==="error"&&obj.error!=null&&collected.push(typeof obj.error=="string"?obj.error:JSON.stringify(obj.error));for(let[key,value]of Object.entries(obj))(key==="text"||key==="message"||key==="reason")&&typeof value=="string"&&value.trim().length>0?collected.push(value.trim()):typeof value=="object"&&value!=null&&visit(value,depth+1)};if(visit(turns[turns.length-1],0),collected.length===0)return;let joined=[...new Set(collected)].join(" | ");return joined.length>600?`${joined.slice(0,600)}\u2026`:joined}var import_activity15,import_node_events,init_execute_cursor=__esm({"dist/activities/execute-cursor/index.js"(){"use strict";import_activity15=__toESM(require_lib4(),1);init_esm4();init_api_pb3();init_message_pb();init_subagent_pb();init_enum_pb();init_stigmer_client();init_session_lifecycle();init_enum_pb4();init_cursor_mode();init_message_translator();init_status2();init_tool_row();init_stall_watchdog();init_artifact_storage();init_plan_artifact();init_delta_enricher();init_todo_tracker();init_streaming_scheduler();init_cursor_event_recorder();init_mcp_resolver();init_approval_policy2();init_approval_policy();init_connect_backfill2();init_env_resolver();init_blueprint_resolver();init_subagent_config();init_skill_resolver();init_stigmer_link();init_attachment_resolver();init_prompt_builder();init_workspace_setup();init_platform_dir();init_workspace_lock();init_local_backend();init_approval_state();init_exact_apply();init_git_substrate();init_capture_flow();init_turn_boundary();init_turn_stream();init_progress();init_approval_fingerprint();init_fingerprint_secret();init_workspace_provision();init_writeback_coordinator();init_execution_status_writer();init_fetch_interceptor();init_http2_interceptor();init_model_pricing();init_usage_accumulator();init_usage_pb();init_idle_watchdog();init_activity_input();init_rejection_capture();init_error_classifier();init_session_lifecycle();import_node_events=require("node:events");init_heartbeat();init_runner_manager();init_json_schema_to_zod()}});var import_node_crypto22=require("node:crypto"),import_node_fs10=require("node:fs"),import_node_path36=require("node:path"),import_node_readline=require("node:readline");init_config();init_otel();var import_node_fs9=require("node:fs"),import_node_path35=require("node:path"),import_node_os6=require("node:os");init_config();init_bootstrap();async function createStigmerRunner(options){validateOptions(options);let baseConfig=mapOptionsToConfig(options),{installFetchInterceptor:installFetchInterceptor2,getExecutionContext:getExecutionContext2}=await Promise.resolve().then(()=>(init_fetch_interceptor(),fetch_interceptor_exports));installFetchInterceptor2({proxyEndpoint:baseConfig.proxyEndpoint??void 0,stigmerToken:baseConfig.stigmerToken??void 0});let{installHttp2Interceptor:installHttp2Interceptor2,assertHttp2ConnectPatched:assertHttp2ConnectPatched2}=await Promise.resolve().then(()=>(init_http2_interceptor(),http2_interceptor_exports));installHttp2Interceptor2({proxyEndpoint:baseConfig.proxyEndpoint??void 0,stigmerToken:baseConfig.stigmerToken??void 0}),await assertHttp2ConnectPatched2();let coordinates=await resolveRunnerBootstrap({explicitAddress:options.temporalAddress,explicitNamespace:options.temporalNamespace,token:options.stigmerToken,stigmerEndpoint:baseConfig.stigmerBackendEndpoint}),config4={...baseConfig,temporalAddress:coordinates.temporalAddress,temporalNamespace:coordinates.temporalNamespace},{setExecutionContextRef:setExecutionContextRef2}=await Promise.resolve().then(()=>(init_rejection_capture(),rejection_capture_exports));setExecutionContextRef2(getExecutionContext2());let activities=await createAllActivities2(config4);console.log(`[runner] Registered activities: ${Object.keys(activities).join(", ")}`),console.log(`[runner] Task queue: ${config4.taskQueue} | Mode: ${config4.mode} | Max concurrency: ${config4.maxConcurrentActivities}`);let payloadCodec=await createPayloadCodec2(config4),{startWorker:startWorker2}=await Promise.resolve().then(()=>(init_worker(),worker_exports)),worker=await startWorker2({config:config4,activities,payloadCodec});return{async start(){console.log("Worker ready, polling for tasks..."),await worker.run(),console.log("Worker stopped")},shutdown(){worker.shutdown()}}}function validateOptions(options){if(!options.taskQueue)throw new Error("StigmerRunnerOptions.taskQueue is required \u2014 specify the Temporal task queue to poll");if(!options.stigmerEndpoint)throw new Error("StigmerRunnerOptions.stigmerEndpoint is required \u2014 specify the Stigmer server endpoint (e.g. 'http://localhost:7234')")}function mapOptionsToConfig(options){let proxyActive=!!options.proxyEndpoint,mode=options.executionMode??(proxyActive?"cloud":"local");return{taskQueue:options.taskQueue,temporalAddress:options.temporalAddress??"",temporalNamespace:options.temporalNamespace??"default",stigmerBackendEndpoint:normalizeEndpoint3(options.stigmerEndpoint),stigmerToken:options.stigmerToken??null,cursorApiKey:proxyActive?options.cursorApiKey??"proxy-managed":options.cursorApiKey??"",workspaceRootDir:options.workspaceRootDir??resolveDefaultWorkspaceDir2(),mode,proxyEndpoint:options.proxyEndpoint??null,maxConcurrentActivities:options.maxConcurrentActivities??5,idleTimeoutSeconds:null,cloudModeEnabled:options.cloudModeEnabled??!1,checkpointerType:options.checkpointerType??(proxyActive?"http":"memory"),checkpointerProxyEndpoint:options.checkpointerProxyEndpoint??options.proxyEndpoint??null,primaryModel:options.primaryModel??"gpt-4.1",cursorStreamStallTimeoutMs:options.cursorStreamStallTimeoutMs??DEFAULT_CURSOR_STREAM_STALL_TIMEOUT_MS,workspaceLockTimeoutMs:options.workspaceLockTimeoutMs??DEFAULT_WORKSPACE_LOCK_TIMEOUT_MS}}async function createAllActivities2(config4){let[{createCursorActivities:createCursorActivities2},{createDeepAgentActivities:createDeepAgentActivities2},{createEnsureThreadActivities:createEnsureThreadActivities2},{createClassifyToolApprovalsActivities:createClassifyToolApprovalsActivities2},{createDiscoverMcpServerActivities:createDiscoverMcpServerActivities2},{createEvaluateExpressionsActivities:createEvaluateExpressionsActivities2},{createCallHttpActivities:createCallHttpActivities2},{createCallGrpcActivities:createCallGrpcActivities2},{createCallFunctionActivities:createCallFunctionActivities2},{createCallLlmActivities:createCallLlmActivities2},{createCallAgentActivities:createCallAgentActivities2},{createCallAgentStatusActivities:createCallAgentStatusActivities2},{createRunCommandActivities:createRunCommandActivities2},{createHydrateWorkflowActivities:createHydrateWorkflowActivities2},{createWorkflowEventActivities:createWorkflowEventActivities2},{createPromoteTaskOutputActivities:createPromoteTaskOutputActivities2}]=await Promise.all([Promise.resolve().then(()=>(init_execute_cursor(),execute_cursor_exports)),Promise.resolve().then(()=>(init_execute_deep_agent(),execute_deep_agent_exports)),Promise.resolve().then(()=>(init_ensure_thread(),ensure_thread_exports)),Promise.resolve().then(()=>(init_classify_tool_approvals(),classify_tool_approvals_exports)),Promise.resolve().then(()=>(init_discover_mcp_server(),discover_mcp_server_exports)),Promise.resolve().then(()=>(init_evaluate_expressions(),evaluate_expressions_exports)),Promise.resolve().then(()=>(init_call_http(),call_http_exports)),Promise.resolve().then(()=>(init_call_grpc(),call_grpc_exports)),Promise.resolve().then(()=>(init_call_function(),call_function_exports)),Promise.resolve().then(()=>(init_call_llm(),call_llm_exports)),Promise.resolve().then(()=>(init_call_agent(),call_agent_exports)),Promise.resolve().then(()=>(init_call_agent_status(),call_agent_status_exports)),Promise.resolve().then(()=>(init_run_command(),run_command_exports)),Promise.resolve().then(()=>(init_hydrate_workflow_execution(),hydrate_workflow_execution_exports)),Promise.resolve().then(()=>(init_workflow_event_activities(),workflow_event_activities_exports)),Promise.resolve().then(()=>(init_promote_task_output(),promote_task_output_exports))]);return{...createCursorActivities2(config4),...createDeepAgentActivities2(config4),...createEnsureThreadActivities2(),...createClassifyToolApprovalsActivities2(config4),...createDiscoverMcpServerActivities2(config4),...createEvaluateExpressionsActivities2(),...createCallHttpActivities2(),...createCallGrpcActivities2(),...createCallFunctionActivities2(),...createCallLlmActivities2(),...createCallAgentActivities2(),...createCallAgentStatusActivities2(),...createRunCommandActivities2(),...createHydrateWorkflowActivities2(config4),...createWorkflowEventActivities2(),...createPromoteTaskOutputActivities2()}}async function createPayloadCodec2(config4){let{loadClaimcheckConfig:loadClaimcheckConfig2,ClaimcheckPayloadCodec:ClaimcheckPayloadCodec2}=await Promise.resolve().then(()=>(init_claimcheck(),claimcheck_exports)),claimcheckConfig=loadClaimcheckConfig2();if(!claimcheckConfig.enabled)return;let{loadArtifactStorageConfig:loadArtifactStorageConfig2,createArtifactStorage:createArtifactStorage2}=await Promise.resolve().then(()=>(init_artifact_storage(),artifact_storage_exports)),storageConfig=loadArtifactStorageConfig2(config4),storage=createArtifactStorage2(storageConfig);return console.log(`[runner] Claimcheck enabled (threshold=${claimcheckConfig.thresholdBytes}B, compression=${claimcheckConfig.compressionEnabled}, storage=${storageConfig.type})`),new ClaimcheckPayloadCodec2(storage,claimcheckConfig)}function resolveDefaultWorkspaceDir2(){try{let dir=(0,import_node_path35.join)((0,import_node_os6.homedir)(),".stigmer","workspaces","runner");return(0,import_node_fs9.mkdirSync)(dir,{recursive:!0}),dir}catch{let dir=(0,import_node_path35.join)((0,import_node_os6.tmpdir)(),"stigmer-runner-workspace");return(0,import_node_fs9.mkdirSync)(dir,{recursive:!0}),dir}}function normalizeEndpoint3(endpoint){return endpoint.startsWith("http://")||endpoint.startsWith("https://")?endpoint:endpoint.endsWith(":443")?`https://${endpoint}`:`http://${endpoint}`}init_runner_manager();function buildReadyMessage(){return{type:"ready",protocolVersion:1}}init_rejection_capture();var BROKEN_PIPE_CODES=new Set(["EPIPE","ERR_STREAM_DESTROYED","ERR_STREAM_WRITE_AFTER_END"]);function isBrokenPipeError(err){let code=err?.code;return typeof code=="string"&&BROKEN_PIPE_CODES.has(code)}function guardStream(stream,onUnexpectedError){let detached=!1;return stream.on("error",err=>{let wasAttached=!detached;detached=!0,wasAttached&&!isBrokenPipeError(err)&&onUnexpectedError?.(err)}),chunk=>{if(detached)return!1;try{return stream.write(chunk)}catch{return detached=!0,!1}}}var installed=null;function installProcessPipeGuards(){if(installed)return installed;let writeStderr2=guardStream(process.stderr);return installed={writeStdout:guardStream(process.stdout,err=>{writeStderr2(`[pipe-safety] stdout (IPC) channel error, detaching: ${err.stack??err}
|
|
2416
2418
|
`)}),writeStderr:writeStderr2},installed}function reportFatal(write,label,err){try{let detail=err instanceof Error?err.stack??err.message:String(err);write(`${label} ${detail}
|
|
2417
2419
|
`)}catch{}}var{writeStdout,writeStderr}=installProcessPipeGuards();process.on("unhandledRejection",reason=>{handleUnhandledRejection(reason)});process.on("uncaughtException",err=>{reportFatal(writeStderr,"Uncaught exception in runner:",err)});function sendIpc(msg){writeStdout(JSON.stringify(msg)+`
|
|
2418
2420
|
`)}async function runManagerMode(config4){let originalLog=console.log;console.log=(...args)=>{writeStderr(args.map(String).join(" ")+`
|