@clinebot/core 0.0.23 → 0.0.24
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/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);`],zX1=[{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 qX1(X,Y){return new Set(X.prepare(`PRAGMA table_info(${Y});`).all().map((W)=>W.name))}function CK(X,Y={}){X.exec("PRAGMA journal_mode = WAL;"),X.exec("PRAGMA busy_timeout = 5000;");for(let F of FX1)X.exec(F);if(!Y.includeLegacyMigrations)return;let W=new Map,z=(F)=>{let Q=W.get(F);if(!Q)Q=qX1(X,F),W.set(F,Q);return Q};for(let F of zX1)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 hA=N9(pQ(),1);import{randomUUID as YJ0}from"node:crypto";import{randomUUID as yX1}from"node:crypto";import{randomUUID as ZJ0}from"node:crypto";function JJ0(X){let Y=sQ0(IX1(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=sQ0(z);if(F===z)break;z=F}for(let F of W)if(AX1(F))return F;throw Error("Unable to resolve rpc.proto path")}var OX1="cline.rpc.v1",WJ0="ClineGateway";function TX1(){return JJ0(import.meta.url)}function $X1(){let X=QJ0.loadSync(TX1(),{keepCase:!1,longs:String,enums:String,defaults:!0,oneofs:!0}),Y=jY.loadPackageDefinition(X).cline?.rpc?.v1?.ClineGateway?.service;if(!Y)throw Error(`Unable to load ${OX1}.${WJ0} from proto`);return Y}function DX1(X){return new(jY.makeGenericClientConstructor($X1(),WJ0))(X,jY.credentials.createInsecure())}function RK(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)=>RK(Y))}};if(typeof X==="object"){let Y={fields:{}};for(let[W,z]of Object.entries(X))Y.fields??={},Y.fields[W]=RK(z);return{structValue:Y}}return{stringValue:String(X)}}function MK(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)=>MK(Y));if(X.structValue){let Y={};for(let[W,z]of Object.entries(X.structValue.fields??{}))Y[W]=MK(z);return Y}return}function r9(X){let Y={};for(let[W,z]of Object.entries(X??{}))Y[W]=RK(z);return{fields:Y}}function I9(X){if(!X?.fields)return;let Y={};for(let[W,z]of Object.entries(X.fields))Y[W]=MK(z);return Y}function a7(X){return RK(X)}function r7(X){return MK(X??void 0)}function EX1(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 eQ0(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:I9(X.metadata),transcriptPath:X.transcriptPath??"",hookPath:X.hookPath??"",messagesPath:X.messagesPath||void 0,updatedAt:X.updatedAt??""}}function CX1(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 yY(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:CX1(X.tagsJson??void 0),metadata:I9(X.metadata)}}function kA(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 nQ{client;constructor(X){this.client=DX1(X.address)}close(){this.client.close()}async upsertSession(X){await this.unary((Y)=>{let W={session:EX1(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 eQ0(Y.session)}async listSessions(X){return((await this.unary((Y)=>{this.client.ListSessions(X,Y)})).sessions??[]).map((Y)=>eQ0(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?yY(Y.schedule):void 0}async getSchedule(X){let Y=await this.unary((W)=>{this.client.GetSchedule({scheduleId:X},W)});return Y.schedule?yY(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)=>yY(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?yY(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?yY(Y.schedule):void 0}async resumeSchedule(X){let Y=await this.unary((W)=>{this.client.ResumeSchedule({scheduleId:X},W)});return Y.schedule?yY(Y.schedule):void 0}async triggerScheduleNow(X){let Y=await this.unary((W)=>{this.client.TriggerScheduleNow({scheduleId:X},W)});return Y.execution?kA(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)=>kA(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?kA(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:I9(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===z3){try{let z=W.payload;if(z.type==="team_progress_projection"&&z.version===1)Y.onProjection?.(z)}catch{}return}if(W.eventType===q3)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 RX1="cline.rpc.v1",FJ0="ClineGateway";function MX1(){return JJ0(import.meta.url)}function LX1(){let X=KJ0.loadSync(MX1(),{keepCase:!1,longs:String,enums:String,defaults:!0,oneofs:!0}),Y=GJ0.loadPackageDefinition(X).cline?.rpc?.v1?.ClineGateway?.service;if(!Y)throw Error(`Unable to load ${RX1}.${FJ0} from proto`);return Y}function vY(){return new Date().toISOString()}function b0(X){return typeof X==="string"?X:""}function PX1(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 wX1(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 zJ0(X){if(X==="running"||X==="completed"||X==="failed"||X==="cancelled")return X;return"running"}function XJ0(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 SX1(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:zJ0(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:I9(X.metadata),transcriptPath:K,hookPath:H,messagesPath:b0(X.messagesPath).trim()||void 0,updatedAt:b0(X.updatedAt).trim()||vY()}}function vA(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 kY(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 jA(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 qJ0(X){return new(LK.makeGenericClientConstructor(LX1(),FJ0))(X,LK.credentials.createInsecure())}async function i4(X){return await new Promise((Y)=>{let W;try{W=qJ0(X)}catch{Y(void 0);return}W.Health({},(z,F)=>{if(W?.close(),z||!F){Y(void 0);return}Y(F)})})}async function HJ0(X){return await new Promise((Y)=>{let W;try{W=qJ0(X)}catch{Y(void 0);return}W.Shutdown({},(z,F)=>{if(W?.close(),z||!F){Y(void 0);return}Y(F)})})}var fX1="0.0.23",iQ="1",VJ0=fX1,kX1=300000;class BJ0{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_${yX1()}`;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:vY(),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):kX1,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 UJ0{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_${ZJ0()}`,sessionId:Y,taskId:b0(X.taskId).trim()||void 0,eventType:b0(X.eventType).trim()||"unknown",payload:I9(X.payload)??{},sourceClientId:b0(X.sourceClientId).trim()||void 0,ts:vY()};return this.dispatchEvent(W),{eventId:W.eventId,accepted:!0}}addSubscriber(X){let Y=X.request,W=wX1(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_${ZJ0()}`,z=vY();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 NJ0{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:vA(b0(X.tagsJson)),metadata:I9(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:kY(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:kY(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:vA(b0(X.tagsJson))}).map((Y)=>kY(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=vA(b0(X.tagsJson))??[];if(X.hasMetadata)z.metadata=I9(X.metadata)??{};let F=Y.updateSchedule(W,z);return{updated:F!==void 0,schedule:F?kY(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?kY(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?kY(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:jA(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)=>jA(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?jA(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 vX1{serverId=YJ0();address;startedAt;runtimeHandlers;sessions=new Map;tasks=new Map;clients=new Map;store;eventService=new UJ0;approvalService=new BJ0((X)=>this.eventService.publishEvent(X));scheduleService;constructor(X,Y,W,z){this.address=X,this.startedAt=vY(),this.store=Y,this.runtimeHandlers=W,this.scheduleService=new NJ0(z),this.store.init()}health(){return{serverId:this.serverId,address:this.address,running:!0,startedAt:this.startedAt,rpcVersion:iQ}}registerClient(X){let Y=b0(X.clientId).trim()||`client_${YJ0()}`,W=b0(X.clientType).trim()||void 0,z=PX1(X),F=vY(),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=I9(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:I9(X.metadata)}),{sessionId:Y,created:!0,status:z}}upsertSession(X){if(!X.session)throw Error("session is required");return this.store.upsertSession(SX1(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:XJ0(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)=>XJ0(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?zJ0(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?I9(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:I9(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:I9(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:I9(X.payload)??void 0}),this.eventService.publishEvent({eventId:"",sessionId:Y,taskId:W,eventType:"task.started",payload:I9(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=I9(X.result)??void 0,this.eventService.publishEvent({eventId:"",sessionId:Y,taskId:W,eventType:"task.completed",payload:I9(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 jX1=process.env.CLINE_RPC_ADDRESS?.trim()||iV;function AJ0(){return jX1}w6();import{existsSync as hX1,mkdirSync as _X1}from"node:fs";import{join as xX1}from"node:path";w6();function bX1(){return J8()}class hY{sessionsDirPath;db;constructor(X={}){this.sessionsDirPath=X.sessionsDir??bX1()}init(){this.getRawDb()}ensureSessionsDir(){if(!hX1(this.sessionsDirPath))_X1(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}sessionDbPath(){return xX1(this.ensureSessionsDir(),"sessions.db")}getRawDb(){if(this.db)return this.db;let X=fY(this.sessionDbPath());return CK(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);`],zX1=[{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 qX1(X,Y){return new Set(X.prepare(`PRAGMA table_info(${Y});`).all().map((W)=>W.name))}function CK(X,Y={}){X.exec("PRAGMA journal_mode = WAL;"),X.exec("PRAGMA busy_timeout = 5000;");for(let F of FX1)X.exec(F);if(!Y.includeLegacyMigrations)return;let W=new Map,z=(F)=>{let Q=W.get(F);if(!Q)Q=qX1(X,F),W.set(F,Q);return Q};for(let F of zX1)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 hA=N9(pQ(),1);import{randomUUID as YJ0}from"node:crypto";import{randomUUID as yX1}from"node:crypto";import{randomUUID as ZJ0}from"node:crypto";function JJ0(X){let Y=sQ0(IX1(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=sQ0(z);if(F===z)break;z=F}for(let F of W)if(AX1(F))return F;throw Error("Unable to resolve rpc.proto path")}var OX1="cline.rpc.v1",WJ0="ClineGateway";function TX1(){return JJ0(import.meta.url)}function $X1(){let X=QJ0.loadSync(TX1(),{keepCase:!1,longs:String,enums:String,defaults:!0,oneofs:!0}),Y=jY.loadPackageDefinition(X).cline?.rpc?.v1?.ClineGateway?.service;if(!Y)throw Error(`Unable to load ${OX1}.${WJ0} from proto`);return Y}function DX1(X){return new(jY.makeGenericClientConstructor($X1(),WJ0))(X,jY.credentials.createInsecure())}function RK(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)=>RK(Y))}};if(typeof X==="object"){let Y={fields:{}};for(let[W,z]of Object.entries(X))Y.fields??={},Y.fields[W]=RK(z);return{structValue:Y}}return{stringValue:String(X)}}function MK(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)=>MK(Y));if(X.structValue){let Y={};for(let[W,z]of Object.entries(X.structValue.fields??{}))Y[W]=MK(z);return Y}return}function r9(X){let Y={};for(let[W,z]of Object.entries(X??{}))Y[W]=RK(z);return{fields:Y}}function I9(X){if(!X?.fields)return;let Y={};for(let[W,z]of Object.entries(X.fields))Y[W]=MK(z);return Y}function a7(X){return RK(X)}function r7(X){return MK(X??void 0)}function EX1(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 eQ0(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:I9(X.metadata),transcriptPath:X.transcriptPath??"",hookPath:X.hookPath??"",messagesPath:X.messagesPath||void 0,updatedAt:X.updatedAt??""}}function CX1(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 yY(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:CX1(X.tagsJson??void 0),metadata:I9(X.metadata)}}function kA(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 nQ{client;constructor(X){this.client=DX1(X.address)}close(){this.client.close()}async upsertSession(X){await this.unary((Y)=>{let W={session:EX1(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 eQ0(Y.session)}async listSessions(X){return((await this.unary((Y)=>{this.client.ListSessions(X,Y)})).sessions??[]).map((Y)=>eQ0(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?yY(Y.schedule):void 0}async getSchedule(X){let Y=await this.unary((W)=>{this.client.GetSchedule({scheduleId:X},W)});return Y.schedule?yY(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)=>yY(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?yY(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?yY(Y.schedule):void 0}async resumeSchedule(X){let Y=await this.unary((W)=>{this.client.ResumeSchedule({scheduleId:X},W)});return Y.schedule?yY(Y.schedule):void 0}async triggerScheduleNow(X){let Y=await this.unary((W)=>{this.client.TriggerScheduleNow({scheduleId:X},W)});return Y.execution?kA(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)=>kA(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?kA(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:I9(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===z3){try{let z=W.payload;if(z.type==="team_progress_projection"&&z.version===1)Y.onProjection?.(z)}catch{}return}if(W.eventType===q3)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 RX1="cline.rpc.v1",FJ0="ClineGateway";function MX1(){return JJ0(import.meta.url)}function LX1(){let X=KJ0.loadSync(MX1(),{keepCase:!1,longs:String,enums:String,defaults:!0,oneofs:!0}),Y=GJ0.loadPackageDefinition(X).cline?.rpc?.v1?.ClineGateway?.service;if(!Y)throw Error(`Unable to load ${RX1}.${FJ0} from proto`);return Y}function vY(){return new Date().toISOString()}function b0(X){return typeof X==="string"?X:""}function PX1(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 wX1(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 zJ0(X){if(X==="running"||X==="completed"||X==="failed"||X==="cancelled")return X;return"running"}function XJ0(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 SX1(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:zJ0(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:I9(X.metadata),transcriptPath:K,hookPath:H,messagesPath:b0(X.messagesPath).trim()||void 0,updatedAt:b0(X.updatedAt).trim()||vY()}}function vA(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 kY(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 jA(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 qJ0(X){return new(LK.makeGenericClientConstructor(LX1(),FJ0))(X,LK.credentials.createInsecure())}async function i4(X){return await new Promise((Y)=>{let W;try{W=qJ0(X)}catch{Y(void 0);return}W.Health({},(z,F)=>{if(W?.close(),z||!F){Y(void 0);return}Y(F)})})}async function HJ0(X){return await new Promise((Y)=>{let W;try{W=qJ0(X)}catch{Y(void 0);return}W.Shutdown({},(z,F)=>{if(W?.close(),z||!F){Y(void 0);return}Y(F)})})}var fX1="0.0.24",iQ="1",VJ0=fX1,kX1=300000;class BJ0{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_${yX1()}`;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:vY(),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):kX1,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 UJ0{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_${ZJ0()}`,sessionId:Y,taskId:b0(X.taskId).trim()||void 0,eventType:b0(X.eventType).trim()||"unknown",payload:I9(X.payload)??{},sourceClientId:b0(X.sourceClientId).trim()||void 0,ts:vY()};return this.dispatchEvent(W),{eventId:W.eventId,accepted:!0}}addSubscriber(X){let Y=X.request,W=wX1(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_${ZJ0()}`,z=vY();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 NJ0{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:vA(b0(X.tagsJson)),metadata:I9(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:kY(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:kY(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:vA(b0(X.tagsJson))}).map((Y)=>kY(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=vA(b0(X.tagsJson))??[];if(X.hasMetadata)z.metadata=I9(X.metadata)??{};let F=Y.updateSchedule(W,z);return{updated:F!==void 0,schedule:F?kY(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?kY(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?kY(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:jA(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)=>jA(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?jA(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 vX1{serverId=YJ0();address;startedAt;runtimeHandlers;sessions=new Map;tasks=new Map;clients=new Map;store;eventService=new UJ0;approvalService=new BJ0((X)=>this.eventService.publishEvent(X));scheduleService;constructor(X,Y,W,z){this.address=X,this.startedAt=vY(),this.store=Y,this.runtimeHandlers=W,this.scheduleService=new NJ0(z),this.store.init()}health(){return{serverId:this.serverId,address:this.address,running:!0,startedAt:this.startedAt,rpcVersion:iQ}}registerClient(X){let Y=b0(X.clientId).trim()||`client_${YJ0()}`,W=b0(X.clientType).trim()||void 0,z=PX1(X),F=vY(),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=I9(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:I9(X.metadata)}),{sessionId:Y,created:!0,status:z}}upsertSession(X){if(!X.session)throw Error("session is required");return this.store.upsertSession(SX1(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:XJ0(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)=>XJ0(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?zJ0(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?I9(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:I9(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:I9(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:I9(X.payload)??void 0}),this.eventService.publishEvent({eventId:"",sessionId:Y,taskId:W,eventType:"task.started",payload:I9(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=I9(X.result)??void 0,this.eventService.publishEvent({eventId:"",sessionId:Y,taskId:W,eventType:"task.completed",payload:I9(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 jX1=process.env.CLINE_RPC_ADDRESS?.trim()||iV;function AJ0(){return jX1}w6();import{existsSync as hX1,mkdirSync as _X1}from"node:fs";import{join as xX1}from"node:path";w6();function bX1(){return J8()}class hY{sessionsDirPath;db;constructor(X={}){this.sessionsDirPath=X.sessionsDir??bX1()}init(){this.getRawDb()}ensureSessionsDir(){if(!hX1(this.sessionsDirPath))_X1(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}sessionDbPath(){return xX1(this.ensureSessionsDir(),"sessions.db")}getRawDb(){if(this.db)return this.db;let X=fY(this.sessionDbPath());return CK(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 KI(X,Y){return lV(X,Y==="plan"?"plan":"act")}funct
|
|
|
873
873
|
`,"utf8")}async applySubagentStatus(X,Y){await this.applySubagentStatusBySessionId(X,HI(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=qI(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})),NI(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<BI;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),dK(F.hookPath,`${JSON.stringify({ts:Y,hookName:"session_shutdown",reason:W,sessionId:F.sessionId,pid:F.pid,source:u8.STALE_SOURCE})}
|
|
874
874
|
`,"utf8"),dK(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=e7(F.metadata??void 0),{manifest:J}=this.readManifestFile(F.sessionId),Z=gY(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)a4(F.transcriptPath),a4(F.hookPath),a4(F.messagesPath),a4(this.artifacts.sessionManifestPath(F.sessionId,!1)),this.artifacts.removeSessionDirIfEmpty(F.sessionId)}return a4(W.transcriptPath),a4(W.hookPath),a4(W.messagesPath),a4(this.artifacts.sessionManifestPath(Y,!1)),this.artifacts.removeSessionDirIfEmpty(Y),{deleted:!0}}}function OI(){return new Date().toISOString()}function DW0(X,Y){let W=`${X}.tmp`;yZ1(W,`${JSON.stringify(Y,null,2)}
|
|
876
|
-
`,"utf8"),fZ1(W,X)}function kZ1(){return J8()}class EW0{sessionsDirPath;constructor(X=kZ1()){this.sessionsDirPath=X}ensureSessionsDir(){if(!II(this.sessionsDirPath))SZ1(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(!II(X))return{version:1,sessions:{}};try{let Y=JSON.parse(TW0(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(!II(X))return{version:1,nextId:1,requests:[]};try{let Y=JSON.parse(TW0(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:OI()};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:OI()}),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=OI(),this.writeQueue(W),z.task}}class TI extends u8{constructor(X){super(new EW0(X))}ensureSessionsDir(){return super.ensureSessionsDir()}}import{createHash as jZ1}from"node:crypto";import{mkdir as DI,readFile as wW0,rm as SW0,writeFile as fW0}from"node:fs/promises";import{createServer as hZ1}from"node:net";import{dirname as yW0,join as lK,resolve as _Z1}from"node:path";w6();var CW0="0.0.23";var $I=CW0;var xZ1=30000,bZ1=15000,uZ1=100,kW0="CLINE_RPC_STARTUP_LOCK_HELD",vW0="CLINE_RPC_OWNER_ID",jW0="CLINE_RPC_BUILD_ID",hW0="CLINE_RPC_DISCOVERY_PATH",RI=(X)=>new Promise((Y)=>setTimeout(Y,X));function mZ1(X){return X.replace(/[^a-zA-Z0-9_.-]+/g,"_")}function RW0(X){return jZ1("sha256").update(X).digest("hex").slice(0,12)}function MI(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 gZ1(){let X=process.argv[1]?.trim();if(!X)return;return _Z1(process.cwd(),X)}function xW0(X){let Y=`core=${$I}:rpc=${VJ0}`;return X?.trim()?`${Y}:host=${X.trim()}`:Y}function pK(X={}){let Y=X.identityPath?.trim()||gZ1(),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()||lK(D9(),"rpc","owners",`${mZ1(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 DI(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 cK(X){await SW0(X.discoveryPath,{force:!0}).catch(()=>{return})}async function dZ1(X,Y){if((await bW0(X))?.address===Y)await cK(X)}function EI(X){let Y=X?.rpcVersion?.trim()||"";return!!Y&&Y===iQ}function cZ1(X){if(Number(MI(X))===12)return!0;return(X instanceof Error?X.message:String(X)).toUpperCase().includes("UNIMPLEMENTED")}function lZ1(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 cZ1(X)||lZ1(X)}async function CI(X){let Y=new nQ({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 i4(X);return!!Y?.running&&EI(Y)&&await CI(X)}async function gW0(X,Y){return new Promise((W)=>{let z=hZ1();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 pZ1(X){let Y=X.trim().replace(/[^a-zA-Z0-9_.-]+/g,"_");return lK(D9(),"locks",`rpc-start-${Y}.lock`)}function nZ1(X){if(!Number.isInteger(X)||!X||X<=0)return!1;try{return process.kill(X,0),!0}catch(Y){return MI(Y)==="EPERM"}}async function iZ1(X,Y){let W={pid:process.pid,address:Y,acquiredAt:new Date().toISOString()};await fW0(lK(X,"owner.json"),JSON.stringify(W,null,2),"utf8")}async function aZ1(X){try{let Y=JSON.parse(await wW0(lK(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=pZ1(X),z=Date.now();await DI(yW0(W),{recursive:!0});while(!0)try{await DI(W,{recursive:!1}),await iZ1(W,X);try{return await Y()}finally{await PW0(W)}}catch(F){if(MI(F)!=="EEXIST")throw F;let Q=await aZ1(W),J=Q?new Date(Q.acquiredAt).getTime():Number.NaN;if(!Q||!Number.isFinite(J)||Date.now()-J>xZ1||!nZ1(Q.pid)){await PW0(W);continue}if(Date.now()-z>=bZ1)throw Error(`timed out waiting for rpc startup lock at ${X} (owner pid=${Q.pid})`);await RI(uZ1)}}async function rZ1(X,Y){let W=Y?.address?.trim();if(!W){await cK(X);return}if((await HJ0(W).catch(()=>{return}))?.accepted)for(let F=0;F<20;F+=1){if(!(await i4(W))?.running){await cK(X);return}await RI(100)}if(!(await i4(W))?.running)await cK(X)}async function cW0(X,Y={}){let W=Y.owner??Y.resolveOwner?.()??pK();return await dW0(X,async()=>{let z=await bW0(W);if(z?.address){let Z=await i4(z.address);if(Z?.running&&z.buildId===W.buildId&&z.protocolVersion===iQ&&EI(Z)&&await CI(z.address))return{address:z.address,action:"reuse",owner:W};await rZ1(W,z)}let F=await i4(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(EI(F)&&await CI(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 RI(100)}return!1}async function LI(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 i4(W.address);return await uW0(W.owner,{address:W.address,pid:void 0,serverId:z?.serverId,startedAt:z?.startedAt,protocolVersion:iQ,entryPath:W.owner.entryPath}),W}import{existsSync as oZ1,mkdirSync as tZ1}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 nK extends u8{sessionsDirPath;client;constructor(X){let Y=new nQ({address:X.address?.trim()||"127.0.0.1:4317"});super(new pW0(Y));this.sessionsDirPath=X.sessionsDir,this.client=Y}ensureSessionsDir(){if(!oZ1(this.sessionsDirPath))tZ1(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}close(){this.client.close()}}w6();import{closeSync as nW0,existsSync as sZ1,mkdirSync as eZ1,openSync as XQ1,readFileSync as YQ1,rmSync as iW0,writeFileSync as ZQ1}from"node:fs";import{dirname as QQ1,resolve as JQ1}from"node:path";var WQ1=15000;function GQ1(X){return Buffer.from(X).toString("base64url")}function KQ1(X){return JQ1(J8(),"rpc","spawn-leases",`${GQ1(X)}.lock`)}function FQ1(X){if(!Number.isInteger(X)||X<=0)return!1;try{return process.kill(X,0),!0}catch{return!1}}function zQ1(X,Y){try{let W=YQ1(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!FQ1(Number(z.pid??0))}catch{return!0}}function PI(X,Y){let W=Math.max(1000,Y?.ttlMs??WQ1),z=KQ1(X);if(eZ1(QQ1(z),{recursive:!0}),sZ1(z)&&zQ1(z,W))iW0(z,{force:!0});let F;try{F=XQ1(z,"wx");let J={address:X,pid:process.pid,createdAt:Date.now()};ZQ1(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"),fZ1(W,X)}function kZ1(){return J8()}class EW0{sessionsDirPath;constructor(X=kZ1()){this.sessionsDirPath=X}ensureSessionsDir(){if(!II(this.sessionsDirPath))SZ1(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(!II(X))return{version:1,sessions:{}};try{let Y=JSON.parse(TW0(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(!II(X))return{version:1,nextId:1,requests:[]};try{let Y=JSON.parse(TW0(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:OI()};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:OI()}),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=OI(),this.writeQueue(W),z.task}}class TI extends u8{constructor(X){super(new EW0(X))}ensureSessionsDir(){return super.ensureSessionsDir()}}import{createHash as jZ1}from"node:crypto";import{mkdir as DI,readFile as wW0,rm as SW0,writeFile as fW0}from"node:fs/promises";import{createServer as hZ1}from"node:net";import{dirname as yW0,join as lK,resolve as _Z1}from"node:path";w6();var CW0="0.0.24";var $I=CW0;var xZ1=30000,bZ1=15000,uZ1=100,kW0="CLINE_RPC_STARTUP_LOCK_HELD",vW0="CLINE_RPC_OWNER_ID",jW0="CLINE_RPC_BUILD_ID",hW0="CLINE_RPC_DISCOVERY_PATH",RI=(X)=>new Promise((Y)=>setTimeout(Y,X));function mZ1(X){return X.replace(/[^a-zA-Z0-9_.-]+/g,"_")}function RW0(X){return jZ1("sha256").update(X).digest("hex").slice(0,12)}function MI(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 gZ1(){let X=process.argv[1]?.trim();if(!X)return;return _Z1(process.cwd(),X)}function xW0(X){let Y=`core=${$I}:rpc=${VJ0}`;return X?.trim()?`${Y}:host=${X.trim()}`:Y}function pK(X={}){let Y=X.identityPath?.trim()||gZ1(),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()||lK(D9(),"rpc","owners",`${mZ1(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 DI(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 cK(X){await SW0(X.discoveryPath,{force:!0}).catch(()=>{return})}async function dZ1(X,Y){if((await bW0(X))?.address===Y)await cK(X)}function EI(X){let Y=X?.rpcVersion?.trim()||"";return!!Y&&Y===iQ}function cZ1(X){if(Number(MI(X))===12)return!0;return(X instanceof Error?X.message:String(X)).toUpperCase().includes("UNIMPLEMENTED")}function lZ1(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 cZ1(X)||lZ1(X)}async function CI(X){let Y=new nQ({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 i4(X);return!!Y?.running&&EI(Y)&&await CI(X)}async function gW0(X,Y){return new Promise((W)=>{let z=hZ1();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 pZ1(X){let Y=X.trim().replace(/[^a-zA-Z0-9_.-]+/g,"_");return lK(D9(),"locks",`rpc-start-${Y}.lock`)}function nZ1(X){if(!Number.isInteger(X)||!X||X<=0)return!1;try{return process.kill(X,0),!0}catch(Y){return MI(Y)==="EPERM"}}async function iZ1(X,Y){let W={pid:process.pid,address:Y,acquiredAt:new Date().toISOString()};await fW0(lK(X,"owner.json"),JSON.stringify(W,null,2),"utf8")}async function aZ1(X){try{let Y=JSON.parse(await wW0(lK(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=pZ1(X),z=Date.now();await DI(yW0(W),{recursive:!0});while(!0)try{await DI(W,{recursive:!1}),await iZ1(W,X);try{return await Y()}finally{await PW0(W)}}catch(F){if(MI(F)!=="EEXIST")throw F;let Q=await aZ1(W),J=Q?new Date(Q.acquiredAt).getTime():Number.NaN;if(!Q||!Number.isFinite(J)||Date.now()-J>xZ1||!nZ1(Q.pid)){await PW0(W);continue}if(Date.now()-z>=bZ1)throw Error(`timed out waiting for rpc startup lock at ${X} (owner pid=${Q.pid})`);await RI(uZ1)}}async function rZ1(X,Y){let W=Y?.address?.trim();if(!W){await cK(X);return}if((await HJ0(W).catch(()=>{return}))?.accepted)for(let F=0;F<20;F+=1){if(!(await i4(W))?.running){await cK(X);return}await RI(100)}if(!(await i4(W))?.running)await cK(X)}async function cW0(X,Y={}){let W=Y.owner??Y.resolveOwner?.()??pK();return await dW0(X,async()=>{let z=await bW0(W);if(z?.address){let Z=await i4(z.address);if(Z?.running&&z.buildId===W.buildId&&z.protocolVersion===iQ&&EI(Z)&&await CI(z.address))return{address:z.address,action:"reuse",owner:W};await rZ1(W,z)}let F=await i4(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(EI(F)&&await CI(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 RI(100)}return!1}async function LI(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 i4(W.address);return await uW0(W.owner,{address:W.address,pid:void 0,serverId:z?.serverId,startedAt:z?.startedAt,protocolVersion:iQ,entryPath:W.owner.entryPath}),W}import{existsSync as oZ1,mkdirSync as tZ1}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 nK extends u8{sessionsDirPath;client;constructor(X){let Y=new nQ({address:X.address?.trim()||"127.0.0.1:4317"});super(new pW0(Y));this.sessionsDirPath=X.sessionsDir,this.client=Y}ensureSessionsDir(){if(!oZ1(this.sessionsDirPath))tZ1(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}close(){this.client.close()}}w6();import{closeSync as nW0,existsSync as sZ1,mkdirSync as eZ1,openSync as XQ1,readFileSync as YQ1,rmSync as iW0,writeFileSync as ZQ1}from"node:fs";import{dirname as QQ1,resolve as JQ1}from"node:path";var WQ1=15000;function GQ1(X){return Buffer.from(X).toString("base64url")}function KQ1(X){return JQ1(J8(),"rpc","spawn-leases",`${GQ1(X)}.lock`)}function FQ1(X){if(!Number.isInteger(X)||X<=0)return!1;try{return process.kill(X,0),!0}catch{return!1}}function zQ1(X,Y){try{let W=YQ1(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!FQ1(Number(z.pid??0))}catch{return!0}}function PI(X,Y){let W=Math.max(1000,Y?.ttlMs??WQ1),z=KQ1(X);if(eZ1(QQ1(z),{recursive:!0}),sZ1(z)&&zQ1(z,W))iW0(z,{force:!0});let F;try{F=XQ1(z,"wx");let J={address:X,pid:process.pid,createdAt:Date.now()};ZQ1(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.
|
|
4
|
+
"version": "0.0.24",
|
|
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.
|
|
40
|
-
"@clinebot/llms": "0.0.
|
|
39
|
+
"@clinebot/agents": "0.0.24",
|
|
40
|
+
"@clinebot/llms": "0.0.24",
|
|
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.
|
|
58
|
-
"@clinebot/shared": "0.0.
|
|
57
|
+
"@clinebot/rpc": "0.0.24",
|
|
58
|
+
"@clinebot/shared": "0.0.24"
|
|
59
59
|
},
|
|
60
60
|
"engines": {
|
|
61
61
|
"node": ">=20"
|