@clinebot/core 0.0.25 → 0.0.26

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/index.js +2 -2
  2. package/package.json +5 -5
package/dist/index.js CHANGED
@@ -706,7 +706,7 @@ Searched ${$} files.`;let E=[`Found ${B.length} result${B.length===1?"":"s"} for
706
706
  FOREIGN KEY (session_id) REFERENCES sessions(session_id) ON DELETE SET NULL
707
707
  );`,`CREATE INDEX IF NOT EXISTS idx_schedule_executions_schedule
708
708
  ON schedule_executions(schedule_id, triggered_at DESC);`,`CREATE INDEX IF NOT EXISTS idx_schedules_next_run
709
- ON schedules(enabled, next_run_at);`],NX1=[{table:"sessions",column:"workspace_root",sql:"ALTER TABLE sessions ADD COLUMN workspace_root TEXT;"},{table:"sessions",column:"parent_session_id",sql:"ALTER TABLE sessions ADD COLUMN parent_session_id TEXT;"},{table:"sessions",column:"parent_agent_id",sql:"ALTER TABLE sessions ADD COLUMN parent_agent_id TEXT;"},{table:"sessions",column:"agent_id",sql:"ALTER TABLE sessions ADD COLUMN agent_id TEXT;"},{table:"sessions",column:"conversation_id",sql:"ALTER TABLE sessions ADD COLUMN conversation_id TEXT;"},{table:"sessions",column:"is_subagent",sql:"ALTER TABLE sessions ADD COLUMN is_subagent INTEGER NOT NULL DEFAULT 0;"},{table:"sessions",column:"messages_path",sql:"ALTER TABLE sessions ADD COLUMN messages_path TEXT;"},{table:"sessions",column:"metadata_json",sql:"ALTER TABLE sessions ADD COLUMN metadata_json TEXT;"},{table:"schedules",column:"claim_token",sql:"ALTER TABLE schedules ADD COLUMN claim_token TEXT;"},{table:"schedules",column:"claim_started_at",sql:"ALTER TABLE schedules ADD COLUMN claim_started_at TEXT;"},{table:"schedules",column:"claim_until_at",sql:"ALTER TABLE schedules ADD COLUMN claim_until_at TEXT;"}];function AX1(X,Y){return new Set(X.prepare(`PRAGMA table_info(${Y});`).all().map((W)=>W.name))}function LK(X,Y={}){X.exec("PRAGMA journal_mode = WAL;"),X.exec("PRAGMA busy_timeout = 5000;");for(let F of UX1)X.exec(F);if(!Y.includeLegacyMigrations)return;let W=new Map,z=(F)=>{let Q=W.get(F);if(!Q)Q=AX1(X,F),W.set(F,Q);return Q};for(let F of NX1)if(!z(F.table).has(F.column)){if(X.exec(F.sql),F.column==="workspace_root")X.exec("UPDATE sessions SET workspace_root = cwd WHERE workspace_root IS NULL OR workspace_root = '';")}}w6();var xA=N9(iQ(),1);import{randomUUID as ZJ0}from"node:crypto";import{randomUUID as xX1}from"node:crypto";import{randomUUID as QJ0}from"node:crypto";function WJ0(X){let Y=eQ0(CX1(X)),W=new Set([i7(Y,"proto","rpc.proto"),i7(Y,"..","proto","rpc.proto"),i7(Y,"..","src","proto","rpc.proto"),i7(Y,"..","..","src","proto","rpc.proto"),i7(process.cwd(),"src","proto","rpc.proto"),i7(process.cwd(),"packages","rpc","src","proto","rpc.proto")]),z=process.cwd();while(!0){W.add(i7(z,"packages","rpc","src","proto","rpc.proto"));let F=eQ0(z);if(F===z)break;z=F}for(let F of W)if(EX1(F))return F;throw Error("Unable to resolve rpc.proto path")}var RX1="cline.rpc.v1",GJ0="ClineGateway";function MX1(){return WJ0(import.meta.url)}function LX1(){let X=JJ0.loadSync(MX1(),{keepCase:!1,longs:String,enums:String,defaults:!0,oneofs:!0}),Y=hY.loadPackageDefinition(X).cline?.rpc?.v1?.ClineGateway?.service;if(!Y)throw Error(`Unable to load ${RX1}.${GJ0} from proto`);return Y}function PX1(X){return new(hY.makeGenericClientConstructor(LX1(),GJ0))(X,hY.credentials.createInsecure())}function PK(X){if(X===null||X===void 0)return{nullValue:"NULL_VALUE"};if(typeof X==="string")return{stringValue:X};if(typeof X==="number")return{numberValue:Number.isFinite(X)?X:0};if(typeof X==="boolean")return{boolValue:X};if(Array.isArray(X))return{listValue:{values:X.map((Y)=>PK(Y))}};if(typeof X==="object"){let Y={fields:{}};for(let[W,z]of Object.entries(X))Y.fields??={},Y.fields[W]=PK(z);return{structValue:Y}}return{stringValue:String(X)}}function wK(X){if(!X)return;if(X.nullValue!==void 0)return null;if(X.stringValue!==void 0)return X.stringValue;if(X.numberValue!==void 0)return X.numberValue;if(X.boolValue!==void 0)return X.boolValue;if(X.listValue)return(X.listValue.values??[]).map((Y)=>wK(Y));if(X.structValue){let Y={};for(let[W,z]of Object.entries(X.structValue.fields??{}))Y[W]=wK(z);return Y}return}function r9(X){let Y={};for(let[W,z]of Object.entries(X??{}))Y[W]=PK(z);return{fields:Y}}function O9(X){if(!X?.fields)return;let Y={};for(let[W,z]of Object.entries(X.fields))Y[W]=wK(z);return Y}function a7(X){return PK(X)}function r7(X){return wK(X??void 0)}function wX1(X){return{sessionId:X.sessionId,source:X.source,pid:X.pid,startedAt:X.startedAt,endedAt:X.endedAt??"",exitCode:X.exitCode??0,status:X.status,statusLock:X.statusLock,interactive:X.interactive,provider:X.provider,model:X.model,cwd:X.cwd,workspaceRoot:X.workspaceRoot,teamName:X.teamName??"",enableTools:X.enableTools,enableSpawn:X.enableSpawn,enableTeams:X.enableTeams,parentSessionId:X.parentSessionId??"",parentAgentId:X.parentAgentId??"",agentId:X.agentId??"",conversationId:X.conversationId??"",isSubagent:X.isSubagent,prompt:X.prompt??"",transcriptPath:X.transcriptPath,hookPath:X.hookPath,messagesPath:X.messagesPath??"",updatedAt:X.updatedAt,metadata:r9(X.metadata)}}function XJ0(X){return{sessionId:X.sessionId??"",source:X.source??"",pid:Number(X.pid??0),startedAt:X.startedAt??"",endedAt:X.endedAt?X.endedAt:null,exitCode:typeof X.exitCode==="number"?X.exitCode:null,status:X.status??"running",statusLock:Number(X.statusLock??0),interactive:X.interactive===!0,provider:X.provider??"",model:X.model??"",cwd:X.cwd??"",workspaceRoot:X.workspaceRoot??"",teamName:X.teamName||void 0,enableTools:X.enableTools===!0,enableSpawn:X.enableSpawn===!0,enableTeams:X.enableTeams===!0,parentSessionId:X.parentSessionId||void 0,parentAgentId:X.parentAgentId||void 0,agentId:X.agentId||void 0,conversationId:X.conversationId||void 0,isSubagent:X.isSubagent===!0,prompt:X.prompt||void 0,metadata:O9(X.metadata),transcriptPath:X.transcriptPath??"",hookPath:X.hookPath??"",messagesPath:X.messagesPath||void 0,updatedAt:X.updatedAt??""}}function SX1(X){let Y=X?.trim();if(!Y)return;try{let W=JSON.parse(Y);if(!Array.isArray(W))return;let z=W.map((F)=>typeof F==="string"?F.trim():"").filter((F)=>F.length>0);return z.length>0?z:void 0}catch{return}}function kY(X){return{scheduleId:X.scheduleId??"",name:X.name??"",cronPattern:X.cronPattern??"",prompt:X.prompt??"",provider:X.provider??"",model:X.model??"",mode:X.mode==="plan"?"plan":"act",workspaceRoot:X.workspaceRoot?.trim()||void 0,cwd:X.cwd?.trim()||void 0,systemPrompt:X.systemPrompt?.trim()||void 0,maxIterations:X.hasMaxIterations?X.maxIterations:void 0,timeoutSeconds:X.hasTimeoutSeconds?X.timeoutSeconds:void 0,maxParallel:typeof X.maxParallel==="number"&&X.maxParallel>0?X.maxParallel:1,enabled:X.enabled===!0,createdAt:X.createdAt??"",updatedAt:X.updatedAt??"",lastRunAt:X.lastRunAt?.trim()||void 0,nextRunAt:X.nextRunAt?.trim()||void 0,createdBy:X.createdBy?.trim()||void 0,tags:SX1(X.tagsJson??void 0),metadata:O9(X.metadata)}}function jA(X){return{executionId:X.executionId??"",scheduleId:X.scheduleId??"",sessionId:X.sessionId?.trim()||void 0,triggeredAt:X.triggeredAt??"",startedAt:X.startedAt?.trim()||void 0,endedAt:X.endedAt?.trim()||void 0,status:X.status==="pending"||X.status==="running"||X.status==="success"||X.status==="failed"||X.status==="timeout"||X.status==="aborted"?X.status:"failed",exitCode:X.hasExitCode?X.exitCode:void 0,errorMessage:X.errorMessage?.trim()||void 0,iterations:X.hasIterations?X.iterations:void 0,tokensUsed:X.hasTokensUsed?X.tokensUsed:void 0,costUsd:X.hasCostUsd?X.costUsd:void 0}}class aQ{client;constructor(X){this.client=PX1(X.address)}close(){this.client.close()}async upsertSession(X){await this.unary((Y)=>{let W={session:wX1(X)};this.client.UpsertSession(W,Y)})}async getSession(X){let Y=await this.unary((W)=>{this.client.GetSession({sessionId:X},W)});if(!Y.session)return;return XJ0(Y.session)}async listSessions(X){return((await this.unary((Y)=>{this.client.ListSessions(X,Y)})).sessions??[]).map((Y)=>XJ0(Y))}async updateSession(X){let Y={sessionId:X.sessionId,status:X.status,endedAt:X.endedAt??void 0,setRunning:X.setRunning};if(X.exitCode!==void 0)Y.hasExitCode=!0,Y.exitCode=X.exitCode??0;if(X.prompt!==void 0)Y.hasPrompt=!0,Y.prompt=X.prompt??"";if(X.metadata!==void 0)Y.hasMetadata=!0,Y.metadata=r9(X.metadata??void 0);if(X.parentSessionId!==void 0)Y.hasParentSessionId=!0,Y.parentSessionId=X.parentSessionId??"";if(X.parentAgentId!==void 0)Y.hasParentAgentId=!0,Y.parentAgentId=X.parentAgentId??"";if(X.agentId!==void 0)Y.hasAgentId=!0,Y.agentId=X.agentId??"";if(X.conversationId!==void 0)Y.hasConversationId=!0,Y.conversationId=X.conversationId??"";if(X.expectedStatusLock!==void 0)Y.hasExpectedStatusLock=!0,Y.expectedStatusLock=X.expectedStatusLock;let W=await this.unary((z)=>{this.client.UpdateSession(Y,z)});return{updated:W.updated===!0,statusLock:Number(W.statusLock??0)}}async deleteSession(X,Y=!1){return(await this.unary((W)=>{this.client.DeleteSession({sessionId:X,cascade:Y},W)})).deleted===!0}async enqueueSpawnRequest(X){await this.unary((Y)=>{this.client.EnqueueSpawnRequest(X,Y)})}async claimSpawnRequest(X,Y){let W=(await this.unary((z)=>{let F={rootSessionId:X,parentAgentId:Y};this.client.ClaimSpawnRequest(F,z)})).item?.task?.trim();return W?W:void 0}async startRuntimeSession(X){let Y={sessionId:X.sessionId??"",workspaceRoot:X.workspaceRoot,cwd:X.cwd??"",provider:X.provider,model:X.model,mode:X.mode,apiKey:X.apiKey,systemPrompt:X.systemPrompt??"",maxIterations:X.maxIterations??0,hasMaxIterations:typeof X.maxIterations==="number",enableTools:X.enableTools,enableSpawn:X.enableSpawn,enableTeams:X.enableTeams,autoApproveTools:X.autoApproveTools??!1,hasAutoApproveTools:typeof X.autoApproveTools==="boolean",teamName:X.teamName,missionStepInterval:X.missionStepInterval,missionTimeIntervalMs:X.missionTimeIntervalMs,toolPolicies:Object.fromEntries(Object.entries(X.toolPolicies??{}).map(([F,Q])=>[F,{enabled:Q.enabled!==!1,autoApprove:Q.autoApprove??!1}])),initialMessages:(X.initialMessages??[]).map((F)=>({role:F.role??"",content:a7(F.content)})),logger:X.logger?{enabled:X.logger.enabled??!1,level:X.logger.level??"",destination:X.logger.destination??"",name:X.logger.name??"",bindings:r9(X.logger.bindings)}:void 0},W=await this.unary((F)=>{this.client.StartRuntimeSession({request:Y},F)}),z=W.startResult?{sessionId:W.startResult.sessionId??"",manifestPath:W.startResult.manifestPath??"",transcriptPath:W.startResult.transcriptPath??"",hookPath:W.startResult.hookPath??"",messagesPath:W.startResult.messagesPath??""}:void 0;return{sessionId:W.sessionId??"",startResult:z}}async sendRuntimeSession(X,Y){let W={config:{workspaceRoot:Y.config.workspaceRoot,cwd:Y.config.cwd??"",provider:Y.config.provider,model:Y.config.model,mode:Y.config.mode,apiKey:Y.config.apiKey,systemPrompt:Y.config.systemPrompt??"",maxIterations:Y.config.maxIterations??0,hasMaxIterations:typeof Y.config.maxIterations==="number",enableTools:Y.config.enableTools,enableSpawn:Y.config.enableSpawn,enableTeams:Y.config.enableTeams,autoApproveTools:Y.config.autoApproveTools??!1,hasAutoApproveTools:typeof Y.config.autoApproveTools==="boolean",teamName:Y.config.teamName,missionStepInterval:Y.config.missionStepInterval,missionTimeIntervalMs:Y.config.missionTimeIntervalMs,toolPolicies:Object.fromEntries(Object.entries(Y.config.toolPolicies??{}).map(([F,Q])=>[F,{enabled:Q.enabled!==!1,autoApprove:Q.autoApprove??!1}])),initialMessages:(Y.config.initialMessages??[]).map((F)=>({role:F.role??"",content:a7(F.content)})),logger:Y.config.logger?{enabled:Y.config.logger.enabled??!1,level:Y.config.logger.level??"",destination:Y.config.logger.destination??"",name:Y.config.logger.name??"",bindings:r9(Y.config.logger.bindings)}:void 0},messages:(Y.messages??[]).map((F)=>({role:F.role??"",content:a7(F.content)})),prompt:Y.prompt,delivery:Y.delivery,attachments:Y.attachments?{userImages:Y.attachments.userImages??[],userFiles:(Y.attachments.userFiles??[]).map((F)=>({name:F.name,content:F.content}))}:void 0},z=await this.unary((F)=>{this.client.SendRuntimeSession({sessionId:X,request:W},F)});if(!z.result)return{queued:!0};return{result:{text:z.result.text??"",usage:{inputTokens:Number(z.result.usage?.inputTokens??0),outputTokens:Number(z.result.usage?.outputTokens??0),cacheReadTokens:z.result.usage?.hasCacheReadTokens?Number(z.result.usage?.cacheReadTokens??0):void 0,cacheWriteTokens:z.result.usage?.hasCacheWriteTokens?Number(z.result.usage?.cacheWriteTokens??0):void 0,totalCost:z.result.usage?.hasTotalCost?Number(z.result.usage?.totalCost??0):void 0},inputTokens:Number(z.result.inputTokens??0),outputTokens:Number(z.result.outputTokens??0),iterations:Number(z.result.iterations??0),finishReason:z.result.finishReason??"",messages:(z.result.messages??[]).map((F)=>({role:F.role??"",content:r7(F.content)})),toolCalls:(z.result.toolCalls??[]).map((F)=>({name:F.name??"",input:F.hasInput?r7(F.input):void 0,output:F.hasOutput?r7(F.output):void 0,error:F.error?.trim()||void 0,durationMs:F.hasDurationMs?Number(F.durationMs??0):void 0}))},queued:!1}}async abortRuntimeSession(X){return{applied:(await this.unary((Y)=>{this.client.AbortRuntimeSession({sessionId:X},Y)})).applied===!0}}async requestToolApproval(X){let Y={approvalId:X.approvalId,sessionId:X.sessionId,taskId:X.taskId,toolCallId:X.toolCallId,toolName:X.toolName,inputJson:X.inputJson,requesterClientId:X.requesterClientId,timeoutMs:X.timeoutMs},W=await this.unary((z)=>{this.client.RequestToolApproval(Y,z)});return{approvalId:W.approvalId??"",decided:W.decided===!0,approved:W.approved===!0,reason:W.reason??""}}async respondToolApproval(X){let Y={approvalId:X.approvalId,approved:X.approved,reason:X.reason,responderClientId:X.responderClientId},W=await this.unary((z)=>{this.client.RespondToolApproval(Y,z)});return{approvalId:W.approvalId??"",applied:W.applied===!0}}async listPendingApprovals(X){return((await this.unary((Y)=>{this.client.ListPendingApprovals({sessionId:X},Y)})).approvals??[]).map((Y)=>({approvalId:Y.approvalId??"",sessionId:Y.sessionId??"",taskId:Y.taskId??"",toolCallId:Y.toolCallId??"",toolName:Y.toolName??"",inputJson:Y.inputJson??"",requesterClientId:Y.requesterClientId??"",createdAt:Y.createdAt??""}))}async createSchedule(X){let Y=await this.unary((W)=>{this.client.CreateSchedule({name:X.name,cronPattern:X.cronPattern,prompt:X.prompt,provider:X.provider,model:X.model,mode:X.mode??"act",workspaceRoot:X.workspaceRoot,cwd:X.cwd,systemPrompt:X.systemPrompt,maxIterations:X.maxIterations??0,hasMaxIterations:typeof X.maxIterations==="number",timeoutSeconds:X.timeoutSeconds??0,hasTimeoutSeconds:typeof X.timeoutSeconds==="number",maxParallel:X.maxParallel??1,enabled:X.enabled??!0,createdBy:X.createdBy,tagsJson:X.tags?JSON.stringify(X.tags):"",metadata:r9(X.metadata)},W)});return Y.schedule?kY(Y.schedule):void 0}async getSchedule(X){let Y=await this.unary((W)=>{this.client.GetSchedule({scheduleId:X},W)});return Y.schedule?kY(Y.schedule):void 0}async listSchedules(X){return((await this.unary((Y)=>{this.client.ListSchedules({limit:X?.limit??100,hasEnabled:typeof X?.enabled==="boolean",enabled:X?.enabled??!1,tagsJson:X?.tags?JSON.stringify(X.tags):""},Y)})).schedules??[]).map((Y)=>kY(Y))}async updateSchedule(X,Y){let W={scheduleId:X};if(Y.name!==void 0)W.hasName=!0,W.name=Y.name;if(Y.cronPattern!==void 0)W.hasCronPattern=!0,W.cronPattern=Y.cronPattern;if(Y.prompt!==void 0)W.hasPrompt=!0,W.prompt=Y.prompt;if(Y.provider!==void 0)W.hasProvider=!0,W.provider=Y.provider;if(Y.model!==void 0)W.hasModel=!0,W.model=Y.model;if(Y.mode!==void 0)W.hasMode=!0,W.mode=Y.mode;if(Y.workspaceRoot!==void 0)W.hasWorkspaceRoot=!0,W.workspaceRoot=Y.workspaceRoot;if(Y.cwd!==void 0)W.hasCwd=!0,W.cwd=Y.cwd;if(Y.systemPrompt!==void 0)W.hasSystemPrompt=!0,W.systemPrompt=Y.systemPrompt;if(Y.maxIterations===null)W.clearMaxIterations=!0;else if(Y.maxIterations!==void 0)W.hasMaxIterations=!0,W.maxIterations=Y.maxIterations;if(Y.timeoutSeconds===null)W.clearTimeoutSeconds=!0;else if(Y.timeoutSeconds!==void 0)W.hasTimeoutSeconds=!0,W.timeoutSeconds=Y.timeoutSeconds;if(Y.maxParallel!==void 0)W.hasMaxParallel=!0,W.maxParallel=Y.maxParallel;if(Y.enabled!==void 0)W.hasEnabled=!0,W.enabled=Y.enabled;if(Y.createdBy===null)W.clearCreatedBy=!0;else if(Y.createdBy!==void 0)W.hasCreatedBy=!0,W.createdBy=Y.createdBy;if(Y.tags!==void 0)W.hasTagsJson=!0,W.tagsJson=JSON.stringify(Y.tags);if(Y.metadata!==void 0)W.hasMetadata=!0,W.metadata=r9(Y.metadata);let z=await this.unary((F)=>{this.client.UpdateSchedule(W,F)});return z.schedule?kY(z.schedule):void 0}async deleteSchedule(X){return(await this.unary((Y)=>{this.client.DeleteSchedule({scheduleId:X},Y)})).deleted===!0}async pauseSchedule(X){let Y=await this.unary((W)=>{this.client.PauseSchedule({scheduleId:X},W)});return Y.schedule?kY(Y.schedule):void 0}async resumeSchedule(X){let Y=await this.unary((W)=>{this.client.ResumeSchedule({scheduleId:X},W)});return Y.schedule?kY(Y.schedule):void 0}async triggerScheduleNow(X){let Y=await this.unary((W)=>{this.client.TriggerScheduleNow({scheduleId:X},W)});return Y.execution?jA(Y.execution):void 0}async listScheduleExecutions(X){return((await this.unary((Y)=>{this.client.ListScheduleExecutions({scheduleId:X.scheduleId,status:X.status,limit:X.limit??50},Y)})).executions??[]).map((Y)=>jA(Y))}async getScheduleStats(X){let Y=await this.unary((W)=>{this.client.GetScheduleStats({scheduleId:X},W)});return{totalRuns:Number(Y.totalRuns??0),successRate:Number(Y.successRate??0),avgDurationSeconds:Number(Y.avgDurationSeconds??0),lastFailure:Y.lastFailure?jA(Y.lastFailure):void 0}}async getActiveScheduledExecutions(){return((await this.unary((X)=>{this.client.GetActiveScheduledExecutions({},X)})).executions??[]).map((X)=>({executionId:X.executionId??"",scheduleId:X.scheduleId??"",sessionId:X.sessionId??"",startedAt:X.startedAt??"",timeoutAt:X.timeoutAt?.trim()||void 0}))}async getUpcomingScheduledRuns(X=20){return((await this.unary((Y)=>{this.client.GetUpcomingScheduledRuns({limit:X},Y)})).runs??[]).map((Y)=>({scheduleId:Y.scheduleId??"",name:Y.name??"",nextRunAt:Y.nextRunAt??""}))}async stopRuntimeSession(X){return{applied:(await this.unary((Y)=>{this.client.StopRuntimeSession({sessionId:X},Y)})).applied===!0}}async runProviderAction(X){let Y=X.action==="listProviders"?{listProviders:{}}:X.action==="getProviderModels"?{getProviderModels:{providerId:X.providerId}}:X.action==="addProvider"?{addProvider:{providerId:X.providerId,name:X.name,baseUrl:X.baseUrl,apiKey:X.apiKey??"",headers:X.headers??{},timeoutMs:X.timeoutMs??0,hasTimeoutMs:typeof X.timeoutMs==="number",models:X.models??[],defaultModelId:X.defaultModelId??"",modelsSourceUrl:X.modelsSourceUrl??"",capabilities:X.capabilities??[]}}:X.action==="saveProviderSettings"?{saveProviderSettings:{providerId:X.providerId,enabled:X.enabled??!1,hasEnabled:typeof X.enabled==="boolean",apiKey:X.apiKey??"",hasApiKey:X.apiKey!==void 0,baseUrl:X.baseUrl??"",hasBaseUrl:X.baseUrl!==void 0}}:{clineAccount:{operation:X.operation,userId:"userId"in X?X.userId??"":"",organizationId:"organizationId"in X?X.organizationId??"":"",memberId:"memberId"in X?X.memberId??"":"",clearOrganizationId:"organizationId"in X&&X.organizationId===null}},W=await this.unary((z)=>{this.client.RunProviderAction({request:Y},z)});return{result:r7(W.result)}}async runProviderOAuthLogin(X){let Y=await this.unary((W)=>{this.client.RunProviderOAuthLogin({provider:X},W)});return{provider:Y.provider??"",accessToken:Y.apiKey??""}}async publishEvent(X){let Y=await this.unary((W)=>{this.client.PublishEvent({eventId:X.eventId,sessionId:X.sessionId,taskId:X.taskId,eventType:X.eventType,payload:r9(X.payload),sourceClientId:X.sourceClientId},W)});return{eventId:Y.eventId??"",accepted:Y.accepted===!0}}streamEvents(X,Y={}){let W=!1,z=this.client.StreamEvents({clientId:X.clientId??"",sessionIds:X.sessionIds??[]}),F=(Z)=>{Y.onEvent?.({eventId:Z.eventId??"",sessionId:Z.sessionId??"",taskId:Z.taskId?.trim()?Z.taskId:void 0,eventType:Z.eventType??"",payload:O9(Z.payload)??{},sourceClientId:Z.sourceClientId?.trim()?Z.sourceClientId:void 0,ts:Z.ts??""})},Q=(Z)=>{let K=(typeof Z.code==="number"?Number(Z.code):void 0)===1||Z.message.includes("CANCELLED");if(W&&K)return;Y.onError?.(Z)},J=()=>{Y.onEnd?.()};return z.on("data",F),z.on("error",Q),z.on("end",J),()=>{W=!0,z.cancel()}}streamTeamProgress(X,Y={}){return this.streamEvents(X,{onEvent:(W)=>{if(W.eventType===V3){try{let z=W.payload;if(z.type==="team_progress_projection"&&z.version===1)Y.onProjection?.(z)}catch{}return}if(W.eventType===B3)try{Y.onLifecycle?.(W.payload)}catch{}},onError:Y.onError,onEnd:Y.onEnd})}async unary(X){return await new Promise((Y,W)=>{X((z,F)=>{if(z){W(z);return}Y(F??{})})})}}var fX1="cline.rpc.v1",zJ0="ClineGateway";function yX1(){return WJ0(import.meta.url)}function kX1(){let X=FJ0.loadSync(yX1(),{keepCase:!1,longs:String,enums:String,defaults:!0,oneofs:!0}),Y=KJ0.loadPackageDefinition(X).cline?.rpc?.v1?.ClineGateway?.service;if(!Y)throw Error(`Unable to load ${fX1}.${zJ0} from proto`);return Y}function jY(){return new Date().toISOString()}function b0(X){return typeof X==="string"?X:""}function vX1(X){if(!X||typeof X!=="object")return{};let Y={};for(let[W,z]of Object.entries(X)){let F=W.trim();if(!F)continue;let Q=b0(z).trim();if(!Q)continue;Y[F]=Q}return Y}function jX1(X){if(!Array.isArray(X)||X.length===0)return;let Y=new Set;for(let W of X){let z=W.trim();if(z)Y.add(z)}return Y.size>0?Y:void 0}function qJ0(X){if(X==="running"||X==="completed"||X==="failed"||X==="cancelled")return X;return"running"}function YJ0(X){return{sessionId:X.sessionId,source:X.source,pid:X.pid,startedAt:X.startedAt,endedAt:X.endedAt??"",exitCode:X.exitCode??0,status:X.status,statusLock:X.statusLock,interactive:X.interactive,provider:X.provider,model:X.model,cwd:X.cwd,workspaceRoot:X.workspaceRoot,teamName:X.teamName??"",enableTools:X.enableTools,enableSpawn:X.enableSpawn,enableTeams:X.enableTeams,parentSessionId:X.parentSessionId??"",parentAgentId:X.parentAgentId??"",agentId:X.agentId??"",conversationId:X.conversationId??"",isSubagent:X.isSubagent,prompt:X.prompt??"",transcriptPath:X.transcriptPath,hookPath:X.hookPath,messagesPath:X.messagesPath??"",updatedAt:X.updatedAt,metadata:r9(X.metadata)}}function hX1(X){let Y=b0(X.sessionId).trim(),W=b0(X.source).trim(),z=b0(X.startedAt).trim(),F=b0(X.provider).trim(),Q=b0(X.model).trim(),J=b0(X.cwd).trim(),Z=b0(X.workspaceRoot).trim(),K=b0(X.transcriptPath).trim(),H=b0(X.hookPath).trim();if(!Y||!W||!z||!F||!Q||!J||!Z||!K||!H)throw Error("session record is missing required fields");return{sessionId:Y,source:W,pid:Number(X.pid??0),startedAt:z,endedAt:b0(X.endedAt).trim()||null,exitCode:typeof X.exitCode==="number"?Math.floor(X.exitCode):null,status:qJ0(b0(X.status).trim()),statusLock:typeof X.statusLock==="number"?Math.floor(X.statusLock):0,interactive:X.interactive===!0,provider:F,model:Q,cwd:J,workspaceRoot:Z,teamName:b0(X.teamName).trim()||void 0,enableTools:X.enableTools===!0,enableSpawn:X.enableSpawn===!0,enableTeams:X.enableTeams===!0,parentSessionId:b0(X.parentSessionId).trim()||void 0,parentAgentId:b0(X.parentAgentId).trim()||void 0,agentId:b0(X.agentId).trim()||void 0,conversationId:b0(X.conversationId).trim()||void 0,isSubagent:X.isSubagent===!0,prompt:b0(X.prompt).trim()||void 0,metadata:O9(X.metadata),transcriptPath:K,hookPath:H,messagesPath:b0(X.messagesPath).trim()||void 0,updatedAt:b0(X.updatedAt).trim()||jY()}}function hA(X){let Y=b0(X).trim();if(!Y)return;try{let W=JSON.parse(Y);if(!Array.isArray(W))return;let z=W.map((F)=>typeof F==="string"?F.trim():"").filter((F)=>F.length>0);return z.length>0?z:void 0}catch{return}}function vY(X){return{scheduleId:X.scheduleId,name:X.name,cronPattern:X.cronPattern,prompt:X.prompt,provider:X.provider,model:X.model,mode:X.mode,workspaceRoot:X.workspaceRoot??"",cwd:X.cwd??"",systemPrompt:X.systemPrompt??"",maxIterations:X.maxIterations??0,hasMaxIterations:typeof X.maxIterations==="number",timeoutSeconds:X.timeoutSeconds??0,hasTimeoutSeconds:typeof X.timeoutSeconds==="number",maxParallel:X.maxParallel,enabled:X.enabled,createdAt:X.createdAt,updatedAt:X.updatedAt,lastRunAt:X.lastRunAt??"",nextRunAt:X.nextRunAt??"",createdBy:X.createdBy??"",tagsJson:X.tags?JSON.stringify(X.tags):"",metadata:r9(X.metadata)}}function _A(X){return{executionId:X.executionId,scheduleId:X.scheduleId,sessionId:X.sessionId??"",triggeredAt:X.triggeredAt,startedAt:X.startedAt??"",endedAt:X.endedAt??"",status:X.status,exitCode:X.exitCode??0,hasExitCode:typeof X.exitCode==="number",errorMessage:X.errorMessage??"",iterations:X.iterations??0,hasIterations:typeof X.iterations==="number",tokensUsed:X.tokensUsed??0,hasTokensUsed:typeof X.tokensUsed==="number",costUsd:X.costUsd??0,hasCostUsd:typeof X.costUsd==="number"}}function HJ0(X){return new(SK.makeGenericClientConstructor(kX1(),zJ0))(X,SK.credentials.createInsecure())}async function a4(X){return await new Promise((Y)=>{let W;try{W=HJ0(X)}catch{Y(void 0);return}W.Health({},(z,F)=>{if(W?.close(),z||!F){Y(void 0);return}Y(F)})})}async function VJ0(X){return await new Promise((Y)=>{let W;try{W=HJ0(X)}catch{Y(void 0);return}W.Shutdown({},(z,F)=>{if(W?.close(),z||!F){Y(void 0);return}Y(F)})})}var _X1="0.0.25",rQ="1",BJ0=_X1,bX1=300000;class UJ0{publishEvent;approvals=new Map;constructor(X){this.publishEvent=X}async requestToolApproval(X){let Y=b0(X.sessionId).trim(),W=b0(X.toolCallId).trim(),z=b0(X.toolName).trim();if(!Y||!W||!z)throw Error("sessionId, toolCallId, and toolName are required");let F=b0(X.approvalId).trim()||`apr_${xX1()}`;if(!this.approvals.get(F)){let K={approvalId:F,sessionId:Y,taskId:b0(X.taskId).trim()||void 0,toolCallId:W,toolName:z,inputJson:b0(X.inputJson),requesterClientId:b0(X.requesterClientId).trim()||void 0,createdAt:jY(),status:"pending",waiters:[]};this.approvals.set(F,K),this.publishEvent({eventId:"",sessionId:Y,taskId:K.taskId,eventType:"approval.requested",payload:r9(K),sourceClientId:K.requesterClientId})}let Q=this.approvals.get(F);if(!Q)throw Error("approval state not found");if(Q.status==="approved"||Q.status==="rejected")return{approvalId:F,decided:!0,approved:Q.status==="approved",reason:Q.reason??""};let J=typeof X.timeoutMs==="number"&&X.timeoutMs>0?Math.floor(X.timeoutMs):bX1,Z=await new Promise((K)=>{let H=setTimeout(()=>{K({decided:!1,approved:!1,reason:"Tool approval request timed out"})},J);Q.waiters.push((G)=>{clearTimeout(H),K(G)})});return{approvalId:F,decided:Z.decided,approved:Z.approved,reason:Z.reason??""}}respondToolApproval(X){let Y=b0(X.approvalId).trim();if(!Y)throw Error("approvalId is required");let W=this.approvals.get(Y);if(!W)return{approvalId:Y,applied:!1};W.status=X.approved===!0?"approved":"rejected",W.reason=b0(X.reason).trim()||void 0;let z={decided:!0,approved:W.status==="approved",reason:W.reason};for(let F of W.waiters.splice(0))F(z);return this.publishEvent({eventId:"",sessionId:W.sessionId,taskId:W.taskId,eventType:"approval.decided",payload:r9({approvalId:Y,approved:z.approved,reason:z.reason??"",responderClientId:b0(X.responderClientId).trim()||""}),sourceClientId:b0(X.responderClientId).trim()||""}),{approvalId:Y,applied:!0}}listPendingApprovals(X){let Y=b0(X.sessionId).trim(),W=[];for(let z of this.approvals.values()){if(z.status!=="pending")continue;if(Y&&z.sessionId!==Y)continue;W.push({approvalId:z.approvalId,sessionId:z.sessionId,taskId:z.taskId??"",toolCallId:z.toolCallId,toolName:z.toolName,inputJson:z.inputJson,requesterClientId:z.requesterClientId??"",createdAt:z.createdAt})}return W.sort((z,F)=>(z.createdAt??"").localeCompare(F.createdAt??"")),{approvals:W}}}class NJ0{subscribers=new Map;nextSubscriberId=1;publishEvent(X){let Y=b0(X.sessionId).trim();if(!Y)throw Error("sessionId is required");let W={eventId:b0(X.eventId).trim()||`evt_${QJ0()}`,sessionId:Y,taskId:b0(X.taskId).trim()||void 0,eventType:b0(X.eventType).trim()||"unknown",payload:O9(X.payload)??{},sourceClientId:b0(X.sourceClientId).trim()||void 0,ts:jY()};return this.dispatchEvent(W),{eventId:W.eventId,accepted:!0}}addSubscriber(X){let Y=X.request,W=jX1(Y.sessionIds),z=this.nextSubscriberId;return this.nextSubscriberId+=1,this.subscribers.set(z,{call:X,filterSessionIds:W}),X.on("cancelled",()=>{this.subscribers.delete(z)}),X.on("close",()=>{this.subscribers.delete(z)}),z}removeSubscriber(X){this.subscribers.delete(X)}broadcastServerEvent(X,Y){let W=`evt_${QJ0()}`,z=jY();for(let F of this.subscribers.values())F.call.write({eventId:W,sessionId:"__rpc__",taskId:"",eventType:X,payload:r9(Y),sourceClientId:"rpc-server",ts:z})}dispatchEvent(X){for(let Y of this.subscribers.values()){if(Y.filterSessionIds&&!Y.filterSessionIds.has(X.sessionId))continue;Y.call.write({eventId:X.eventId,sessionId:X.sessionId,taskId:X.taskId??"",eventType:X.eventType,payload:r9(X.payload),sourceClientId:X.sourceClientId??"",ts:X.ts})}}}class AJ0{scheduler;constructor(X){this.scheduler=X}createSchedule(X){let Y=this.requireScheduler(),W={name:b0(X.name).trim(),cronPattern:b0(X.cronPattern).trim(),prompt:b0(X.prompt),provider:b0(X.provider).trim(),model:b0(X.model).trim(),mode:b0(X.mode).trim()==="plan"?"plan":"act",workspaceRoot:b0(X.workspaceRoot).trim()||void 0,cwd:b0(X.cwd).trim()||void 0,systemPrompt:b0(X.systemPrompt)||void 0,maxIterations:X.hasMaxIterations?Math.floor(X.maxIterations??0):void 0,timeoutSeconds:X.hasTimeoutSeconds?Math.floor(X.timeoutSeconds??0):void 0,maxParallel:typeof X.maxParallel==="number"&&X.maxParallel>0?Math.floor(X.maxParallel):1,enabled:X.enabled!==!1,createdBy:b0(X.createdBy).trim()||void 0,tags:hA(b0(X.tagsJson)),metadata:O9(X.metadata)};if(!W.name||!W.cronPattern||!W.prompt.trim()||!W.provider||!W.model)throw Error("name, cronPattern, prompt, provider, and model are required");let z=Y.createSchedule(W);return{schedule:vY(z)}}getSchedule(X){let Y=this.requireScheduler(),W=b0(X.scheduleId).trim();if(!W)throw Error("scheduleId is required");let z=Y.getSchedule(W);return z?{schedule:vY(z)}:{}}listSchedules(X){return{schedules:this.requireScheduler().listSchedules({enabled:X.hasEnabled?X.enabled===!0:void 0,limit:typeof X.limit==="number"&&X.limit>0?Math.floor(X.limit):void 0,tags:hA(b0(X.tagsJson))}).map((Y)=>vY(Y))}}updateSchedule(X){let Y=this.requireScheduler(),W=b0(X.scheduleId).trim();if(!W)throw Error("scheduleId is required");let z={};if(X.hasName)z.name=b0(X.name);if(X.hasCronPattern)z.cronPattern=b0(X.cronPattern);if(X.hasPrompt)z.prompt=b0(X.prompt);if(X.hasProvider)z.provider=b0(X.provider);if(X.hasModel)z.model=b0(X.model);if(X.hasMode)z.mode=b0(X.mode).trim()==="plan"?"plan":"act";if(X.hasWorkspaceRoot)z.workspaceRoot=b0(X.workspaceRoot);if(X.hasCwd)z.cwd=b0(X.cwd);if(X.hasSystemPrompt)z.systemPrompt=b0(X.systemPrompt);if(X.clearMaxIterations)z.maxIterations=null;else if(X.hasMaxIterations)z.maxIterations=Math.floor(X.maxIterations??0);if(X.clearTimeoutSeconds)z.timeoutSeconds=null;else if(X.hasTimeoutSeconds)z.timeoutSeconds=Math.floor(X.timeoutSeconds??0);if(X.hasMaxParallel)z.maxParallel=Math.floor(X.maxParallel??1);if(X.hasEnabled)z.enabled=X.enabled===!0;if(X.clearCreatedBy)z.createdBy=null;else if(X.hasCreatedBy)z.createdBy=b0(X.createdBy);if(X.hasTagsJson)z.tags=hA(b0(X.tagsJson))??[];if(X.hasMetadata)z.metadata=O9(X.metadata)??{};let F=Y.updateSchedule(W,z);return{updated:F!==void 0,schedule:F?vY(F):void 0}}deleteSchedule(X){let Y=this.requireScheduler(),W=b0(X.scheduleId).trim();if(!W)throw Error("scheduleId is required");return{deleted:Y.deleteSchedule(W)}}pauseSchedule(X){let Y=this.requireScheduler(),W=b0(X.scheduleId).trim();if(!W)throw Error("scheduleId is required");let z=Y.pauseSchedule(W);return{updated:z!==void 0,schedule:z?vY(z):void 0}}resumeSchedule(X){let Y=this.requireScheduler(),W=b0(X.scheduleId).trim();if(!W)throw Error("scheduleId is required");let z=Y.resumeSchedule(W);return{updated:z!==void 0,schedule:z?vY(z):void 0}}async triggerScheduleNow(X){let Y=this.requireScheduler(),W=b0(X.scheduleId).trim();if(!W)throw Error("scheduleId is required");let z=await Y.triggerScheduleNow(W);return z?{execution:_A(z)}:{}}listScheduleExecutions(X){let Y=this.requireScheduler(),W=b0(X.scheduleId).trim()||void 0,z=b0(X.status).trim()||void 0;return{executions:Y.listScheduleExecutions({scheduleId:W,status:z==="pending"||z==="running"||z==="success"||z==="failed"||z==="timeout"||z==="aborted"?z:void 0,limit:typeof X.limit==="number"&&X.limit>0?Math.floor(X.limit):void 0}).map((F)=>_A(F))}}getScheduleStats(X){let Y=this.requireScheduler(),W=b0(X.scheduleId).trim();if(!W)throw Error("scheduleId is required");let z=Y.getScheduleStats(W);return{totalRuns:z.totalRuns,successRate:z.successRate,avgDurationSeconds:z.avgDurationSeconds,lastFailure:z.lastFailure?_A(z.lastFailure):void 0}}getActiveScheduledExecutions(X){return{executions:this.requireScheduler().getActiveExecutions().map((Y)=>({executionId:Y.executionId,scheduleId:Y.scheduleId,sessionId:Y.sessionId,startedAt:Y.startedAt,timeoutAt:Y.timeoutAt??""}))}}getUpcomingScheduledRuns(X){let Y=this.requireScheduler(),W=typeof X.limit==="number"&&X.limit>0?Math.floor(X.limit):20;return{runs:Y.getUpcomingRuns(W).map((z)=>({scheduleId:z.scheduleId,name:z.name,nextRunAt:z.nextRunAt}))}}requireScheduler(){if(!this.scheduler)throw Error("scheduler service is not configured");return this.scheduler}}class uX1{serverId=ZJ0();address;startedAt;runtimeHandlers;sessions=new Map;tasks=new Map;clients=new Map;store;eventService=new NJ0;approvalService=new UJ0((X)=>this.eventService.publishEvent(X));scheduleService;constructor(X,Y,W,z){this.address=X,this.startedAt=jY(),this.store=Y,this.runtimeHandlers=W,this.scheduleService=new AJ0(z),this.store.init()}health(){return{serverId:this.serverId,address:this.address,running:!0,startedAt:this.startedAt,rpcVersion:rQ}}registerClient(X){let Y=b0(X.clientId).trim()||`client_${ZJ0()}`,W=b0(X.clientType).trim()||void 0,z=vX1(X),F=jY(),Q=this.clients.get(Y),J=Q?{...Q,clientType:W??Q.clientType,metadata:Object.keys(z).length>0?{...Q.metadata??{},...z}:Q.metadata,lastRegisteredAt:F,activationCount:Q.activationCount+1}:{clientId:Y,clientType:W,metadata:Object.keys(z).length>0?z:void 0,firstRegisteredAt:F,lastRegisteredAt:F,activationCount:1};return this.clients.set(Y,J),this.broadcastServerEvent("rpc.client.activated",{clientId:J.clientId,clientType:J.clientType,metadata:J.metadata??{},firstRegisteredAt:J.firstRegisteredAt,lastRegisteredAt:J.lastRegisteredAt,activationCount:J.activationCount}),{clientId:Y,registered:!0}}ensureSession(X){let Y=b0(X.sessionId).trim();if(!Y)throw Error("sessionId is required");let W=this.sessions.get(Y);if(W)return W.status=b0(X.status).trim()||W.status,W.workspaceRoot=b0(X.workspaceRoot).trim()||W.workspaceRoot,W.clientId=b0(X.clientId).trim()||W.clientId,W.metadata=O9(X.metadata)??W.metadata,{sessionId:Y,created:!1,status:W.status};let z=b0(X.status).trim()||"running";return this.sessions.set(Y,{sessionId:Y,status:z,workspaceRoot:b0(X.workspaceRoot).trim()||void 0,clientId:b0(X.clientId).trim()||void 0,metadata:O9(X.metadata)}),{sessionId:Y,created:!0,status:z}}upsertSession(X){if(!X.session)throw Error("session is required");return this.store.upsertSession(hX1(X.session)),{persisted:!0}}getSession(X){let Y=b0(X.sessionId).trim();if(!Y)throw Error("sessionId is required");let W=this.store.getSession(Y);if(!W)return{};return{session:YJ0(W)}}listSessions(X){let Y=typeof X.limit==="number"&&X.limit>0?Math.floor(X.limit):200;return{sessions:this.store.listSessions({limit:Y,parentSessionId:b0(X.parentSessionId).trim()||void 0,status:b0(X.status).trim()||void 0}).map((W)=>YJ0(W))}}updateSession(X){let Y=b0(X.sessionId).trim();if(!Y)throw Error("sessionId is required");return this.store.updateSession({sessionId:Y,status:X.status?qJ0(X.status):void 0,endedAt:X.endedAt?X.endedAt:void 0,exitCode:X.hasExitCode?X.exitCode??null:void 0,prompt:X.hasPrompt?X.prompt??null:void 0,metadata:X.hasMetadata?O9(X.metadata)??null:void 0,parentSessionId:X.hasParentSessionId?X.parentSessionId??null:void 0,parentAgentId:X.hasParentAgentId?X.parentAgentId??null:void 0,agentId:X.hasAgentId?X.agentId??null:void 0,conversationId:X.hasConversationId?X.conversationId??null:void 0,expectedStatusLock:X.hasExpectedStatusLock?X.expectedStatusLock:void 0,setRunning:X.setRunning===!0})}deleteSession(X){let Y=b0(X.sessionId).trim();if(!Y)throw Error("sessionId is required");let W=this.store.deleteSession(Y);if(X.cascade===!0)this.store.deleteSessionsByParent(Y);return{deleted:W}}enqueueSpawnRequest(X){let Y=b0(X.rootSessionId).trim(),W=b0(X.parentAgentId).trim();if(!Y||!W)throw Error("rootSessionId and parentAgentId are required");return this.store.enqueueSpawnRequest({rootSessionId:Y,parentAgentId:W,task:b0(X.task).trim()||void 0,systemPrompt:b0(X.systemPrompt).trim()||void 0}),{enqueued:!0}}claimSpawnRequest(X){let Y=b0(X.rootSessionId).trim(),W=b0(X.parentAgentId).trim();if(!Y||!W)throw Error("rootSessionId and parentAgentId are required");let z=this.store.claimSpawnRequest(Y,W);if(!z)return{};return{item:{id:String(z.id),rootSessionId:z.rootSessionId,parentAgentId:z.parentAgentId,task:z.task??"",systemPrompt:z.systemPrompt??"",createdAt:z.createdAt,consumedAt:z.consumedAt??""}}}async startRuntimeSession(X){let Y=this.runtimeHandlers?.startSession;if(!Y)throw Error("runtime start handler is not configured");let W=X.request?{sessionId:b0(X.request.sessionId),workspaceRoot:b0(X.request.workspaceRoot),cwd:b0(X.request.cwd),provider:b0(X.request.provider),model:b0(X.request.model),mode:b0(X.request.mode),apiKey:b0(X.request.apiKey),systemPrompt:b0(X.request.systemPrompt),maxIterations:X.request.hasMaxIterations?X.request.maxIterations:void 0,enableTools:X.request.enableTools===!0,enableSpawn:X.request.enableSpawn===!0,enableTeams:X.request.enableTeams===!0,autoApproveTools:X.request.hasAutoApproveTools?X.request.autoApproveTools===!0:void 0,teamName:b0(X.request.teamName),missionStepInterval:X.request.missionStepInterval??3,missionTimeIntervalMs:X.request.missionTimeIntervalMs??120000,toolPolicies:Object.fromEntries(Object.entries(X.request.toolPolicies??{}).map(([Q,J])=>[Q,{enabled:J?.enabled===!0,autoApprove:J?.autoApprove===!0}])),initialMessages:(X.request.initialMessages??[]).map((Q)=>({role:b0(Q.role),content:r7(Q.content)})),logger:X.request.logger?{enabled:X.request.logger.enabled===!0,level:b0(X.request.logger.level),destination:b0(X.request.logger.destination),name:b0(X.request.logger.name),bindings:O9(X.request.logger.bindings)}:void 0}:void 0;if(!W)throw Error("runtime start request is required");let z=await Y(W),F=b0(z.sessionId).trim();if(!F)throw Error("runtime start handler returned empty sessionId");return{sessionId:F,startResult:z.startResult?{sessionId:b0(z.startResult.sessionId),manifestPath:b0(z.startResult.manifestPath),transcriptPath:b0(z.startResult.transcriptPath),hookPath:b0(z.startResult.hookPath),messagesPath:b0(z.startResult.messagesPath)}:void 0}}async sendRuntimeSession(X){let Y=this.runtimeHandlers?.sendSession;if(!Y)throw Error("runtime send handler is not configured");let W=b0(X.sessionId).trim();if(!W)throw Error("sessionId is required");let z=X.request?.delivery==="queue"||X.request?.delivery==="steer"?X.request.delivery:void 0,F=X.request?{config:{workspaceRoot:b0(X.request.config?.workspaceRoot),cwd:b0(X.request.config?.cwd),provider:b0(X.request.config?.provider),model:b0(X.request.config?.model),mode:b0(X.request.config?.mode),apiKey:b0(X.request.config?.apiKey),systemPrompt:b0(X.request.config?.systemPrompt),maxIterations:X.request.config?.hasMaxIterations?X.request.config?.maxIterations:void 0,enableTools:X.request.config?.enableTools===!0,enableSpawn:X.request.config?.enableSpawn===!0,enableTeams:X.request.config?.enableTeams===!0,autoApproveTools:X.request.config?.hasAutoApproveTools?X.request.config?.autoApproveTools===!0:void 0,teamName:b0(X.request.config?.teamName),missionStepInterval:X.request.config?.missionStepInterval??3,missionTimeIntervalMs:X.request.config?.missionTimeIntervalMs??120000,toolPolicies:Object.fromEntries(Object.entries(X.request.config?.toolPolicies??{}).map(([J,Z])=>[J,{enabled:Z?.enabled===!0,autoApprove:Z?.autoApprove===!0}])),initialMessages:(X.request.config?.initialMessages??[]).map((J)=>({role:b0(J.role),content:r7(J.content)})),logger:X.request.config?.logger?{enabled:X.request.config.logger.enabled===!0,level:b0(X.request.config.logger.level),destination:b0(X.request.config.logger.destination),name:b0(X.request.config.logger.name),bindings:O9(X.request.config.logger.bindings)}:void 0},messages:(X.request.messages??[]).map((J)=>({role:b0(J.role),content:r7(J.content)})),prompt:b0(X.request.prompt),delivery:z,attachments:X.request.attachments?{userImages:X.request.attachments.userImages??[],userFiles:(X.request.attachments.userFiles??[]).map((J)=>({name:b0(J.name),content:b0(J.content)}))}:void 0}:void 0;if(!F)throw Error("runtime send request is required");let Q=await Y(W,F);if(!Q.result)return{};return{result:{text:b0(Q.result.text),usage:{inputTokens:Q.result.usage.inputTokens,outputTokens:Q.result.usage.outputTokens,cacheReadTokens:Q.result.usage.cacheReadTokens??0,hasCacheReadTokens:typeof Q.result.usage.cacheReadTokens==="number",cacheWriteTokens:Q.result.usage.cacheWriteTokens??0,hasCacheWriteTokens:typeof Q.result.usage.cacheWriteTokens==="number",totalCost:Q.result.usage.totalCost??0,hasTotalCost:typeof Q.result.usage.totalCost==="number"},inputTokens:Q.result.inputTokens,outputTokens:Q.result.outputTokens,iterations:Q.result.iterations,finishReason:b0(Q.result.finishReason),messages:(Q.result.messages??[]).map((J)=>({role:b0(J.role),content:a7(J.content)})),toolCalls:(Q.result.toolCalls??[]).map((J)=>({name:b0(J.name),input:a7(J.input),hasInput:J.input!==void 0,output:a7(J.output),hasOutput:J.output!==void 0,error:b0(J.error),durationMs:J.durationMs??0,hasDurationMs:typeof J.durationMs==="number"}))}}}async stopRuntimeSession(X){let Y=this.runtimeHandlers?.stopSession;if(!Y)throw Error("runtime stop handler is not configured");let W=b0(X.sessionId).trim();if(!W)throw Error("sessionId is required");return{applied:(await Y(W)).applied===!0}}async abortRuntimeSession(X){let Y=this.runtimeHandlers?.abortSession;if(!Y)throw Error("runtime abort handler is not configured");let W=b0(X.sessionId).trim();if(!W)throw Error("sessionId is required");return{applied:(await Y(W)).applied===!0}}async runProviderAction(X){let Y=this.runtimeHandlers?.runProviderAction;if(!Y)throw Error("provider action handler is not configured");if(!X.request)throw Error("provider action request is required");let W;if(X.request.listProviders)W={action:"listProviders"};else if(X.request.getProviderModels)W={action:"getProviderModels",providerId:b0(X.request.getProviderModels.providerId)};else if(X.request.addProvider)W={action:"addProvider",providerId:b0(X.request.addProvider.providerId),name:b0(X.request.addProvider.name),baseUrl:b0(X.request.addProvider.baseUrl),apiKey:b0(X.request.addProvider.apiKey)||void 0,headers:X.request.addProvider.headers??void 0,timeoutMs:X.request.addProvider.hasTimeoutMs?X.request.addProvider.timeoutMs:void 0,models:X.request.addProvider.models??void 0,defaultModelId:b0(X.request.addProvider.defaultModelId)||void 0,modelsSourceUrl:b0(X.request.addProvider.modelsSourceUrl)||void 0,capabilities:X.request.addProvider.capabilities};else if(X.request.saveProviderSettings)W={action:"saveProviderSettings",providerId:b0(X.request.saveProviderSettings.providerId),enabled:X.request.saveProviderSettings.hasEnabled?X.request.saveProviderSettings.enabled:void 0,apiKey:X.request.saveProviderSettings.hasApiKey?X.request.saveProviderSettings.apiKey:void 0,baseUrl:X.request.saveProviderSettings.hasBaseUrl?X.request.saveProviderSettings.baseUrl:void 0};else{let F=b0(X.request.clineAccount?.operation);if(F==="fetchMe")W={action:"clineAccount",operation:"fetchMe"};else if(F==="fetchBalance")W={action:"clineAccount",operation:"fetchBalance",userId:b0(X.request.clineAccount?.userId)||void 0};else if(F==="fetchUsageTransactions")W={action:"clineAccount",operation:"fetchUsageTransactions",userId:b0(X.request.clineAccount?.userId)||void 0};else if(F==="fetchPaymentTransactions")W={action:"clineAccount",operation:"fetchPaymentTransactions",userId:b0(X.request.clineAccount?.userId)||void 0};else if(F==="fetchUserOrganizations")W={action:"clineAccount",operation:"fetchUserOrganizations"};else if(F==="fetchOrganizationBalance")W={action:"clineAccount",operation:"fetchOrganizationBalance",organizationId:b0(X.request.clineAccount?.organizationId)};else if(F==="fetchOrganizationUsageTransactions")W={action:"clineAccount",operation:"fetchOrganizationUsageTransactions",organizationId:b0(X.request.clineAccount?.organizationId),memberId:b0(X.request.clineAccount?.memberId)||void 0};else if(F==="fetchFeaturebaseToken")W={action:"clineAccount",operation:"fetchFeaturebaseToken"};else W={action:"clineAccount",operation:"switchAccount",organizationId:X.request.clineAccount?.clearOrganizationId?null:b0(X.request.clineAccount?.organizationId)||void 0}}let z=await Y(W);return{result:a7(z.result)}}async runProviderOAuthLogin(X){let Y=this.runtimeHandlers?.runProviderOAuthLogin;if(!Y)throw Error("provider oauth handler is not configured");let W=b0(X.provider).trim();if(!W)throw Error("provider is required");let z=await Y(W);return{provider:b0(z.provider).trim(),apiKey:b0(z.accessToken)}}startTask(X){let Y=b0(X.sessionId).trim(),W=b0(X.taskId).trim();if(!Y||!W)throw Error("sessionId and taskId are required");let z=`${Y}:${W}`;return this.tasks.set(z,{sessionId:Y,taskId:W,title:b0(X.title).trim()||void 0,status:"running",payload:O9(X.payload)??void 0}),this.eventService.publishEvent({eventId:"",sessionId:Y,taskId:W,eventType:"task.started",payload:O9(X.payload)??{},sourceClientId:""}),{sessionId:Y,taskId:W,status:"running",updated:!0}}completeTask(X){let Y=b0(X.sessionId).trim(),W=b0(X.taskId).trim();if(!Y||!W)throw Error("sessionId and taskId are required");let z=`${Y}:${W}`,F=b0(X.status).trim()||"completed",Q=this.tasks.get(z);if(!Q)return{sessionId:Y,taskId:W,status:F,updated:!1};return Q.status=F,Q.result=O9(X.result)??void 0,this.eventService.publishEvent({eventId:"",sessionId:Y,taskId:W,eventType:"task.completed",payload:O9(X.result)??{},sourceClientId:""}),{sessionId:Y,taskId:W,status:F,updated:!0}}publishEvent(X){return this.eventService.publishEvent(X)}addSubscriber(X){return this.eventService.addSubscriber(X)}removeSubscriber(X){this.eventService.removeSubscriber(X)}requestToolApproval(X){return this.approvalService.requestToolApproval(X)}respondToolApproval(X){return this.approvalService.respondToolApproval(X)}listPendingApprovals(X){return this.approvalService.listPendingApprovals(X)}createSchedule(X){return this.scheduleService.createSchedule(X)}getSchedule(X){return this.scheduleService.getSchedule(X)}listSchedules(X){return this.scheduleService.listSchedules(X)}updateSchedule(X){return this.scheduleService.updateSchedule(X)}deleteSchedule(X){return this.scheduleService.deleteSchedule(X)}pauseSchedule(X){return this.scheduleService.pauseSchedule(X)}resumeSchedule(X){return this.scheduleService.resumeSchedule(X)}triggerScheduleNow(X){return this.scheduleService.triggerScheduleNow(X)}listScheduleExecutions(X){return this.scheduleService.listScheduleExecutions(X)}getScheduleStats(X){return this.scheduleService.getScheduleStats(X)}getActiveScheduledExecutions(X){return this.scheduleService.getActiveScheduledExecutions(X)}getUpcomingScheduledRuns(X){return this.scheduleService.getUpcomingScheduledRuns(X)}broadcastServerEvent(X,Y){this.eventService.broadcastServerEvent(X,Y)}}var mX1=process.env.CLINE_RPC_ADDRESS?.trim()||rV;function OJ0(){return mX1}w6();import{existsSync as gX1,mkdirSync as dX1}from"node:fs";import{join as cX1}from"node:path";w6();function lX1(){return J8()}class _Y{sessionsDirPath;db;constructor(X={}){this.sessionsDirPath=X.sessionsDir??lX1()}init(){this.getRawDb()}ensureSessionsDir(){if(!gX1(this.sessionsDirPath))dX1(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}sessionDbPath(){return cX1(this.ensureSessionsDir(),"sessions.db")}getRawDb(){if(this.db)return this.db;let X=yY(this.sessionDbPath());return LK(X,{includeLegacyMigrations:!0}),this.db=X,X}close(){this.db?.close?.(),this.db=void 0}run(X,Y=[]){return this.getRawDb().prepare(X).run(...Y)}queryOne(X,Y=[]){return this.getRawDb().prepare(X).get(...Y)??void 0}queryAll(X,Y=[]){return this.getRawDb().prepare(X).all(...Y)}create(X){let Y=Q9();this.run(`INSERT OR REPLACE INTO sessions (
709
+ ON schedules(enabled, next_run_at);`],NX1=[{table:"sessions",column:"workspace_root",sql:"ALTER TABLE sessions ADD COLUMN workspace_root TEXT;"},{table:"sessions",column:"parent_session_id",sql:"ALTER TABLE sessions ADD COLUMN parent_session_id TEXT;"},{table:"sessions",column:"parent_agent_id",sql:"ALTER TABLE sessions ADD COLUMN parent_agent_id TEXT;"},{table:"sessions",column:"agent_id",sql:"ALTER TABLE sessions ADD COLUMN agent_id TEXT;"},{table:"sessions",column:"conversation_id",sql:"ALTER TABLE sessions ADD COLUMN conversation_id TEXT;"},{table:"sessions",column:"is_subagent",sql:"ALTER TABLE sessions ADD COLUMN is_subagent INTEGER NOT NULL DEFAULT 0;"},{table:"sessions",column:"messages_path",sql:"ALTER TABLE sessions ADD COLUMN messages_path TEXT;"},{table:"sessions",column:"metadata_json",sql:"ALTER TABLE sessions ADD COLUMN metadata_json TEXT;"},{table:"schedules",column:"claim_token",sql:"ALTER TABLE schedules ADD COLUMN claim_token TEXT;"},{table:"schedules",column:"claim_started_at",sql:"ALTER TABLE schedules ADD COLUMN claim_started_at TEXT;"},{table:"schedules",column:"claim_until_at",sql:"ALTER TABLE schedules ADD COLUMN claim_until_at TEXT;"}];function AX1(X,Y){return new Set(X.prepare(`PRAGMA table_info(${Y});`).all().map((W)=>W.name))}function LK(X,Y={}){X.exec("PRAGMA journal_mode = WAL;"),X.exec("PRAGMA busy_timeout = 5000;");for(let F of UX1)X.exec(F);if(!Y.includeLegacyMigrations)return;let W=new Map,z=(F)=>{let Q=W.get(F);if(!Q)Q=AX1(X,F),W.set(F,Q);return Q};for(let F of NX1)if(!z(F.table).has(F.column)){if(X.exec(F.sql),F.column==="workspace_root")X.exec("UPDATE sessions SET workspace_root = cwd WHERE workspace_root IS NULL OR workspace_root = '';")}}w6();var xA=N9(iQ(),1);import{randomUUID as ZJ0}from"node:crypto";import{randomUUID as xX1}from"node:crypto";import{randomUUID as QJ0}from"node:crypto";function WJ0(X){let Y=eQ0(CX1(X)),W=new Set([i7(Y,"proto","rpc.proto"),i7(Y,"..","proto","rpc.proto"),i7(Y,"..","src","proto","rpc.proto"),i7(Y,"..","..","src","proto","rpc.proto"),i7(process.cwd(),"src","proto","rpc.proto"),i7(process.cwd(),"packages","rpc","src","proto","rpc.proto")]),z=process.cwd();while(!0){W.add(i7(z,"packages","rpc","src","proto","rpc.proto"));let F=eQ0(z);if(F===z)break;z=F}for(let F of W)if(EX1(F))return F;throw Error("Unable to resolve rpc.proto path")}var RX1="cline.rpc.v1",GJ0="ClineGateway";function MX1(){return WJ0(import.meta.url)}function LX1(){let X=JJ0.loadSync(MX1(),{keepCase:!1,longs:String,enums:String,defaults:!0,oneofs:!0}),Y=hY.loadPackageDefinition(X).cline?.rpc?.v1?.ClineGateway?.service;if(!Y)throw Error(`Unable to load ${RX1}.${GJ0} from proto`);return Y}function PX1(X){return new(hY.makeGenericClientConstructor(LX1(),GJ0))(X,hY.credentials.createInsecure())}function PK(X){if(X===null||X===void 0)return{nullValue:"NULL_VALUE"};if(typeof X==="string")return{stringValue:X};if(typeof X==="number")return{numberValue:Number.isFinite(X)?X:0};if(typeof X==="boolean")return{boolValue:X};if(Array.isArray(X))return{listValue:{values:X.map((Y)=>PK(Y))}};if(typeof X==="object"){let Y={fields:{}};for(let[W,z]of Object.entries(X))Y.fields??={},Y.fields[W]=PK(z);return{structValue:Y}}return{stringValue:String(X)}}function wK(X){if(!X)return;if(X.nullValue!==void 0)return null;if(X.stringValue!==void 0)return X.stringValue;if(X.numberValue!==void 0)return X.numberValue;if(X.boolValue!==void 0)return X.boolValue;if(X.listValue)return(X.listValue.values??[]).map((Y)=>wK(Y));if(X.structValue){let Y={};for(let[W,z]of Object.entries(X.structValue.fields??{}))Y[W]=wK(z);return Y}return}function r9(X){let Y={};for(let[W,z]of Object.entries(X??{}))Y[W]=PK(z);return{fields:Y}}function O9(X){if(!X?.fields)return;let Y={};for(let[W,z]of Object.entries(X.fields))Y[W]=wK(z);return Y}function a7(X){return PK(X)}function r7(X){return wK(X??void 0)}function wX1(X){return{sessionId:X.sessionId,source:X.source,pid:X.pid,startedAt:X.startedAt,endedAt:X.endedAt??"",exitCode:X.exitCode??0,status:X.status,statusLock:X.statusLock,interactive:X.interactive,provider:X.provider,model:X.model,cwd:X.cwd,workspaceRoot:X.workspaceRoot,teamName:X.teamName??"",enableTools:X.enableTools,enableSpawn:X.enableSpawn,enableTeams:X.enableTeams,parentSessionId:X.parentSessionId??"",parentAgentId:X.parentAgentId??"",agentId:X.agentId??"",conversationId:X.conversationId??"",isSubagent:X.isSubagent,prompt:X.prompt??"",transcriptPath:X.transcriptPath,hookPath:X.hookPath,messagesPath:X.messagesPath??"",updatedAt:X.updatedAt,metadata:r9(X.metadata)}}function XJ0(X){return{sessionId:X.sessionId??"",source:X.source??"",pid:Number(X.pid??0),startedAt:X.startedAt??"",endedAt:X.endedAt?X.endedAt:null,exitCode:typeof X.exitCode==="number"?X.exitCode:null,status:X.status??"running",statusLock:Number(X.statusLock??0),interactive:X.interactive===!0,provider:X.provider??"",model:X.model??"",cwd:X.cwd??"",workspaceRoot:X.workspaceRoot??"",teamName:X.teamName||void 0,enableTools:X.enableTools===!0,enableSpawn:X.enableSpawn===!0,enableTeams:X.enableTeams===!0,parentSessionId:X.parentSessionId||void 0,parentAgentId:X.parentAgentId||void 0,agentId:X.agentId||void 0,conversationId:X.conversationId||void 0,isSubagent:X.isSubagent===!0,prompt:X.prompt||void 0,metadata:O9(X.metadata),transcriptPath:X.transcriptPath??"",hookPath:X.hookPath??"",messagesPath:X.messagesPath||void 0,updatedAt:X.updatedAt??""}}function SX1(X){let Y=X?.trim();if(!Y)return;try{let W=JSON.parse(Y);if(!Array.isArray(W))return;let z=W.map((F)=>typeof F==="string"?F.trim():"").filter((F)=>F.length>0);return z.length>0?z:void 0}catch{return}}function kY(X){return{scheduleId:X.scheduleId??"",name:X.name??"",cronPattern:X.cronPattern??"",prompt:X.prompt??"",provider:X.provider??"",model:X.model??"",mode:X.mode==="plan"?"plan":"act",workspaceRoot:X.workspaceRoot?.trim()||void 0,cwd:X.cwd?.trim()||void 0,systemPrompt:X.systemPrompt?.trim()||void 0,maxIterations:X.hasMaxIterations?X.maxIterations:void 0,timeoutSeconds:X.hasTimeoutSeconds?X.timeoutSeconds:void 0,maxParallel:typeof X.maxParallel==="number"&&X.maxParallel>0?X.maxParallel:1,enabled:X.enabled===!0,createdAt:X.createdAt??"",updatedAt:X.updatedAt??"",lastRunAt:X.lastRunAt?.trim()||void 0,nextRunAt:X.nextRunAt?.trim()||void 0,createdBy:X.createdBy?.trim()||void 0,tags:SX1(X.tagsJson??void 0),metadata:O9(X.metadata)}}function jA(X){return{executionId:X.executionId??"",scheduleId:X.scheduleId??"",sessionId:X.sessionId?.trim()||void 0,triggeredAt:X.triggeredAt??"",startedAt:X.startedAt?.trim()||void 0,endedAt:X.endedAt?.trim()||void 0,status:X.status==="pending"||X.status==="running"||X.status==="success"||X.status==="failed"||X.status==="timeout"||X.status==="aborted"?X.status:"failed",exitCode:X.hasExitCode?X.exitCode:void 0,errorMessage:X.errorMessage?.trim()||void 0,iterations:X.hasIterations?X.iterations:void 0,tokensUsed:X.hasTokensUsed?X.tokensUsed:void 0,costUsd:X.hasCostUsd?X.costUsd:void 0}}class aQ{client;constructor(X){this.client=PX1(X.address)}close(){this.client.close()}async upsertSession(X){await this.unary((Y)=>{let W={session:wX1(X)};this.client.UpsertSession(W,Y)})}async getSession(X){let Y=await this.unary((W)=>{this.client.GetSession({sessionId:X},W)});if(!Y.session)return;return XJ0(Y.session)}async listSessions(X){return((await this.unary((Y)=>{this.client.ListSessions(X,Y)})).sessions??[]).map((Y)=>XJ0(Y))}async updateSession(X){let Y={sessionId:X.sessionId,status:X.status,endedAt:X.endedAt??void 0,setRunning:X.setRunning};if(X.exitCode!==void 0)Y.hasExitCode=!0,Y.exitCode=X.exitCode??0;if(X.prompt!==void 0)Y.hasPrompt=!0,Y.prompt=X.prompt??"";if(X.metadata!==void 0)Y.hasMetadata=!0,Y.metadata=r9(X.metadata??void 0);if(X.parentSessionId!==void 0)Y.hasParentSessionId=!0,Y.parentSessionId=X.parentSessionId??"";if(X.parentAgentId!==void 0)Y.hasParentAgentId=!0,Y.parentAgentId=X.parentAgentId??"";if(X.agentId!==void 0)Y.hasAgentId=!0,Y.agentId=X.agentId??"";if(X.conversationId!==void 0)Y.hasConversationId=!0,Y.conversationId=X.conversationId??"";if(X.expectedStatusLock!==void 0)Y.hasExpectedStatusLock=!0,Y.expectedStatusLock=X.expectedStatusLock;let W=await this.unary((z)=>{this.client.UpdateSession(Y,z)});return{updated:W.updated===!0,statusLock:Number(W.statusLock??0)}}async deleteSession(X,Y=!1){return(await this.unary((W)=>{this.client.DeleteSession({sessionId:X,cascade:Y},W)})).deleted===!0}async enqueueSpawnRequest(X){await this.unary((Y)=>{this.client.EnqueueSpawnRequest(X,Y)})}async claimSpawnRequest(X,Y){let W=(await this.unary((z)=>{let F={rootSessionId:X,parentAgentId:Y};this.client.ClaimSpawnRequest(F,z)})).item?.task?.trim();return W?W:void 0}async startRuntimeSession(X){let Y={sessionId:X.sessionId??"",workspaceRoot:X.workspaceRoot,cwd:X.cwd??"",provider:X.provider,model:X.model,mode:X.mode,apiKey:X.apiKey,systemPrompt:X.systemPrompt??"",maxIterations:X.maxIterations??0,hasMaxIterations:typeof X.maxIterations==="number",enableTools:X.enableTools,enableSpawn:X.enableSpawn,enableTeams:X.enableTeams,autoApproveTools:X.autoApproveTools??!1,hasAutoApproveTools:typeof X.autoApproveTools==="boolean",teamName:X.teamName,missionStepInterval:X.missionStepInterval,missionTimeIntervalMs:X.missionTimeIntervalMs,toolPolicies:Object.fromEntries(Object.entries(X.toolPolicies??{}).map(([F,Q])=>[F,{enabled:Q.enabled!==!1,autoApprove:Q.autoApprove??!1}])),initialMessages:(X.initialMessages??[]).map((F)=>({role:F.role??"",content:a7(F.content)})),logger:X.logger?{enabled:X.logger.enabled??!1,level:X.logger.level??"",destination:X.logger.destination??"",name:X.logger.name??"",bindings:r9(X.logger.bindings)}:void 0},W=await this.unary((F)=>{this.client.StartRuntimeSession({request:Y},F)}),z=W.startResult?{sessionId:W.startResult.sessionId??"",manifestPath:W.startResult.manifestPath??"",transcriptPath:W.startResult.transcriptPath??"",hookPath:W.startResult.hookPath??"",messagesPath:W.startResult.messagesPath??""}:void 0;return{sessionId:W.sessionId??"",startResult:z}}async sendRuntimeSession(X,Y){let W={config:{workspaceRoot:Y.config.workspaceRoot,cwd:Y.config.cwd??"",provider:Y.config.provider,model:Y.config.model,mode:Y.config.mode,apiKey:Y.config.apiKey,systemPrompt:Y.config.systemPrompt??"",maxIterations:Y.config.maxIterations??0,hasMaxIterations:typeof Y.config.maxIterations==="number",enableTools:Y.config.enableTools,enableSpawn:Y.config.enableSpawn,enableTeams:Y.config.enableTeams,autoApproveTools:Y.config.autoApproveTools??!1,hasAutoApproveTools:typeof Y.config.autoApproveTools==="boolean",teamName:Y.config.teamName,missionStepInterval:Y.config.missionStepInterval,missionTimeIntervalMs:Y.config.missionTimeIntervalMs,toolPolicies:Object.fromEntries(Object.entries(Y.config.toolPolicies??{}).map(([F,Q])=>[F,{enabled:Q.enabled!==!1,autoApprove:Q.autoApprove??!1}])),initialMessages:(Y.config.initialMessages??[]).map((F)=>({role:F.role??"",content:a7(F.content)})),logger:Y.config.logger?{enabled:Y.config.logger.enabled??!1,level:Y.config.logger.level??"",destination:Y.config.logger.destination??"",name:Y.config.logger.name??"",bindings:r9(Y.config.logger.bindings)}:void 0},messages:(Y.messages??[]).map((F)=>({role:F.role??"",content:a7(F.content)})),prompt:Y.prompt,delivery:Y.delivery,attachments:Y.attachments?{userImages:Y.attachments.userImages??[],userFiles:(Y.attachments.userFiles??[]).map((F)=>({name:F.name,content:F.content}))}:void 0},z=await this.unary((F)=>{this.client.SendRuntimeSession({sessionId:X,request:W},F)});if(!z.result)return{queued:!0};return{result:{text:z.result.text??"",usage:{inputTokens:Number(z.result.usage?.inputTokens??0),outputTokens:Number(z.result.usage?.outputTokens??0),cacheReadTokens:z.result.usage?.hasCacheReadTokens?Number(z.result.usage?.cacheReadTokens??0):void 0,cacheWriteTokens:z.result.usage?.hasCacheWriteTokens?Number(z.result.usage?.cacheWriteTokens??0):void 0,totalCost:z.result.usage?.hasTotalCost?Number(z.result.usage?.totalCost??0):void 0},inputTokens:Number(z.result.inputTokens??0),outputTokens:Number(z.result.outputTokens??0),iterations:Number(z.result.iterations??0),finishReason:z.result.finishReason??"",messages:(z.result.messages??[]).map((F)=>({role:F.role??"",content:r7(F.content)})),toolCalls:(z.result.toolCalls??[]).map((F)=>({name:F.name??"",input:F.hasInput?r7(F.input):void 0,output:F.hasOutput?r7(F.output):void 0,error:F.error?.trim()||void 0,durationMs:F.hasDurationMs?Number(F.durationMs??0):void 0}))},queued:!1}}async abortRuntimeSession(X){return{applied:(await this.unary((Y)=>{this.client.AbortRuntimeSession({sessionId:X},Y)})).applied===!0}}async requestToolApproval(X){let Y={approvalId:X.approvalId,sessionId:X.sessionId,taskId:X.taskId,toolCallId:X.toolCallId,toolName:X.toolName,inputJson:X.inputJson,requesterClientId:X.requesterClientId,timeoutMs:X.timeoutMs},W=await this.unary((z)=>{this.client.RequestToolApproval(Y,z)});return{approvalId:W.approvalId??"",decided:W.decided===!0,approved:W.approved===!0,reason:W.reason??""}}async respondToolApproval(X){let Y={approvalId:X.approvalId,approved:X.approved,reason:X.reason,responderClientId:X.responderClientId},W=await this.unary((z)=>{this.client.RespondToolApproval(Y,z)});return{approvalId:W.approvalId??"",applied:W.applied===!0}}async listPendingApprovals(X){return((await this.unary((Y)=>{this.client.ListPendingApprovals({sessionId:X},Y)})).approvals??[]).map((Y)=>({approvalId:Y.approvalId??"",sessionId:Y.sessionId??"",taskId:Y.taskId??"",toolCallId:Y.toolCallId??"",toolName:Y.toolName??"",inputJson:Y.inputJson??"",requesterClientId:Y.requesterClientId??"",createdAt:Y.createdAt??""}))}async createSchedule(X){let Y=await this.unary((W)=>{this.client.CreateSchedule({name:X.name,cronPattern:X.cronPattern,prompt:X.prompt,provider:X.provider,model:X.model,mode:X.mode??"act",workspaceRoot:X.workspaceRoot,cwd:X.cwd,systemPrompt:X.systemPrompt,maxIterations:X.maxIterations??0,hasMaxIterations:typeof X.maxIterations==="number",timeoutSeconds:X.timeoutSeconds??0,hasTimeoutSeconds:typeof X.timeoutSeconds==="number",maxParallel:X.maxParallel??1,enabled:X.enabled??!0,createdBy:X.createdBy,tagsJson:X.tags?JSON.stringify(X.tags):"",metadata:r9(X.metadata)},W)});return Y.schedule?kY(Y.schedule):void 0}async getSchedule(X){let Y=await this.unary((W)=>{this.client.GetSchedule({scheduleId:X},W)});return Y.schedule?kY(Y.schedule):void 0}async listSchedules(X){return((await this.unary((Y)=>{this.client.ListSchedules({limit:X?.limit??100,hasEnabled:typeof X?.enabled==="boolean",enabled:X?.enabled??!1,tagsJson:X?.tags?JSON.stringify(X.tags):""},Y)})).schedules??[]).map((Y)=>kY(Y))}async updateSchedule(X,Y){let W={scheduleId:X};if(Y.name!==void 0)W.hasName=!0,W.name=Y.name;if(Y.cronPattern!==void 0)W.hasCronPattern=!0,W.cronPattern=Y.cronPattern;if(Y.prompt!==void 0)W.hasPrompt=!0,W.prompt=Y.prompt;if(Y.provider!==void 0)W.hasProvider=!0,W.provider=Y.provider;if(Y.model!==void 0)W.hasModel=!0,W.model=Y.model;if(Y.mode!==void 0)W.hasMode=!0,W.mode=Y.mode;if(Y.workspaceRoot!==void 0)W.hasWorkspaceRoot=!0,W.workspaceRoot=Y.workspaceRoot;if(Y.cwd!==void 0)W.hasCwd=!0,W.cwd=Y.cwd;if(Y.systemPrompt!==void 0)W.hasSystemPrompt=!0,W.systemPrompt=Y.systemPrompt;if(Y.maxIterations===null)W.clearMaxIterations=!0;else if(Y.maxIterations!==void 0)W.hasMaxIterations=!0,W.maxIterations=Y.maxIterations;if(Y.timeoutSeconds===null)W.clearTimeoutSeconds=!0;else if(Y.timeoutSeconds!==void 0)W.hasTimeoutSeconds=!0,W.timeoutSeconds=Y.timeoutSeconds;if(Y.maxParallel!==void 0)W.hasMaxParallel=!0,W.maxParallel=Y.maxParallel;if(Y.enabled!==void 0)W.hasEnabled=!0,W.enabled=Y.enabled;if(Y.createdBy===null)W.clearCreatedBy=!0;else if(Y.createdBy!==void 0)W.hasCreatedBy=!0,W.createdBy=Y.createdBy;if(Y.tags!==void 0)W.hasTagsJson=!0,W.tagsJson=JSON.stringify(Y.tags);if(Y.metadata!==void 0)W.hasMetadata=!0,W.metadata=r9(Y.metadata);let z=await this.unary((F)=>{this.client.UpdateSchedule(W,F)});return z.schedule?kY(z.schedule):void 0}async deleteSchedule(X){return(await this.unary((Y)=>{this.client.DeleteSchedule({scheduleId:X},Y)})).deleted===!0}async pauseSchedule(X){let Y=await this.unary((W)=>{this.client.PauseSchedule({scheduleId:X},W)});return Y.schedule?kY(Y.schedule):void 0}async resumeSchedule(X){let Y=await this.unary((W)=>{this.client.ResumeSchedule({scheduleId:X},W)});return Y.schedule?kY(Y.schedule):void 0}async triggerScheduleNow(X){let Y=await this.unary((W)=>{this.client.TriggerScheduleNow({scheduleId:X},W)});return Y.execution?jA(Y.execution):void 0}async listScheduleExecutions(X){return((await this.unary((Y)=>{this.client.ListScheduleExecutions({scheduleId:X.scheduleId,status:X.status,limit:X.limit??50},Y)})).executions??[]).map((Y)=>jA(Y))}async getScheduleStats(X){let Y=await this.unary((W)=>{this.client.GetScheduleStats({scheduleId:X},W)});return{totalRuns:Number(Y.totalRuns??0),successRate:Number(Y.successRate??0),avgDurationSeconds:Number(Y.avgDurationSeconds??0),lastFailure:Y.lastFailure?jA(Y.lastFailure):void 0}}async getActiveScheduledExecutions(){return((await this.unary((X)=>{this.client.GetActiveScheduledExecutions({},X)})).executions??[]).map((X)=>({executionId:X.executionId??"",scheduleId:X.scheduleId??"",sessionId:X.sessionId??"",startedAt:X.startedAt??"",timeoutAt:X.timeoutAt?.trim()||void 0}))}async getUpcomingScheduledRuns(X=20){return((await this.unary((Y)=>{this.client.GetUpcomingScheduledRuns({limit:X},Y)})).runs??[]).map((Y)=>({scheduleId:Y.scheduleId??"",name:Y.name??"",nextRunAt:Y.nextRunAt??""}))}async stopRuntimeSession(X){return{applied:(await this.unary((Y)=>{this.client.StopRuntimeSession({sessionId:X},Y)})).applied===!0}}async runProviderAction(X){let Y=X.action==="listProviders"?{listProviders:{}}:X.action==="getProviderModels"?{getProviderModels:{providerId:X.providerId}}:X.action==="addProvider"?{addProvider:{providerId:X.providerId,name:X.name,baseUrl:X.baseUrl,apiKey:X.apiKey??"",headers:X.headers??{},timeoutMs:X.timeoutMs??0,hasTimeoutMs:typeof X.timeoutMs==="number",models:X.models??[],defaultModelId:X.defaultModelId??"",modelsSourceUrl:X.modelsSourceUrl??"",capabilities:X.capabilities??[]}}:X.action==="saveProviderSettings"?{saveProviderSettings:{providerId:X.providerId,enabled:X.enabled??!1,hasEnabled:typeof X.enabled==="boolean",apiKey:X.apiKey??"",hasApiKey:X.apiKey!==void 0,baseUrl:X.baseUrl??"",hasBaseUrl:X.baseUrl!==void 0}}:{clineAccount:{operation:X.operation,userId:"userId"in X?X.userId??"":"",organizationId:"organizationId"in X?X.organizationId??"":"",memberId:"memberId"in X?X.memberId??"":"",clearOrganizationId:"organizationId"in X&&X.organizationId===null}},W=await this.unary((z)=>{this.client.RunProviderAction({request:Y},z)});return{result:r7(W.result)}}async runProviderOAuthLogin(X){let Y=await this.unary((W)=>{this.client.RunProviderOAuthLogin({provider:X},W)});return{provider:Y.provider??"",accessToken:Y.apiKey??""}}async publishEvent(X){let Y=await this.unary((W)=>{this.client.PublishEvent({eventId:X.eventId,sessionId:X.sessionId,taskId:X.taskId,eventType:X.eventType,payload:r9(X.payload),sourceClientId:X.sourceClientId},W)});return{eventId:Y.eventId??"",accepted:Y.accepted===!0}}streamEvents(X,Y={}){let W=!1,z=this.client.StreamEvents({clientId:X.clientId??"",sessionIds:X.sessionIds??[]}),F=(Z)=>{Y.onEvent?.({eventId:Z.eventId??"",sessionId:Z.sessionId??"",taskId:Z.taskId?.trim()?Z.taskId:void 0,eventType:Z.eventType??"",payload:O9(Z.payload)??{},sourceClientId:Z.sourceClientId?.trim()?Z.sourceClientId:void 0,ts:Z.ts??""})},Q=(Z)=>{let K=(typeof Z.code==="number"?Number(Z.code):void 0)===1||Z.message.includes("CANCELLED");if(W&&K)return;Y.onError?.(Z)},J=()=>{Y.onEnd?.()};return z.on("data",F),z.on("error",Q),z.on("end",J),()=>{W=!0,z.cancel()}}streamTeamProgress(X,Y={}){return this.streamEvents(X,{onEvent:(W)=>{if(W.eventType===V3){try{let z=W.payload;if(z.type==="team_progress_projection"&&z.version===1)Y.onProjection?.(z)}catch{}return}if(W.eventType===B3)try{Y.onLifecycle?.(W.payload)}catch{}},onError:Y.onError,onEnd:Y.onEnd})}async unary(X){return await new Promise((Y,W)=>{X((z,F)=>{if(z){W(z);return}Y(F??{})})})}}var fX1="cline.rpc.v1",zJ0="ClineGateway";function yX1(){return WJ0(import.meta.url)}function kX1(){let X=FJ0.loadSync(yX1(),{keepCase:!1,longs:String,enums:String,defaults:!0,oneofs:!0}),Y=KJ0.loadPackageDefinition(X).cline?.rpc?.v1?.ClineGateway?.service;if(!Y)throw Error(`Unable to load ${fX1}.${zJ0} from proto`);return Y}function jY(){return new Date().toISOString()}function b0(X){return typeof X==="string"?X:""}function vX1(X){if(!X||typeof X!=="object")return{};let Y={};for(let[W,z]of Object.entries(X)){let F=W.trim();if(!F)continue;let Q=b0(z).trim();if(!Q)continue;Y[F]=Q}return Y}function jX1(X){if(!Array.isArray(X)||X.length===0)return;let Y=new Set;for(let W of X){let z=W.trim();if(z)Y.add(z)}return Y.size>0?Y:void 0}function qJ0(X){if(X==="running"||X==="completed"||X==="failed"||X==="cancelled")return X;return"running"}function YJ0(X){return{sessionId:X.sessionId,source:X.source,pid:X.pid,startedAt:X.startedAt,endedAt:X.endedAt??"",exitCode:X.exitCode??0,status:X.status,statusLock:X.statusLock,interactive:X.interactive,provider:X.provider,model:X.model,cwd:X.cwd,workspaceRoot:X.workspaceRoot,teamName:X.teamName??"",enableTools:X.enableTools,enableSpawn:X.enableSpawn,enableTeams:X.enableTeams,parentSessionId:X.parentSessionId??"",parentAgentId:X.parentAgentId??"",agentId:X.agentId??"",conversationId:X.conversationId??"",isSubagent:X.isSubagent,prompt:X.prompt??"",transcriptPath:X.transcriptPath,hookPath:X.hookPath,messagesPath:X.messagesPath??"",updatedAt:X.updatedAt,metadata:r9(X.metadata)}}function hX1(X){let Y=b0(X.sessionId).trim(),W=b0(X.source).trim(),z=b0(X.startedAt).trim(),F=b0(X.provider).trim(),Q=b0(X.model).trim(),J=b0(X.cwd).trim(),Z=b0(X.workspaceRoot).trim(),K=b0(X.transcriptPath).trim(),H=b0(X.hookPath).trim();if(!Y||!W||!z||!F||!Q||!J||!Z||!K||!H)throw Error("session record is missing required fields");return{sessionId:Y,source:W,pid:Number(X.pid??0),startedAt:z,endedAt:b0(X.endedAt).trim()||null,exitCode:typeof X.exitCode==="number"?Math.floor(X.exitCode):null,status:qJ0(b0(X.status).trim()),statusLock:typeof X.statusLock==="number"?Math.floor(X.statusLock):0,interactive:X.interactive===!0,provider:F,model:Q,cwd:J,workspaceRoot:Z,teamName:b0(X.teamName).trim()||void 0,enableTools:X.enableTools===!0,enableSpawn:X.enableSpawn===!0,enableTeams:X.enableTeams===!0,parentSessionId:b0(X.parentSessionId).trim()||void 0,parentAgentId:b0(X.parentAgentId).trim()||void 0,agentId:b0(X.agentId).trim()||void 0,conversationId:b0(X.conversationId).trim()||void 0,isSubagent:X.isSubagent===!0,prompt:b0(X.prompt).trim()||void 0,metadata:O9(X.metadata),transcriptPath:K,hookPath:H,messagesPath:b0(X.messagesPath).trim()||void 0,updatedAt:b0(X.updatedAt).trim()||jY()}}function hA(X){let Y=b0(X).trim();if(!Y)return;try{let W=JSON.parse(Y);if(!Array.isArray(W))return;let z=W.map((F)=>typeof F==="string"?F.trim():"").filter((F)=>F.length>0);return z.length>0?z:void 0}catch{return}}function vY(X){return{scheduleId:X.scheduleId,name:X.name,cronPattern:X.cronPattern,prompt:X.prompt,provider:X.provider,model:X.model,mode:X.mode,workspaceRoot:X.workspaceRoot??"",cwd:X.cwd??"",systemPrompt:X.systemPrompt??"",maxIterations:X.maxIterations??0,hasMaxIterations:typeof X.maxIterations==="number",timeoutSeconds:X.timeoutSeconds??0,hasTimeoutSeconds:typeof X.timeoutSeconds==="number",maxParallel:X.maxParallel,enabled:X.enabled,createdAt:X.createdAt,updatedAt:X.updatedAt,lastRunAt:X.lastRunAt??"",nextRunAt:X.nextRunAt??"",createdBy:X.createdBy??"",tagsJson:X.tags?JSON.stringify(X.tags):"",metadata:r9(X.metadata)}}function _A(X){return{executionId:X.executionId,scheduleId:X.scheduleId,sessionId:X.sessionId??"",triggeredAt:X.triggeredAt,startedAt:X.startedAt??"",endedAt:X.endedAt??"",status:X.status,exitCode:X.exitCode??0,hasExitCode:typeof X.exitCode==="number",errorMessage:X.errorMessage??"",iterations:X.iterations??0,hasIterations:typeof X.iterations==="number",tokensUsed:X.tokensUsed??0,hasTokensUsed:typeof X.tokensUsed==="number",costUsd:X.costUsd??0,hasCostUsd:typeof X.costUsd==="number"}}function HJ0(X){return new(SK.makeGenericClientConstructor(kX1(),zJ0))(X,SK.credentials.createInsecure())}async function a4(X){return await new Promise((Y)=>{let W;try{W=HJ0(X)}catch{Y(void 0);return}W.Health({},(z,F)=>{if(W?.close(),z||!F){Y(void 0);return}Y(F)})})}async function VJ0(X){return await new Promise((Y)=>{let W;try{W=HJ0(X)}catch{Y(void 0);return}W.Shutdown({},(z,F)=>{if(W?.close(),z||!F){Y(void 0);return}Y(F)})})}var _X1="0.0.26",rQ="1",BJ0=_X1,bX1=300000;class UJ0{publishEvent;approvals=new Map;constructor(X){this.publishEvent=X}async requestToolApproval(X){let Y=b0(X.sessionId).trim(),W=b0(X.toolCallId).trim(),z=b0(X.toolName).trim();if(!Y||!W||!z)throw Error("sessionId, toolCallId, and toolName are required");let F=b0(X.approvalId).trim()||`apr_${xX1()}`;if(!this.approvals.get(F)){let K={approvalId:F,sessionId:Y,taskId:b0(X.taskId).trim()||void 0,toolCallId:W,toolName:z,inputJson:b0(X.inputJson),requesterClientId:b0(X.requesterClientId).trim()||void 0,createdAt:jY(),status:"pending",waiters:[]};this.approvals.set(F,K),this.publishEvent({eventId:"",sessionId:Y,taskId:K.taskId,eventType:"approval.requested",payload:r9(K),sourceClientId:K.requesterClientId})}let Q=this.approvals.get(F);if(!Q)throw Error("approval state not found");if(Q.status==="approved"||Q.status==="rejected")return{approvalId:F,decided:!0,approved:Q.status==="approved",reason:Q.reason??""};let J=typeof X.timeoutMs==="number"&&X.timeoutMs>0?Math.floor(X.timeoutMs):bX1,Z=await new Promise((K)=>{let H=setTimeout(()=>{K({decided:!1,approved:!1,reason:"Tool approval request timed out"})},J);Q.waiters.push((G)=>{clearTimeout(H),K(G)})});return{approvalId:F,decided:Z.decided,approved:Z.approved,reason:Z.reason??""}}respondToolApproval(X){let Y=b0(X.approvalId).trim();if(!Y)throw Error("approvalId is required");let W=this.approvals.get(Y);if(!W)return{approvalId:Y,applied:!1};W.status=X.approved===!0?"approved":"rejected",W.reason=b0(X.reason).trim()||void 0;let z={decided:!0,approved:W.status==="approved",reason:W.reason};for(let F of W.waiters.splice(0))F(z);return this.publishEvent({eventId:"",sessionId:W.sessionId,taskId:W.taskId,eventType:"approval.decided",payload:r9({approvalId:Y,approved:z.approved,reason:z.reason??"",responderClientId:b0(X.responderClientId).trim()||""}),sourceClientId:b0(X.responderClientId).trim()||""}),{approvalId:Y,applied:!0}}listPendingApprovals(X){let Y=b0(X.sessionId).trim(),W=[];for(let z of this.approvals.values()){if(z.status!=="pending")continue;if(Y&&z.sessionId!==Y)continue;W.push({approvalId:z.approvalId,sessionId:z.sessionId,taskId:z.taskId??"",toolCallId:z.toolCallId,toolName:z.toolName,inputJson:z.inputJson,requesterClientId:z.requesterClientId??"",createdAt:z.createdAt})}return W.sort((z,F)=>(z.createdAt??"").localeCompare(F.createdAt??"")),{approvals:W}}}class NJ0{subscribers=new Map;nextSubscriberId=1;publishEvent(X){let Y=b0(X.sessionId).trim();if(!Y)throw Error("sessionId is required");let W={eventId:b0(X.eventId).trim()||`evt_${QJ0()}`,sessionId:Y,taskId:b0(X.taskId).trim()||void 0,eventType:b0(X.eventType).trim()||"unknown",payload:O9(X.payload)??{},sourceClientId:b0(X.sourceClientId).trim()||void 0,ts:jY()};return this.dispatchEvent(W),{eventId:W.eventId,accepted:!0}}addSubscriber(X){let Y=X.request,W=jX1(Y.sessionIds),z=this.nextSubscriberId;return this.nextSubscriberId+=1,this.subscribers.set(z,{call:X,filterSessionIds:W}),X.on("cancelled",()=>{this.subscribers.delete(z)}),X.on("close",()=>{this.subscribers.delete(z)}),z}removeSubscriber(X){this.subscribers.delete(X)}broadcastServerEvent(X,Y){let W=`evt_${QJ0()}`,z=jY();for(let F of this.subscribers.values())F.call.write({eventId:W,sessionId:"__rpc__",taskId:"",eventType:X,payload:r9(Y),sourceClientId:"rpc-server",ts:z})}dispatchEvent(X){for(let Y of this.subscribers.values()){if(Y.filterSessionIds&&!Y.filterSessionIds.has(X.sessionId))continue;Y.call.write({eventId:X.eventId,sessionId:X.sessionId,taskId:X.taskId??"",eventType:X.eventType,payload:r9(X.payload),sourceClientId:X.sourceClientId??"",ts:X.ts})}}}class AJ0{scheduler;constructor(X){this.scheduler=X}createSchedule(X){let Y=this.requireScheduler(),W={name:b0(X.name).trim(),cronPattern:b0(X.cronPattern).trim(),prompt:b0(X.prompt),provider:b0(X.provider).trim(),model:b0(X.model).trim(),mode:b0(X.mode).trim()==="plan"?"plan":"act",workspaceRoot:b0(X.workspaceRoot).trim()||void 0,cwd:b0(X.cwd).trim()||void 0,systemPrompt:b0(X.systemPrompt)||void 0,maxIterations:X.hasMaxIterations?Math.floor(X.maxIterations??0):void 0,timeoutSeconds:X.hasTimeoutSeconds?Math.floor(X.timeoutSeconds??0):void 0,maxParallel:typeof X.maxParallel==="number"&&X.maxParallel>0?Math.floor(X.maxParallel):1,enabled:X.enabled!==!1,createdBy:b0(X.createdBy).trim()||void 0,tags:hA(b0(X.tagsJson)),metadata:O9(X.metadata)};if(!W.name||!W.cronPattern||!W.prompt.trim()||!W.provider||!W.model)throw Error("name, cronPattern, prompt, provider, and model are required");let z=Y.createSchedule(W);return{schedule:vY(z)}}getSchedule(X){let Y=this.requireScheduler(),W=b0(X.scheduleId).trim();if(!W)throw Error("scheduleId is required");let z=Y.getSchedule(W);return z?{schedule:vY(z)}:{}}listSchedules(X){return{schedules:this.requireScheduler().listSchedules({enabled:X.hasEnabled?X.enabled===!0:void 0,limit:typeof X.limit==="number"&&X.limit>0?Math.floor(X.limit):void 0,tags:hA(b0(X.tagsJson))}).map((Y)=>vY(Y))}}updateSchedule(X){let Y=this.requireScheduler(),W=b0(X.scheduleId).trim();if(!W)throw Error("scheduleId is required");let z={};if(X.hasName)z.name=b0(X.name);if(X.hasCronPattern)z.cronPattern=b0(X.cronPattern);if(X.hasPrompt)z.prompt=b0(X.prompt);if(X.hasProvider)z.provider=b0(X.provider);if(X.hasModel)z.model=b0(X.model);if(X.hasMode)z.mode=b0(X.mode).trim()==="plan"?"plan":"act";if(X.hasWorkspaceRoot)z.workspaceRoot=b0(X.workspaceRoot);if(X.hasCwd)z.cwd=b0(X.cwd);if(X.hasSystemPrompt)z.systemPrompt=b0(X.systemPrompt);if(X.clearMaxIterations)z.maxIterations=null;else if(X.hasMaxIterations)z.maxIterations=Math.floor(X.maxIterations??0);if(X.clearTimeoutSeconds)z.timeoutSeconds=null;else if(X.hasTimeoutSeconds)z.timeoutSeconds=Math.floor(X.timeoutSeconds??0);if(X.hasMaxParallel)z.maxParallel=Math.floor(X.maxParallel??1);if(X.hasEnabled)z.enabled=X.enabled===!0;if(X.clearCreatedBy)z.createdBy=null;else if(X.hasCreatedBy)z.createdBy=b0(X.createdBy);if(X.hasTagsJson)z.tags=hA(b0(X.tagsJson))??[];if(X.hasMetadata)z.metadata=O9(X.metadata)??{};let F=Y.updateSchedule(W,z);return{updated:F!==void 0,schedule:F?vY(F):void 0}}deleteSchedule(X){let Y=this.requireScheduler(),W=b0(X.scheduleId).trim();if(!W)throw Error("scheduleId is required");return{deleted:Y.deleteSchedule(W)}}pauseSchedule(X){let Y=this.requireScheduler(),W=b0(X.scheduleId).trim();if(!W)throw Error("scheduleId is required");let z=Y.pauseSchedule(W);return{updated:z!==void 0,schedule:z?vY(z):void 0}}resumeSchedule(X){let Y=this.requireScheduler(),W=b0(X.scheduleId).trim();if(!W)throw Error("scheduleId is required");let z=Y.resumeSchedule(W);return{updated:z!==void 0,schedule:z?vY(z):void 0}}async triggerScheduleNow(X){let Y=this.requireScheduler(),W=b0(X.scheduleId).trim();if(!W)throw Error("scheduleId is required");let z=await Y.triggerScheduleNow(W);return z?{execution:_A(z)}:{}}listScheduleExecutions(X){let Y=this.requireScheduler(),W=b0(X.scheduleId).trim()||void 0,z=b0(X.status).trim()||void 0;return{executions:Y.listScheduleExecutions({scheduleId:W,status:z==="pending"||z==="running"||z==="success"||z==="failed"||z==="timeout"||z==="aborted"?z:void 0,limit:typeof X.limit==="number"&&X.limit>0?Math.floor(X.limit):void 0}).map((F)=>_A(F))}}getScheduleStats(X){let Y=this.requireScheduler(),W=b0(X.scheduleId).trim();if(!W)throw Error("scheduleId is required");let z=Y.getScheduleStats(W);return{totalRuns:z.totalRuns,successRate:z.successRate,avgDurationSeconds:z.avgDurationSeconds,lastFailure:z.lastFailure?_A(z.lastFailure):void 0}}getActiveScheduledExecutions(X){return{executions:this.requireScheduler().getActiveExecutions().map((Y)=>({executionId:Y.executionId,scheduleId:Y.scheduleId,sessionId:Y.sessionId,startedAt:Y.startedAt,timeoutAt:Y.timeoutAt??""}))}}getUpcomingScheduledRuns(X){let Y=this.requireScheduler(),W=typeof X.limit==="number"&&X.limit>0?Math.floor(X.limit):20;return{runs:Y.getUpcomingRuns(W).map((z)=>({scheduleId:z.scheduleId,name:z.name,nextRunAt:z.nextRunAt}))}}requireScheduler(){if(!this.scheduler)throw Error("scheduler service is not configured");return this.scheduler}}class uX1{serverId=ZJ0();address;startedAt;runtimeHandlers;sessions=new Map;tasks=new Map;clients=new Map;store;eventService=new NJ0;approvalService=new UJ0((X)=>this.eventService.publishEvent(X));scheduleService;constructor(X,Y,W,z){this.address=X,this.startedAt=jY(),this.store=Y,this.runtimeHandlers=W,this.scheduleService=new AJ0(z),this.store.init()}health(){return{serverId:this.serverId,address:this.address,running:!0,startedAt:this.startedAt,rpcVersion:rQ}}registerClient(X){let Y=b0(X.clientId).trim()||`client_${ZJ0()}`,W=b0(X.clientType).trim()||void 0,z=vX1(X),F=jY(),Q=this.clients.get(Y),J=Q?{...Q,clientType:W??Q.clientType,metadata:Object.keys(z).length>0?{...Q.metadata??{},...z}:Q.metadata,lastRegisteredAt:F,activationCount:Q.activationCount+1}:{clientId:Y,clientType:W,metadata:Object.keys(z).length>0?z:void 0,firstRegisteredAt:F,lastRegisteredAt:F,activationCount:1};return this.clients.set(Y,J),this.broadcastServerEvent("rpc.client.activated",{clientId:J.clientId,clientType:J.clientType,metadata:J.metadata??{},firstRegisteredAt:J.firstRegisteredAt,lastRegisteredAt:J.lastRegisteredAt,activationCount:J.activationCount}),{clientId:Y,registered:!0}}ensureSession(X){let Y=b0(X.sessionId).trim();if(!Y)throw Error("sessionId is required");let W=this.sessions.get(Y);if(W)return W.status=b0(X.status).trim()||W.status,W.workspaceRoot=b0(X.workspaceRoot).trim()||W.workspaceRoot,W.clientId=b0(X.clientId).trim()||W.clientId,W.metadata=O9(X.metadata)??W.metadata,{sessionId:Y,created:!1,status:W.status};let z=b0(X.status).trim()||"running";return this.sessions.set(Y,{sessionId:Y,status:z,workspaceRoot:b0(X.workspaceRoot).trim()||void 0,clientId:b0(X.clientId).trim()||void 0,metadata:O9(X.metadata)}),{sessionId:Y,created:!0,status:z}}upsertSession(X){if(!X.session)throw Error("session is required");return this.store.upsertSession(hX1(X.session)),{persisted:!0}}getSession(X){let Y=b0(X.sessionId).trim();if(!Y)throw Error("sessionId is required");let W=this.store.getSession(Y);if(!W)return{};return{session:YJ0(W)}}listSessions(X){let Y=typeof X.limit==="number"&&X.limit>0?Math.floor(X.limit):200;return{sessions:this.store.listSessions({limit:Y,parentSessionId:b0(X.parentSessionId).trim()||void 0,status:b0(X.status).trim()||void 0}).map((W)=>YJ0(W))}}updateSession(X){let Y=b0(X.sessionId).trim();if(!Y)throw Error("sessionId is required");return this.store.updateSession({sessionId:Y,status:X.status?qJ0(X.status):void 0,endedAt:X.endedAt?X.endedAt:void 0,exitCode:X.hasExitCode?X.exitCode??null:void 0,prompt:X.hasPrompt?X.prompt??null:void 0,metadata:X.hasMetadata?O9(X.metadata)??null:void 0,parentSessionId:X.hasParentSessionId?X.parentSessionId??null:void 0,parentAgentId:X.hasParentAgentId?X.parentAgentId??null:void 0,agentId:X.hasAgentId?X.agentId??null:void 0,conversationId:X.hasConversationId?X.conversationId??null:void 0,expectedStatusLock:X.hasExpectedStatusLock?X.expectedStatusLock:void 0,setRunning:X.setRunning===!0})}deleteSession(X){let Y=b0(X.sessionId).trim();if(!Y)throw Error("sessionId is required");let W=this.store.deleteSession(Y);if(X.cascade===!0)this.store.deleteSessionsByParent(Y);return{deleted:W}}enqueueSpawnRequest(X){let Y=b0(X.rootSessionId).trim(),W=b0(X.parentAgentId).trim();if(!Y||!W)throw Error("rootSessionId and parentAgentId are required");return this.store.enqueueSpawnRequest({rootSessionId:Y,parentAgentId:W,task:b0(X.task).trim()||void 0,systemPrompt:b0(X.systemPrompt).trim()||void 0}),{enqueued:!0}}claimSpawnRequest(X){let Y=b0(X.rootSessionId).trim(),W=b0(X.parentAgentId).trim();if(!Y||!W)throw Error("rootSessionId and parentAgentId are required");let z=this.store.claimSpawnRequest(Y,W);if(!z)return{};return{item:{id:String(z.id),rootSessionId:z.rootSessionId,parentAgentId:z.parentAgentId,task:z.task??"",systemPrompt:z.systemPrompt??"",createdAt:z.createdAt,consumedAt:z.consumedAt??""}}}async startRuntimeSession(X){let Y=this.runtimeHandlers?.startSession;if(!Y)throw Error("runtime start handler is not configured");let W=X.request?{sessionId:b0(X.request.sessionId),workspaceRoot:b0(X.request.workspaceRoot),cwd:b0(X.request.cwd),provider:b0(X.request.provider),model:b0(X.request.model),mode:b0(X.request.mode),apiKey:b0(X.request.apiKey),systemPrompt:b0(X.request.systemPrompt),maxIterations:X.request.hasMaxIterations?X.request.maxIterations:void 0,enableTools:X.request.enableTools===!0,enableSpawn:X.request.enableSpawn===!0,enableTeams:X.request.enableTeams===!0,autoApproveTools:X.request.hasAutoApproveTools?X.request.autoApproveTools===!0:void 0,teamName:b0(X.request.teamName),missionStepInterval:X.request.missionStepInterval??3,missionTimeIntervalMs:X.request.missionTimeIntervalMs??120000,toolPolicies:Object.fromEntries(Object.entries(X.request.toolPolicies??{}).map(([Q,J])=>[Q,{enabled:J?.enabled===!0,autoApprove:J?.autoApprove===!0}])),initialMessages:(X.request.initialMessages??[]).map((Q)=>({role:b0(Q.role),content:r7(Q.content)})),logger:X.request.logger?{enabled:X.request.logger.enabled===!0,level:b0(X.request.logger.level),destination:b0(X.request.logger.destination),name:b0(X.request.logger.name),bindings:O9(X.request.logger.bindings)}:void 0}:void 0;if(!W)throw Error("runtime start request is required");let z=await Y(W),F=b0(z.sessionId).trim();if(!F)throw Error("runtime start handler returned empty sessionId");return{sessionId:F,startResult:z.startResult?{sessionId:b0(z.startResult.sessionId),manifestPath:b0(z.startResult.manifestPath),transcriptPath:b0(z.startResult.transcriptPath),hookPath:b0(z.startResult.hookPath),messagesPath:b0(z.startResult.messagesPath)}:void 0}}async sendRuntimeSession(X){let Y=this.runtimeHandlers?.sendSession;if(!Y)throw Error("runtime send handler is not configured");let W=b0(X.sessionId).trim();if(!W)throw Error("sessionId is required");let z=X.request?.delivery==="queue"||X.request?.delivery==="steer"?X.request.delivery:void 0,F=X.request?{config:{workspaceRoot:b0(X.request.config?.workspaceRoot),cwd:b0(X.request.config?.cwd),provider:b0(X.request.config?.provider),model:b0(X.request.config?.model),mode:b0(X.request.config?.mode),apiKey:b0(X.request.config?.apiKey),systemPrompt:b0(X.request.config?.systemPrompt),maxIterations:X.request.config?.hasMaxIterations?X.request.config?.maxIterations:void 0,enableTools:X.request.config?.enableTools===!0,enableSpawn:X.request.config?.enableSpawn===!0,enableTeams:X.request.config?.enableTeams===!0,autoApproveTools:X.request.config?.hasAutoApproveTools?X.request.config?.autoApproveTools===!0:void 0,teamName:b0(X.request.config?.teamName),missionStepInterval:X.request.config?.missionStepInterval??3,missionTimeIntervalMs:X.request.config?.missionTimeIntervalMs??120000,toolPolicies:Object.fromEntries(Object.entries(X.request.config?.toolPolicies??{}).map(([J,Z])=>[J,{enabled:Z?.enabled===!0,autoApprove:Z?.autoApprove===!0}])),initialMessages:(X.request.config?.initialMessages??[]).map((J)=>({role:b0(J.role),content:r7(J.content)})),logger:X.request.config?.logger?{enabled:X.request.config.logger.enabled===!0,level:b0(X.request.config.logger.level),destination:b0(X.request.config.logger.destination),name:b0(X.request.config.logger.name),bindings:O9(X.request.config.logger.bindings)}:void 0},messages:(X.request.messages??[]).map((J)=>({role:b0(J.role),content:r7(J.content)})),prompt:b0(X.request.prompt),delivery:z,attachments:X.request.attachments?{userImages:X.request.attachments.userImages??[],userFiles:(X.request.attachments.userFiles??[]).map((J)=>({name:b0(J.name),content:b0(J.content)}))}:void 0}:void 0;if(!F)throw Error("runtime send request is required");let Q=await Y(W,F);if(!Q.result)return{};return{result:{text:b0(Q.result.text),usage:{inputTokens:Q.result.usage.inputTokens,outputTokens:Q.result.usage.outputTokens,cacheReadTokens:Q.result.usage.cacheReadTokens??0,hasCacheReadTokens:typeof Q.result.usage.cacheReadTokens==="number",cacheWriteTokens:Q.result.usage.cacheWriteTokens??0,hasCacheWriteTokens:typeof Q.result.usage.cacheWriteTokens==="number",totalCost:Q.result.usage.totalCost??0,hasTotalCost:typeof Q.result.usage.totalCost==="number"},inputTokens:Q.result.inputTokens,outputTokens:Q.result.outputTokens,iterations:Q.result.iterations,finishReason:b0(Q.result.finishReason),messages:(Q.result.messages??[]).map((J)=>({role:b0(J.role),content:a7(J.content)})),toolCalls:(Q.result.toolCalls??[]).map((J)=>({name:b0(J.name),input:a7(J.input),hasInput:J.input!==void 0,output:a7(J.output),hasOutput:J.output!==void 0,error:b0(J.error),durationMs:J.durationMs??0,hasDurationMs:typeof J.durationMs==="number"}))}}}async stopRuntimeSession(X){let Y=this.runtimeHandlers?.stopSession;if(!Y)throw Error("runtime stop handler is not configured");let W=b0(X.sessionId).trim();if(!W)throw Error("sessionId is required");return{applied:(await Y(W)).applied===!0}}async abortRuntimeSession(X){let Y=this.runtimeHandlers?.abortSession;if(!Y)throw Error("runtime abort handler is not configured");let W=b0(X.sessionId).trim();if(!W)throw Error("sessionId is required");return{applied:(await Y(W)).applied===!0}}async runProviderAction(X){let Y=this.runtimeHandlers?.runProviderAction;if(!Y)throw Error("provider action handler is not configured");if(!X.request)throw Error("provider action request is required");let W;if(X.request.listProviders)W={action:"listProviders"};else if(X.request.getProviderModels)W={action:"getProviderModels",providerId:b0(X.request.getProviderModels.providerId)};else if(X.request.addProvider)W={action:"addProvider",providerId:b0(X.request.addProvider.providerId),name:b0(X.request.addProvider.name),baseUrl:b0(X.request.addProvider.baseUrl),apiKey:b0(X.request.addProvider.apiKey)||void 0,headers:X.request.addProvider.headers??void 0,timeoutMs:X.request.addProvider.hasTimeoutMs?X.request.addProvider.timeoutMs:void 0,models:X.request.addProvider.models??void 0,defaultModelId:b0(X.request.addProvider.defaultModelId)||void 0,modelsSourceUrl:b0(X.request.addProvider.modelsSourceUrl)||void 0,capabilities:X.request.addProvider.capabilities};else if(X.request.saveProviderSettings)W={action:"saveProviderSettings",providerId:b0(X.request.saveProviderSettings.providerId),enabled:X.request.saveProviderSettings.hasEnabled?X.request.saveProviderSettings.enabled:void 0,apiKey:X.request.saveProviderSettings.hasApiKey?X.request.saveProviderSettings.apiKey:void 0,baseUrl:X.request.saveProviderSettings.hasBaseUrl?X.request.saveProviderSettings.baseUrl:void 0};else{let F=b0(X.request.clineAccount?.operation);if(F==="fetchMe")W={action:"clineAccount",operation:"fetchMe"};else if(F==="fetchBalance")W={action:"clineAccount",operation:"fetchBalance",userId:b0(X.request.clineAccount?.userId)||void 0};else if(F==="fetchUsageTransactions")W={action:"clineAccount",operation:"fetchUsageTransactions",userId:b0(X.request.clineAccount?.userId)||void 0};else if(F==="fetchPaymentTransactions")W={action:"clineAccount",operation:"fetchPaymentTransactions",userId:b0(X.request.clineAccount?.userId)||void 0};else if(F==="fetchUserOrganizations")W={action:"clineAccount",operation:"fetchUserOrganizations"};else if(F==="fetchOrganizationBalance")W={action:"clineAccount",operation:"fetchOrganizationBalance",organizationId:b0(X.request.clineAccount?.organizationId)};else if(F==="fetchOrganizationUsageTransactions")W={action:"clineAccount",operation:"fetchOrganizationUsageTransactions",organizationId:b0(X.request.clineAccount?.organizationId),memberId:b0(X.request.clineAccount?.memberId)||void 0};else if(F==="fetchFeaturebaseToken")W={action:"clineAccount",operation:"fetchFeaturebaseToken"};else W={action:"clineAccount",operation:"switchAccount",organizationId:X.request.clineAccount?.clearOrganizationId?null:b0(X.request.clineAccount?.organizationId)||void 0}}let z=await Y(W);return{result:a7(z.result)}}async runProviderOAuthLogin(X){let Y=this.runtimeHandlers?.runProviderOAuthLogin;if(!Y)throw Error("provider oauth handler is not configured");let W=b0(X.provider).trim();if(!W)throw Error("provider is required");let z=await Y(W);return{provider:b0(z.provider).trim(),apiKey:b0(z.accessToken)}}startTask(X){let Y=b0(X.sessionId).trim(),W=b0(X.taskId).trim();if(!Y||!W)throw Error("sessionId and taskId are required");let z=`${Y}:${W}`;return this.tasks.set(z,{sessionId:Y,taskId:W,title:b0(X.title).trim()||void 0,status:"running",payload:O9(X.payload)??void 0}),this.eventService.publishEvent({eventId:"",sessionId:Y,taskId:W,eventType:"task.started",payload:O9(X.payload)??{},sourceClientId:""}),{sessionId:Y,taskId:W,status:"running",updated:!0}}completeTask(X){let Y=b0(X.sessionId).trim(),W=b0(X.taskId).trim();if(!Y||!W)throw Error("sessionId and taskId are required");let z=`${Y}:${W}`,F=b0(X.status).trim()||"completed",Q=this.tasks.get(z);if(!Q)return{sessionId:Y,taskId:W,status:F,updated:!1};return Q.status=F,Q.result=O9(X.result)??void 0,this.eventService.publishEvent({eventId:"",sessionId:Y,taskId:W,eventType:"task.completed",payload:O9(X.result)??{},sourceClientId:""}),{sessionId:Y,taskId:W,status:F,updated:!0}}publishEvent(X){return this.eventService.publishEvent(X)}addSubscriber(X){return this.eventService.addSubscriber(X)}removeSubscriber(X){this.eventService.removeSubscriber(X)}requestToolApproval(X){return this.approvalService.requestToolApproval(X)}respondToolApproval(X){return this.approvalService.respondToolApproval(X)}listPendingApprovals(X){return this.approvalService.listPendingApprovals(X)}createSchedule(X){return this.scheduleService.createSchedule(X)}getSchedule(X){return this.scheduleService.getSchedule(X)}listSchedules(X){return this.scheduleService.listSchedules(X)}updateSchedule(X){return this.scheduleService.updateSchedule(X)}deleteSchedule(X){return this.scheduleService.deleteSchedule(X)}pauseSchedule(X){return this.scheduleService.pauseSchedule(X)}resumeSchedule(X){return this.scheduleService.resumeSchedule(X)}triggerScheduleNow(X){return this.scheduleService.triggerScheduleNow(X)}listScheduleExecutions(X){return this.scheduleService.listScheduleExecutions(X)}getScheduleStats(X){return this.scheduleService.getScheduleStats(X)}getActiveScheduledExecutions(X){return this.scheduleService.getActiveScheduledExecutions(X)}getUpcomingScheduledRuns(X){return this.scheduleService.getUpcomingScheduledRuns(X)}broadcastServerEvent(X,Y){this.eventService.broadcastServerEvent(X,Y)}}var mX1=process.env.CLINE_RPC_ADDRESS?.trim()||rV;function OJ0(){return mX1}w6();import{existsSync as gX1,mkdirSync as dX1}from"node:fs";import{join as cX1}from"node:path";w6();function lX1(){return J8()}class _Y{sessionsDirPath;db;constructor(X={}){this.sessionsDirPath=X.sessionsDir??lX1()}init(){this.getRawDb()}ensureSessionsDir(){if(!gX1(this.sessionsDirPath))dX1(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}sessionDbPath(){return cX1(this.ensureSessionsDir(),"sessions.db")}getRawDb(){if(this.db)return this.db;let X=yY(this.sessionDbPath());return LK(X,{includeLegacyMigrations:!0}),this.db=X,X}close(){this.db?.close?.(),this.db=void 0}run(X,Y=[]){return this.getRawDb().prepare(X).run(...Y)}queryOne(X,Y=[]){return this.getRawDb().prepare(X).get(...Y)??void 0}queryAll(X,Y=[]){return this.getRawDb().prepare(X).all(...Y)}create(X){let Y=Q9();this.run(`INSERT OR REPLACE INTO sessions (
710
710
  session_id, source, pid, started_at, ended_at, exit_code, status, status_lock, interactive,
711
711
  provider, model, cwd, workspace_root, team_name, enable_tools, enable_spawn, enable_teams,
712
712
  parent_session_id, parent_agent_id, agent_id, conversation_id, is_subagent, prompt,
@@ -873,7 +873,7 @@ ${F}`,X.config.mode)}function FO(X,Y){return nV(X,Y==="plan"?"plan":"act")}funct
873
873
  `,"utf8")}async applySubagentStatus(X,Y){await this.applySubagentStatusBySessionId(X,VO(Y))}async applySubagentStatusBySessionId(X,Y){let W=await this.adapter.getSession(X);if(!W)return;let z=Y==="running"?null:i6(),F=Y==="running"?null:Y==="failed"?1:0;await this.adapter.updateSession({sessionId:X,status:Y,endedAt:z,exitCode:F,expectedStatusLock:W.statusLock})}async applyStatusToRunningChildSessions(X,Y){if(!X)return;let W=await this.adapter.listSessions({limit:2000,parentSessionId:X,status:"running"});for(let z of W)await this.applySubagentStatusBySessionId(z.sessionId,Y)}async onTeamTaskStart(X,Y,W){let z=await this.adapter.getSession(X);if(!z)return;let F=HO(X,Y),Q=i6(),J=this.artifacts.sessionTranscriptPath(F),Z=this.artifacts.sessionHookPath(F),K=this.artifacts.sessionMessagesPath(F);await this.adapter.upsertSession(this.buildSubsessionRow(z,{sessionId:F,parentSessionId:X,parentAgentId:"lead",agentId:Y,prompt:W||`Team task for ${Y}`,startedAt:Q,transcriptPath:J,hookPath:Z,messagesPath:K})),AO(K,Q),await this.appendSubagentTranscriptLine(F,`[start] ${W}`);let H=this.teamTaskQueueKey(X,Y),G=this.teamTaskSessionsByAgent.get(H)??[];G.push(F),this.teamTaskSessionsByAgent.set(H,G)}async onTeamTaskEnd(X,Y,W,z,F){let Q=this.teamTaskQueueKey(X,Y),J=this.teamTaskSessionsByAgent.get(Q);if(!J||J.length===0)return;let Z=J.shift();if(J.length===0)this.teamTaskSessionsByAgent.delete(Q);if(!Z)return;if(F)await this.persistSessionMessages(Z,F);await this.appendSubagentTranscriptLine(Z,z??`[done] ${W}`),await this.applySubagentStatusBySessionId(Z,W),this.teamTaskLastHeartbeatBySession.delete(Z),this.teamTaskLastProgressLineBySession.delete(Z)}async onTeamTaskProgress(X,Y,W,z){let F=this.teamTaskQueueKey(X,Y),Q=this.teamTaskSessionsByAgent.get(F)?.[0];if(!Q)return;let J=W.trim();if(!J)return;let Z=z?.kind??"progress";if(Z==="heartbeat"){let H=Date.now(),G=this.teamTaskLastHeartbeatBySession.get(Q)??0;if(H-G<u8.TEAM_HEARTBEAT_LOG_INTERVAL_MS)return;this.teamTaskLastHeartbeatBySession.set(Q,H)}let K=Z==="heartbeat"?"[progress] heartbeat":Z==="text"?`[progress] text: ${J}`:`[progress] ${J}`;if(this.teamTaskLastProgressLineBySession.get(Q)===K)return;this.teamTaskLastProgressLineBySession.set(Q,K),await this.appendSubagentTranscriptLine(Q,K)}async handleSubAgentStart(X,Y){let W=await this.upsertSubagentSession({agentId:Y.subAgentId,parentAgentId:Y.parentAgentId,conversationId:Y.conversationId,prompt:Y.input.task,rootSessionId:X});if(!W)return;await this.appendSubagentTranscriptLine(W,`[start] ${Y.input.task}`),await this.applySubagentStatusBySessionId(W,"running")}async handleSubAgentEnd(X,Y){let W=await this.upsertSubagentSession({agentId:Y.subAgentId,parentAgentId:Y.parentAgentId,conversationId:Y.conversationId,prompt:Y.input.task,rootSessionId:X});if(!W)return;if(Y.error){await this.appendSubagentTranscriptLine(W,`[error] ${Y.error.message}`),await this.applySubagentStatusBySessionId(W,"failed");return}let z=Y.result?.finishReason??"completed";await this.appendSubagentTranscriptLine(W,`[done] ${z}`),await this.applySubagentStatusBySessionId(W,z==="aborted"?"cancelled":"completed")}isPidAlive(X){if(!Number.isFinite(X)||X<=0)return!1;try{return process.kill(Math.floor(X),0),!0}catch(Y){return typeof Y==="object"&&Y!==null&&"code"in Y&&Y.code==="EPERM"}}async reconcileDeadRunningSession(X){if(X.status!=="running"||this.isPidAlive(X.pid))return X;let Y=i6(),W=u8.STALE_REASON;for(let z=0;z<UO;z++){let F=await this.adapter.getSession(X.sessionId);if(!F)return;if(F.status!=="running")return F;let Q={...F.metadata??{},terminal_marker:W,terminal_marker_at:Y,terminal_marker_pid:F.pid,terminal_marker_source:u8.STALE_SOURCE},J=await this.adapter.updateSession({sessionId:F.sessionId,status:"failed",endedAt:Y,exitCode:1,metadata:Q,expectedStatusLock:F.statusLock});if(!J.updated)continue;await this.applyStatusToRunningChildSessions(F.sessionId,"failed");let Z=this.buildManifestFromRow(F,{status:"failed",endedAt:Y,exitCode:1,metadata:Q}),{path:K}=this.readManifestFile(F.sessionId);return this.writeManifestFile(K,Z),lK(F.hookPath,`${JSON.stringify({ts:Y,hookName:"session_shutdown",reason:W,sessionId:F.sessionId,pid:F.pid,source:u8.STALE_SOURCE})}
874
874
  `,"utf8"),lK(F.transcriptPath,`[shutdown] ${W} (pid=${F.pid})
875
875
  `,"utf8"),{...F,status:"failed",endedAt:Y,exitCode:1,metadata:Q,statusLock:J.statusLock,updatedAt:Y}}return await this.adapter.getSession(X.sessionId)}async listSessions(X=200){let Y=Math.max(1,Math.floor(X)),W=Math.min(Y*5,2000);return await this.reconcileDeadSessions(W),(await this.adapter.listSessions({limit:W})).slice(0,Y).map((F)=>{let Q=XX(F.metadata??void 0),{manifest:J}=this.readManifestFile(F.sessionId),Z=cY(typeof J?.metadata?.title==="string"?J.metadata.title:void 0),K=Z?{...Q??{},title:Z}:Q;return{...F,metadata:K}})}async reconcileDeadSessions(X=2000){let Y=await this.adapter.listSessions({limit:Math.max(1,Math.floor(X)),status:"running"}),W=0;for(let z of Y){let F=await this.reconcileDeadRunningSession(z);if(F&&F.status!==z.status)W++}return W}async deleteSession(X){let Y=X.trim();if(!Y)throw Error("session id is required");let W=await this.adapter.getSession(Y);if(!W)return{deleted:!1};if(await this.adapter.deleteSession(Y,!1),!W.isSubagent){let z=await this.adapter.listSessions({limit:2000,parentSessionId:Y});await this.adapter.deleteSession(Y,!0);for(let F of z)r4(F.transcriptPath),r4(F.hookPath),r4(F.messagesPath),r4(this.artifacts.sessionManifestPath(F.sessionId,!1)),this.artifacts.removeSessionDirIfEmpty(F.sessionId)}return r4(W.transcriptPath),r4(W.hookPath),r4(W.messagesPath),r4(this.artifacts.sessionManifestPath(Y,!1)),this.artifacts.removeSessionDirIfEmpty(Y),{deleted:!0}}}function IO(){return new Date().toISOString()}function DW0(X,Y){let W=`${X}.tmp`;xZ1(W,`${JSON.stringify(Y,null,2)}
876
- `,"utf8"),_Z1(W,X)}function bZ1(){return J8()}class EW0{sessionsDirPath;constructor(X=bZ1()){this.sessionsDirPath=X}ensureSessionsDir(){if(!TO(this.sessionsDirPath))hZ1(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}indexPath(){return $W0(this.ensureSessionsDir(),"sessions.index.json")}spawnQueuePath(){return $W0(this.ensureSessionsDir(),"subagent-spawn-queue.json")}readIndex(){let X=this.indexPath();if(!TO(X))return{version:1,sessions:{}};try{let Y=JSON.parse(IW0(X,"utf8"));if(Y?.version===1&&Y.sessions)return Y}catch{}return{version:1,sessions:{}}}writeIndex(X){DW0(this.indexPath(),X)}readQueue(){let X=this.spawnQueuePath();if(!TO(X))return{version:1,nextId:1,requests:[]};try{let Y=JSON.parse(IW0(X,"utf8"));if(Y?.version===1&&typeof Y.nextId==="number"&&Array.isArray(Y.requests))return Y}catch{}return{version:1,nextId:1,requests:[]}}writeQueue(X){DW0(this.spawnQueuePath(),X)}async upsertSession(X){let Y=this.readIndex();Y.sessions[X.sessionId]=X,this.writeIndex(Y)}async getSession(X){return this.readIndex().sessions[X]}async listSessions(X){return Object.values(this.readIndex().sessions).filter((Y)=>X.parentSessionId!==void 0?Y.parentSessionId===X.parentSessionId:!0).filter((Y)=>X.status!==void 0?Y.status===X.status:!0).sort((Y,W)=>W.startedAt.localeCompare(Y.startedAt)).slice(0,X.limit)}async updateSession(X){let Y=this.readIndex(),W=Y.sessions[X.sessionId];if(!W)return{updated:!1,statusLock:0};if(X.expectedStatusLock!==void 0&&W.statusLock!==X.expectedStatusLock)return{updated:!1,statusLock:W.statusLock};let z=X.expectedStatusLock!==void 0?X.expectedStatusLock+1:W.statusLock,F={...W,status:X.status??W.status,endedAt:X.endedAt!==void 0?X.endedAt:W.endedAt??null,exitCode:X.exitCode!==void 0?X.exitCode:W.exitCode??null,prompt:X.prompt!==void 0?X.prompt:W.prompt??null,metadata:X.metadata!==void 0?X.metadata??null:W.metadata??null,parentSessionId:X.parentSessionId!==void 0?X.parentSessionId??null:W.parentSessionId??null,parentAgentId:X.parentAgentId!==void 0?X.parentAgentId??null:W.parentAgentId??null,agentId:X.agentId!==void 0?X.agentId??null:W.agentId??null,conversationId:X.conversationId!==void 0?X.conversationId??null:W.conversationId??null,statusLock:z,isSubagent:X.setRunning||X.parentSessionId!==void 0?!0:W.isSubagent,updatedAt:IO()};if(X.setRunning)F.status="running",F.endedAt=null,F.exitCode=null;return Y.sessions[X.sessionId]=F,this.writeIndex(Y),{updated:!0,statusLock:F.statusLock}}async deleteSession(X,Y){let W=this.readIndex();if(!W.sessions[X])return!1;if(delete W.sessions[X],Y){for(let F of Object.values(W.sessions))if(F.parentSessionId===X)delete W.sessions[F.sessionId]}return this.writeIndex(W),!0}async enqueueSpawnRequest(X){let Y=this.readQueue();Y.requests.push({id:Y.nextId,rootSessionId:X.rootSessionId,parentAgentId:X.parentAgentId,task:X.task,systemPrompt:X.systemPrompt,createdAt:IO()}),Y.nextId+=1,this.writeQueue(Y)}async claimSpawnRequest(X,Y){let W=this.readQueue(),z=W.requests.find((F)=>F.rootSessionId===X&&F.parentAgentId===Y&&!F.consumedAt);if(!z)return;return z.consumedAt=IO(),this.writeQueue(W),z.task}}class $O extends u8{constructor(X){super(new EW0(X))}ensureSessionsDir(){return super.ensureSessionsDir()}}import{createHash as mZ1}from"node:crypto";import{mkdir as EO,readFile as wW0,rm as SW0,writeFile as fW0}from"node:fs/promises";import{createServer as gZ1}from"node:net";import{dirname as yW0,join as nK,resolve as dZ1}from"node:path";w6();var CW0="0.0.25";var DO=CW0;var cZ1=30000,lZ1=15000,pZ1=100,kW0="CLINE_RPC_STARTUP_LOCK_HELD",vW0="CLINE_RPC_OWNER_ID",jW0="CLINE_RPC_BUILD_ID",hW0="CLINE_RPC_DISCOVERY_PATH",MO=(X)=>new Promise((Y)=>setTimeout(Y,X));function nZ1(X){return X.replace(/[^a-zA-Z0-9_.-]+/g,"_")}function RW0(X){return mZ1("sha256").update(X).digest("hex").slice(0,12)}function LO(X){return X&&typeof X==="object"&&"code"in X?String(X.code):""}function _W0(X){let Y=X.trim(),W=Y.lastIndexOf(":");if(W<=0||W>=Y.length-1)throw Error(`invalid rpc address: ${X}`);let z=Y.slice(0,W),F=Number.parseInt(Y.slice(W+1),10);if(!Number.isInteger(F)||F<=0||F>65535)throw Error(`invalid rpc port in address: ${X}`);return{host:z,port:F}}function iZ1(){let X=process.argv[1]?.trim();if(!X)return;return dZ1(process.cwd(),X)}function xW0(X){let Y=`core=${DO}:rpc=${BJ0}`;return X?.trim()?`${Y}:host=${X.trim()}`:Y}function iK(X={}){let Y=X.identityPath?.trim()||iZ1(),W=X.ownerBasis?.trim()||(Y?`${Y}`:`pid:${process.pid}:cwd:${process.cwd()}`),z=X.ownerPrefix?.trim()||"rpc",F=X.ownerId?.trim()||process.env[vW0]?.trim()||`${z}-${RW0(W)}`,Q=`${W}:${xW0(X.hostBuildKey)}`,J=process.env[jW0]?.trim()||`build-${RW0(Q)}`,Z=X.discoveryPath?.trim()||process.env[hW0]?.trim()||nK(D9(),"rpc","owners",`${nZ1(F)}.json`);return{ownerId:F,buildId:J,entryPath:Y,discoveryPath:Z}}async function bW0(X){try{let Y=JSON.parse(await wW0(X.discoveryPath,"utf8"));if(typeof Y.ownerId!=="string"||typeof Y.buildId!=="string"||typeof Y.address!=="string"||typeof Y.protocolVersion!=="string")return;return{ownerId:Y.ownerId,buildId:Y.buildId,address:Y.address,protocolVersion:Y.protocolVersion,updatedAt:typeof Y.updatedAt==="string"?Y.updatedAt:new Date().toISOString(),entryPath:typeof Y.entryPath==="string"?Y.entryPath:void 0,pid:typeof Y.pid==="number"?Y.pid:void 0,serverId:typeof Y.serverId==="string"?Y.serverId:void 0,startedAt:typeof Y.startedAt==="string"?Y.startedAt:void 0}}catch{return}}async function uW0(X,Y){await EO(yW0(X.discoveryPath),{recursive:!0}),await fW0(X.discoveryPath,JSON.stringify({ownerId:X.ownerId,buildId:X.buildId,updatedAt:new Date().toISOString(),...Y},null,2),"utf8")}async function pK(X){await SW0(X.discoveryPath,{force:!0}).catch(()=>{return})}async function aZ1(X,Y){if((await bW0(X))?.address===Y)await pK(X)}function CO(X){let Y=X?.rpcVersion?.trim()||"";return!!Y&&Y===rQ}function rZ1(X){if(Number(LO(X))===12)return!0;return(X instanceof Error?X.message:String(X)).toUpperCase().includes("UNIMPLEMENTED")}function oZ1(X){let Y=X instanceof Error?X.message:String(X);return/missing authentication header|401\b|unauthenticated|unauthorized/i.test(Y)}function MW0(X){return rZ1(X)||oZ1(X)}async function RO(X){let Y=new aQ({address:X});try{try{await Y.stopRuntimeSession("__rpc_probe__")}catch(W){if(MW0(W))return!1}return!0}catch(W){return!MW0(W)}finally{Y.close()}}async function mW0(X){let Y=await a4(X);return!!Y?.running&&CO(Y)&&await RO(X)}async function gW0(X,Y){return new Promise((W)=>{let z=gZ1();z.once("error",()=>W(!1)),z.once("listening",()=>z.close(()=>W(!0))),z.listen({host:X,port:Y})})}async function LW0(X){let{host:Y,port:W}=_W0(X);for(let z=1;z<=40;z+=1){let F=W+z;if(F>65535)break;if(await gW0(Y,F))return`${Y}:${F}`}throw Error(`no available rpc port near ${X}`)}function tZ1(X){let Y=X.trim().replace(/[^a-zA-Z0-9_.-]+/g,"_");return nK(D9(),"locks",`rpc-start-${Y}.lock`)}function sZ1(X){if(!Number.isInteger(X)||!X||X<=0)return!1;try{return process.kill(X,0),!0}catch(Y){return LO(Y)==="EPERM"}}async function eZ1(X,Y){let W={pid:process.pid,address:Y,acquiredAt:new Date().toISOString()};await fW0(nK(X,"owner.json"),JSON.stringify(W,null,2),"utf8")}async function XQ1(X){try{let Y=JSON.parse(await wW0(nK(X,"owner.json"),"utf8"));if(typeof Y.pid!=="number"||typeof Y.address!=="string"||typeof Y.acquiredAt!=="string")return;return{pid:Y.pid,address:Y.address,acquiredAt:Y.acquiredAt}}catch{return}}async function PW0(X){await SW0(X,{recursive:!0,force:!0}).catch(()=>{})}async function dW0(X,Y){if(process.env[kW0]==="1")return await Y();let W=tZ1(X),z=Date.now();await EO(yW0(W),{recursive:!0});while(!0)try{await EO(W,{recursive:!1}),await eZ1(W,X);try{return await Y()}finally{await PW0(W)}}catch(F){if(LO(F)!=="EEXIST")throw F;let Q=await XQ1(W),J=Q?new Date(Q.acquiredAt).getTime():Number.NaN;if(!Q||!Number.isFinite(J)||Date.now()-J>cZ1||!sZ1(Q.pid)){await PW0(W);continue}if(Date.now()-z>=lZ1)throw Error(`timed out waiting for rpc startup lock at ${X} (owner pid=${Q.pid})`);await MO(pZ1)}}async function YQ1(X,Y){let W=Y?.address?.trim();if(!W){await pK(X);return}if((await VJ0(W).catch(()=>{return}))?.accepted)for(let F=0;F<20;F+=1){if(!(await a4(W))?.running){await pK(X);return}await MO(100)}if(!(await a4(W))?.running)await pK(X)}async function cW0(X,Y={}){let W=Y.owner??Y.resolveOwner?.()??iK();return await dW0(X,async()=>{let z=await bW0(W);if(z?.address){let Z=await a4(z.address);if(Z?.running&&z.buildId===W.buildId&&z.protocolVersion===rQ&&CO(Z)&&await RO(z.address))return{address:z.address,action:"reuse",owner:W};await YQ1(W,z)}let F=await a4(X),{host:Q,port:J}=_W0(X);if(!F?.running){if(await gW0(Q,J))return{address:X,action:"started",owner:W};return{address:await LW0(X),action:"new-port",owner:W}}if(CO(F)&&await RO(X)){if(!z)return{address:X,action:"reuse",owner:W}}return{address:await LW0(X),action:"new-port",owner:W}})}async function lW0(X,Y=mW0){for(let W=0;W<60;W+=1){if(await Y(X))return!0;await MO(100)}return!1}async function PO(X,Y){let W=await cW0(X,{owner:Y.owner,resolveOwner:Y.resolveOwner});if(W.action!=="reuse")await Y.spawnIfNeeded(W.address,W.owner);if(!await lW0(W.address,Y.readinessCheck))throw Error(`failed to ensure rpc runtime at ${W.address}`);let z=await a4(W.address);return await uW0(W.owner,{address:W.address,pid:void 0,serverId:z?.serverId,startedAt:z?.startedAt,protocolVersion:rQ,entryPath:W.owner.entryPath}),W}import{existsSync as ZQ1,mkdirSync as QQ1}from"node:fs";class pW0{client;constructor(X){this.client=X}ensureSessionsDir(){return""}async upsertSession(X){await this.client.upsertSession(X)}async getSession(X){return await this.client.getSession(X)??void 0}async listSessions(X){return await this.client.listSessions(X)}async updateSession(X){return this.client.updateSession({sessionId:X.sessionId,status:X.status,endedAt:X.endedAt,exitCode:X.exitCode,prompt:X.prompt,metadata:X.metadata,parentSessionId:X.parentSessionId,parentAgentId:X.parentAgentId,agentId:X.agentId,conversationId:X.conversationId,expectedStatusLock:X.expectedStatusLock,setRunning:X.setRunning})}async deleteSession(X,Y){return this.client.deleteSession(X,Y)}async enqueueSpawnRequest(X){await this.client.enqueueSpawnRequest(X)}async claimSpawnRequest(X,Y){return this.client.claimSpawnRequest(X,Y)}}class aK extends u8{sessionsDirPath;client;constructor(X){let Y=new aQ({address:X.address?.trim()||"127.0.0.1:4317"});super(new pW0(Y));this.sessionsDirPath=X.sessionsDir,this.client=Y}ensureSessionsDir(){if(!ZQ1(this.sessionsDirPath))QQ1(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}close(){this.client.close()}}w6();import{closeSync as nW0,existsSync as JQ1,mkdirSync as WQ1,openSync as GQ1,readFileSync as KQ1,rmSync as iW0,writeFileSync as FQ1}from"node:fs";import{dirname as zQ1,resolve as qQ1}from"node:path";var HQ1=15000;function VQ1(X){return Buffer.from(X).toString("base64url")}function BQ1(X){return qQ1(J8(),"rpc","spawn-leases",`${VQ1(X)}.lock`)}function UQ1(X){if(!Number.isInteger(X)||X<=0)return!1;try{return process.kill(X,0),!0}catch{return!1}}function NQ1(X,Y){try{let W=KQ1(X,"utf8"),z=JSON.parse(W),F=Number(z.createdAt??0);if(!Number.isFinite(F)||F<=0)return!0;if(Date.now()-F>Y)return!0;return!UQ1(Number(z.pid??0))}catch{return!0}}function wO(X,Y){let W=Math.max(1000,Y?.ttlMs??HQ1),z=BQ1(X);if(WQ1(zQ1(z),{recursive:!0}),JQ1(z)&&NQ1(z,W))iW0(z,{force:!0});let F;try{F=GQ1(z,"wx");let J={address:X,pid:process.pid,createdAt:Date.now()};FQ1(F,JSON.stringify(J),"utf8")}catch{if(typeof F==="number")try{nW0(F)}catch{}return}let Q=!1;return{path:z,release:()=>{if(Q)return;Q=!0;try{if(typeof F==="number")nW0(F)}catch{}try{iW0(z,{force:!0})}catch{}}}}w6();var aW0=`
876
+ `,"utf8"),_Z1(W,X)}function bZ1(){return J8()}class EW0{sessionsDirPath;constructor(X=bZ1()){this.sessionsDirPath=X}ensureSessionsDir(){if(!TO(this.sessionsDirPath))hZ1(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}indexPath(){return $W0(this.ensureSessionsDir(),"sessions.index.json")}spawnQueuePath(){return $W0(this.ensureSessionsDir(),"subagent-spawn-queue.json")}readIndex(){let X=this.indexPath();if(!TO(X))return{version:1,sessions:{}};try{let Y=JSON.parse(IW0(X,"utf8"));if(Y?.version===1&&Y.sessions)return Y}catch{}return{version:1,sessions:{}}}writeIndex(X){DW0(this.indexPath(),X)}readQueue(){let X=this.spawnQueuePath();if(!TO(X))return{version:1,nextId:1,requests:[]};try{let Y=JSON.parse(IW0(X,"utf8"));if(Y?.version===1&&typeof Y.nextId==="number"&&Array.isArray(Y.requests))return Y}catch{}return{version:1,nextId:1,requests:[]}}writeQueue(X){DW0(this.spawnQueuePath(),X)}async upsertSession(X){let Y=this.readIndex();Y.sessions[X.sessionId]=X,this.writeIndex(Y)}async getSession(X){return this.readIndex().sessions[X]}async listSessions(X){return Object.values(this.readIndex().sessions).filter((Y)=>X.parentSessionId!==void 0?Y.parentSessionId===X.parentSessionId:!0).filter((Y)=>X.status!==void 0?Y.status===X.status:!0).sort((Y,W)=>W.startedAt.localeCompare(Y.startedAt)).slice(0,X.limit)}async updateSession(X){let Y=this.readIndex(),W=Y.sessions[X.sessionId];if(!W)return{updated:!1,statusLock:0};if(X.expectedStatusLock!==void 0&&W.statusLock!==X.expectedStatusLock)return{updated:!1,statusLock:W.statusLock};let z=X.expectedStatusLock!==void 0?X.expectedStatusLock+1:W.statusLock,F={...W,status:X.status??W.status,endedAt:X.endedAt!==void 0?X.endedAt:W.endedAt??null,exitCode:X.exitCode!==void 0?X.exitCode:W.exitCode??null,prompt:X.prompt!==void 0?X.prompt:W.prompt??null,metadata:X.metadata!==void 0?X.metadata??null:W.metadata??null,parentSessionId:X.parentSessionId!==void 0?X.parentSessionId??null:W.parentSessionId??null,parentAgentId:X.parentAgentId!==void 0?X.parentAgentId??null:W.parentAgentId??null,agentId:X.agentId!==void 0?X.agentId??null:W.agentId??null,conversationId:X.conversationId!==void 0?X.conversationId??null:W.conversationId??null,statusLock:z,isSubagent:X.setRunning||X.parentSessionId!==void 0?!0:W.isSubagent,updatedAt:IO()};if(X.setRunning)F.status="running",F.endedAt=null,F.exitCode=null;return Y.sessions[X.sessionId]=F,this.writeIndex(Y),{updated:!0,statusLock:F.statusLock}}async deleteSession(X,Y){let W=this.readIndex();if(!W.sessions[X])return!1;if(delete W.sessions[X],Y){for(let F of Object.values(W.sessions))if(F.parentSessionId===X)delete W.sessions[F.sessionId]}return this.writeIndex(W),!0}async enqueueSpawnRequest(X){let Y=this.readQueue();Y.requests.push({id:Y.nextId,rootSessionId:X.rootSessionId,parentAgentId:X.parentAgentId,task:X.task,systemPrompt:X.systemPrompt,createdAt:IO()}),Y.nextId+=1,this.writeQueue(Y)}async claimSpawnRequest(X,Y){let W=this.readQueue(),z=W.requests.find((F)=>F.rootSessionId===X&&F.parentAgentId===Y&&!F.consumedAt);if(!z)return;return z.consumedAt=IO(),this.writeQueue(W),z.task}}class $O extends u8{constructor(X){super(new EW0(X))}ensureSessionsDir(){return super.ensureSessionsDir()}}import{createHash as mZ1}from"node:crypto";import{mkdir as EO,readFile as wW0,rm as SW0,writeFile as fW0}from"node:fs/promises";import{createServer as gZ1}from"node:net";import{dirname as yW0,join as nK,resolve as dZ1}from"node:path";w6();var CW0="0.0.26";var DO=CW0;var cZ1=30000,lZ1=15000,pZ1=100,kW0="CLINE_RPC_STARTUP_LOCK_HELD",vW0="CLINE_RPC_OWNER_ID",jW0="CLINE_RPC_BUILD_ID",hW0="CLINE_RPC_DISCOVERY_PATH",MO=(X)=>new Promise((Y)=>setTimeout(Y,X));function nZ1(X){return X.replace(/[^a-zA-Z0-9_.-]+/g,"_")}function RW0(X){return mZ1("sha256").update(X).digest("hex").slice(0,12)}function LO(X){return X&&typeof X==="object"&&"code"in X?String(X.code):""}function _W0(X){let Y=X.trim(),W=Y.lastIndexOf(":");if(W<=0||W>=Y.length-1)throw Error(`invalid rpc address: ${X}`);let z=Y.slice(0,W),F=Number.parseInt(Y.slice(W+1),10);if(!Number.isInteger(F)||F<=0||F>65535)throw Error(`invalid rpc port in address: ${X}`);return{host:z,port:F}}function iZ1(){let X=process.argv[1]?.trim();if(!X)return;return dZ1(process.cwd(),X)}function xW0(X){let Y=`core=${DO}:rpc=${BJ0}`;return X?.trim()?`${Y}:host=${X.trim()}`:Y}function iK(X={}){let Y=X.identityPath?.trim()||iZ1(),W=X.ownerBasis?.trim()||(Y?`${Y}`:`pid:${process.pid}:cwd:${process.cwd()}`),z=X.ownerPrefix?.trim()||"rpc",F=X.ownerId?.trim()||process.env[vW0]?.trim()||`${z}-${RW0(W)}`,Q=`${W}:${xW0(X.hostBuildKey)}`,J=process.env[jW0]?.trim()||`build-${RW0(Q)}`,Z=X.discoveryPath?.trim()||process.env[hW0]?.trim()||nK(D9(),"rpc","owners",`${nZ1(F)}.json`);return{ownerId:F,buildId:J,entryPath:Y,discoveryPath:Z}}async function bW0(X){try{let Y=JSON.parse(await wW0(X.discoveryPath,"utf8"));if(typeof Y.ownerId!=="string"||typeof Y.buildId!=="string"||typeof Y.address!=="string"||typeof Y.protocolVersion!=="string")return;return{ownerId:Y.ownerId,buildId:Y.buildId,address:Y.address,protocolVersion:Y.protocolVersion,updatedAt:typeof Y.updatedAt==="string"?Y.updatedAt:new Date().toISOString(),entryPath:typeof Y.entryPath==="string"?Y.entryPath:void 0,pid:typeof Y.pid==="number"?Y.pid:void 0,serverId:typeof Y.serverId==="string"?Y.serverId:void 0,startedAt:typeof Y.startedAt==="string"?Y.startedAt:void 0}}catch{return}}async function uW0(X,Y){await EO(yW0(X.discoveryPath),{recursive:!0}),await fW0(X.discoveryPath,JSON.stringify({ownerId:X.ownerId,buildId:X.buildId,updatedAt:new Date().toISOString(),...Y},null,2),"utf8")}async function pK(X){await SW0(X.discoveryPath,{force:!0}).catch(()=>{return})}async function aZ1(X,Y){if((await bW0(X))?.address===Y)await pK(X)}function CO(X){let Y=X?.rpcVersion?.trim()||"";return!!Y&&Y===rQ}function rZ1(X){if(Number(LO(X))===12)return!0;return(X instanceof Error?X.message:String(X)).toUpperCase().includes("UNIMPLEMENTED")}function oZ1(X){let Y=X instanceof Error?X.message:String(X);return/missing authentication header|401\b|unauthenticated|unauthorized/i.test(Y)}function MW0(X){return rZ1(X)||oZ1(X)}async function RO(X){let Y=new aQ({address:X});try{try{await Y.stopRuntimeSession("__rpc_probe__")}catch(W){if(MW0(W))return!1}return!0}catch(W){return!MW0(W)}finally{Y.close()}}async function mW0(X){let Y=await a4(X);return!!Y?.running&&CO(Y)&&await RO(X)}async function gW0(X,Y){return new Promise((W)=>{let z=gZ1();z.once("error",()=>W(!1)),z.once("listening",()=>z.close(()=>W(!0))),z.listen({host:X,port:Y})})}async function LW0(X){let{host:Y,port:W}=_W0(X);for(let z=1;z<=40;z+=1){let F=W+z;if(F>65535)break;if(await gW0(Y,F))return`${Y}:${F}`}throw Error(`no available rpc port near ${X}`)}function tZ1(X){let Y=X.trim().replace(/[^a-zA-Z0-9_.-]+/g,"_");return nK(D9(),"locks",`rpc-start-${Y}.lock`)}function sZ1(X){if(!Number.isInteger(X)||!X||X<=0)return!1;try{return process.kill(X,0),!0}catch(Y){return LO(Y)==="EPERM"}}async function eZ1(X,Y){let W={pid:process.pid,address:Y,acquiredAt:new Date().toISOString()};await fW0(nK(X,"owner.json"),JSON.stringify(W,null,2),"utf8")}async function XQ1(X){try{let Y=JSON.parse(await wW0(nK(X,"owner.json"),"utf8"));if(typeof Y.pid!=="number"||typeof Y.address!=="string"||typeof Y.acquiredAt!=="string")return;return{pid:Y.pid,address:Y.address,acquiredAt:Y.acquiredAt}}catch{return}}async function PW0(X){await SW0(X,{recursive:!0,force:!0}).catch(()=>{})}async function dW0(X,Y){if(process.env[kW0]==="1")return await Y();let W=tZ1(X),z=Date.now();await EO(yW0(W),{recursive:!0});while(!0)try{await EO(W,{recursive:!1}),await eZ1(W,X);try{return await Y()}finally{await PW0(W)}}catch(F){if(LO(F)!=="EEXIST")throw F;let Q=await XQ1(W),J=Q?new Date(Q.acquiredAt).getTime():Number.NaN;if(!Q||!Number.isFinite(J)||Date.now()-J>cZ1||!sZ1(Q.pid)){await PW0(W);continue}if(Date.now()-z>=lZ1)throw Error(`timed out waiting for rpc startup lock at ${X} (owner pid=${Q.pid})`);await MO(pZ1)}}async function YQ1(X,Y){let W=Y?.address?.trim();if(!W){await pK(X);return}if((await VJ0(W).catch(()=>{return}))?.accepted)for(let F=0;F<20;F+=1){if(!(await a4(W))?.running){await pK(X);return}await MO(100)}if(!(await a4(W))?.running)await pK(X)}async function cW0(X,Y={}){let W=Y.owner??Y.resolveOwner?.()??iK();return await dW0(X,async()=>{let z=await bW0(W);if(z?.address){let Z=await a4(z.address);if(Z?.running&&z.buildId===W.buildId&&z.protocolVersion===rQ&&CO(Z)&&await RO(z.address))return{address:z.address,action:"reuse",owner:W};await YQ1(W,z)}let F=await a4(X),{host:Q,port:J}=_W0(X);if(!F?.running){if(await gW0(Q,J))return{address:X,action:"started",owner:W};return{address:await LW0(X),action:"new-port",owner:W}}if(CO(F)&&await RO(X)){if(!z)return{address:X,action:"reuse",owner:W}}return{address:await LW0(X),action:"new-port",owner:W}})}async function lW0(X,Y=mW0){for(let W=0;W<60;W+=1){if(await Y(X))return!0;await MO(100)}return!1}async function PO(X,Y){let W=await cW0(X,{owner:Y.owner,resolveOwner:Y.resolveOwner});if(W.action!=="reuse")await Y.spawnIfNeeded(W.address,W.owner);if(!await lW0(W.address,Y.readinessCheck))throw Error(`failed to ensure rpc runtime at ${W.address}`);let z=await a4(W.address);return await uW0(W.owner,{address:W.address,pid:void 0,serverId:z?.serverId,startedAt:z?.startedAt,protocolVersion:rQ,entryPath:W.owner.entryPath}),W}import{existsSync as ZQ1,mkdirSync as QQ1}from"node:fs";class pW0{client;constructor(X){this.client=X}ensureSessionsDir(){return""}async upsertSession(X){await this.client.upsertSession(X)}async getSession(X){return await this.client.getSession(X)??void 0}async listSessions(X){return await this.client.listSessions(X)}async updateSession(X){return this.client.updateSession({sessionId:X.sessionId,status:X.status,endedAt:X.endedAt,exitCode:X.exitCode,prompt:X.prompt,metadata:X.metadata,parentSessionId:X.parentSessionId,parentAgentId:X.parentAgentId,agentId:X.agentId,conversationId:X.conversationId,expectedStatusLock:X.expectedStatusLock,setRunning:X.setRunning})}async deleteSession(X,Y){return this.client.deleteSession(X,Y)}async enqueueSpawnRequest(X){await this.client.enqueueSpawnRequest(X)}async claimSpawnRequest(X,Y){return this.client.claimSpawnRequest(X,Y)}}class aK extends u8{sessionsDirPath;client;constructor(X){let Y=new aQ({address:X.address?.trim()||"127.0.0.1:4317"});super(new pW0(Y));this.sessionsDirPath=X.sessionsDir,this.client=Y}ensureSessionsDir(){if(!ZQ1(this.sessionsDirPath))QQ1(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}close(){this.client.close()}}w6();import{closeSync as nW0,existsSync as JQ1,mkdirSync as WQ1,openSync as GQ1,readFileSync as KQ1,rmSync as iW0,writeFileSync as FQ1}from"node:fs";import{dirname as zQ1,resolve as qQ1}from"node:path";var HQ1=15000;function VQ1(X){return Buffer.from(X).toString("base64url")}function BQ1(X){return qQ1(J8(),"rpc","spawn-leases",`${VQ1(X)}.lock`)}function UQ1(X){if(!Number.isInteger(X)||X<=0)return!1;try{return process.kill(X,0),!0}catch{return!1}}function NQ1(X,Y){try{let W=KQ1(X,"utf8"),z=JSON.parse(W),F=Number(z.createdAt??0);if(!Number.isFinite(F)||F<=0)return!0;if(Date.now()-F>Y)return!0;return!UQ1(Number(z.pid??0))}catch{return!0}}function wO(X,Y){let W=Math.max(1000,Y?.ttlMs??HQ1),z=BQ1(X);if(WQ1(zQ1(z),{recursive:!0}),JQ1(z)&&NQ1(z,W))iW0(z,{force:!0});let F;try{F=GQ1(z,"wx");let J={address:X,pid:process.pid,createdAt:Date.now()};FQ1(F,JSON.stringify(J),"utf8")}catch{if(typeof F==="number")try{nW0(F)}catch{}return}let Q=!1;return{path:z,release:()=>{if(Q)return;Q=!0;try{if(typeof F==="number")nW0(F)}catch{}try{iW0(z,{force:!0})}catch{}}}}w6();var aW0=`
877
877
  session_id AS sessionId,
878
878
  source,
879
879
  pid,
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@clinebot/core",
3
3
  "description": "Cline Core SDK for Node Runtime",
4
- "version": "0.0.25",
4
+ "version": "0.0.26",
5
5
  "type": "module",
6
6
  "types": "./dist/index.d.ts",
7
7
  "main": "./dist/index.js",
@@ -36,8 +36,8 @@
36
36
  "test:watch": "vitest --config vitest.config.ts"
37
37
  },
38
38
  "dependencies": {
39
- "@clinebot/agents": "0.0.25",
40
- "@clinebot/llms": "0.0.25",
39
+ "@clinebot/agents": "0.0.26",
40
+ "@clinebot/llms": "0.0.26",
41
41
  "@opentelemetry/api": "^1.9.0",
42
42
  "@opentelemetry/api-logs": "^0.56.0",
43
43
  "@opentelemetry/exporter-logs-otlp-http": "^0.56.0",
@@ -54,8 +54,8 @@
54
54
  "zod": "^4.3.6"
55
55
  },
56
56
  "devDependencies": {
57
- "@clinebot/rpc": "0.0.25",
58
- "@clinebot/shared": "0.0.25"
57
+ "@clinebot/rpc": "0.0.26",
58
+ "@clinebot/shared": "0.0.26"
59
59
  },
60
60
  "engines": {
61
61
  "node": ">=20"