@cline/core 0.0.44 → 0.0.45

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.
@@ -477,7 +477,7 @@ ${JSON.stringify(W,null,2)}`}startClaimLeaseHeartbeat($){let f=Math.max(1000,Mat
477
477
  updated_at = ?
478
478
  WHERE run_id = ? AND claim_token = ?`).run($.error??null,$.scheduledFor??null,f,$.runId,$.claimToken).changes??0)>0}attachSessionIdToRun($,f){this.db.prepare("UPDATE cron_runs SET session_id = ?, updated_at = ? WHERE run_id = ?").run(f,R0(),$)}attachReportPathToRun($,f){this.db.prepare("UPDATE cron_runs SET report_path = ?, updated_at = ? WHERE run_id = ?").run(f,R0(),$)}}class hJ{store;reconciler;watcher;eventIngress;materializer;runner;started=!1;disposed=!1;constructor($){this.store=new SJ({dbPath:$.dbPath});let f=$.specs;this.reconciler=new _9({store:this.store,specs:f}),this.materializer=new NJ({store:this.store}),this.eventIngress=new B9({store:this.store,logger:$.logger}),this.runner=new MJ({store:this.store,materializer:this.materializer,runtimeHandlers:$.runtimeHandlers,workspaceRoot:$.workspaceRoot,specs:f,logger:$.logger,pollIntervalMs:$.pollIntervalMs,claimLeaseSeconds:$.claimLeaseSeconds,globalMaxConcurrency:$.globalMaxConcurrency}),this.watcher=new T9({reconciler:this.reconciler,debounceMs:$.watcherDebounceMs,onReconciled:()=>{this.materializer.materializeAll()},onError:(J)=>{let W=$.logger;if(W)if(W.error)W.error("cron.watcher.failed",{error:J});else W.log("cron.watcher.failed",{error:J})}})}async start(){if(this.disposed)throw Error("CronService disposed");if(this.started)return;this.started=!0,await this.reconciler.reconcileAll(),this.materializer.materializeAll(),this.watcher.start(),await this.runner.start()}async stop(){this.watcher.stop(),await this.runner.stop(),this.started=!1}async dispose(){if(this.disposed)return;this.disposed=!0,this.watcher.dispose(),await this.runner.dispose(),this.store.close()}listSpecs($){return this.store.listSpecs($)}getSpec($){return this.store.getSpec($)}listRuns($){return this.store.listRuns($)}getRun($){return this.store.getRun($)}listActiveRuns(){return this.store.listRuns({status:"running",limit:200})}listUpcomingRuns($=20){return this.store.listRuns({status:"queued",limit:$})}async reconcileNow(){await this.reconciler.reconcileAll(),this.materializer.materializeAll()}ingestEvent($){return this.eventIngress.ingestEvent($)}listEventLogs($){return this.store.listEventLogs($)}getEventLog($){return this.store.getEventLog($)}}var ZA={};w(ZA,{manifestToSessionRecord:()=>A5,listSessionHistoryFromBackend:()=>h9,listSessionHistory:()=>V5,hydrateSessionHistory:()=>WA});import{readdir as bO,readFile as $A}from"node:fs/promises";import{join as fA}from"node:path";import{formatDisplayUserInput as kO,normalizeUserInput as IO}from"@cline/shared";import{resolveSessionDataDir as JA}from"@cline/shared/storage";import{existsSync as hO}from"node:fs";import{readFile as CO}from"node:fs/promises";import{formatDisplayUserInput as tY}from"@cline/shared";class CJ{listeners=new Set;subscribe($,f){let J={listener:$,sessionId:f?.sessionId?.trim()||void 0};return this.listeners.add(J),()=>{this.listeners.delete(J)}}emit($){let f=$.payload.sessionId?.trim();for(let J of this.listeners){if(J.sessionId&&J.sessionId!==f)continue;J.listener($)}}get size(){return this.listeners.size}}async function P1($){let f=$?.trim();if(!f||!hO(f))return[];try{let J=(await CO(f,"utf8")).trim();if(!J)return[];let W=JSON.parse(J);if(Array.isArray(W))return sY(W);if(W&&typeof W==="object"&&!Array.isArray(W)){let Z=W.messages;if(Array.isArray(Z))return sY(Z)}return[]}catch{return[]}}function EO($){if($.role!=="user")return $;if(typeof $.content==="string")return{...$,content:tY($.content)};return{...$,content:$.content.map((f)=>{if(f.type!=="text"||typeof f.text!=="string")return f;return{...f,text:tY(f.text)}})}}function sY($){return $.map(EO)}function q9($){return $?{...$}:void 0}async function oY($,f){if(!($.hookName==="tool_call"||!!$.parent_agent_id))return;await f.queueSpawnRequest($);let W=await f.upsertSubagentSessionFromHook($);if(!W)return;await f.appendSubagentHookAudit(W,$),await f.applySubagentStatus(W,$)}function EJ($){if(typeof $!=="string")return;let f=$.trim();return f.length>0?f:void 0}function u0($){let f=EJ($);if(!f)return;return f.toLowerCase()==="unknown"?void 0:f}function Y5($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function xO($){if(!$||typeof $!=="object"||Array.isArray($))return;return{...$}}function S9($){let f=$??200;return Number.isFinite(f)?Math.max(0,Math.floor(f)):200}function mO($){if($===0)return 0;return Math.min(Math.max($*2,20),2000)}function gO($){return $.isSubagent!==!0&&!EJ($.parentSessionId)}function vO($){let f=$.match(/\d{13,}/g);if(!f||f.length===0)return 0;let J=0;for(let W of f){let Z=Number.parseInt(W,10);if(Number.isFinite(Z)&&Z>J)J=Z}return J}function A5($){return{sessionId:$.session_id,source:$.source,pid:$.pid,startedAt:$.started_at,endedAt:$.ended_at??null,exitCode:$.exit_code??null,status:$.status,interactive:$.interactive,provider:$.provider,model:$.model,cwd:$.cwd,workspaceRoot:$.workspace_root,teamName:$.team_name,enableTools:$.enable_tools,enableSpawn:$.enable_spawn,enableTeams:$.enable_teams,isSubagent:!1,prompt:$.prompt,metadata:$.metadata,messagesPath:$.messages_path,updatedAt:$.ended_at??$.started_at}}async function uO($){let f=S9($);if(f===0)return[];let J=JA(),Z=(await bO(J,{withFileTypes:!0}).catch(()=>[])).filter((j)=>j.isDirectory()).map((j)=>({entry:j,recency:vO(j.name.trim())})).sort((j,X)=>X.recency-j.recency||X.entry.name.localeCompare(j.entry.name));return(await Promise.all(Z.map(async({entry:j})=>{let X=j.name.trim();if(!X)return;let H=fA(J,X,`${X}.json`),Y=await $A(H,"utf8").catch(()=>{return});if(!Y)return;let A;try{A=JSON.parse(Y)}catch{return}let V=y0.safeParse(A);if(!V.success)return;return A5(V.data)}))).filter((j)=>Boolean(j)).sort((j,X)=>X.startedAt.localeCompare(j.startedAt)).slice(0,f)}async function cO($,f,J){let W=S9(f);if(W===0)return await $.listSessions(0),[];let Z=J.includeSubagents?W:mO(W),Q=await $.listSessions(Z);return(J.includeSubagents?Q:Q.filter(gO)).slice(0,W)}function dO($){if(typeof $==="string")return $.trim();let f=[];for(let J of $){if(!J||typeof J!=="object")continue;let W=J;if(W.type!=="text")continue;let Z=W.text?.trim();if(Z)f.push(Z)}return f.join(`
479
479
  `).trim()}function eY($){return $.replace(/\s+/g," ").trim()}function lO($,f){if($.length<=f)return $;return`${$.slice(0,Math.max(0,f-3)).trimEnd()}...`}function pO($){for(let f of["user","assistant"])for(let J of $){if(J.role!==f)continue;let W=eY(dO(J.content));if(!W)continue;let Z=f==="user"?eY(kO(W)):W,Q=IO(Z.split(`
480
- `)[0]??Z);return lO(Q,50)}return}function rO($){let f=0;for(let J of $)f+=Y5(J.metrics?.cost)??0;return f}function iO($){let f,J;for(let W=$.length-1;W>=0;W-=1){let Z=$[W];if(!f)f=u0(Z.modelInfo?.provider);if(!J)J=u0(Z.modelInfo?.id);if(f&&J)break}return{provider:f,model:J}}function nO($){return u0($?.provider)??u0($?.provider&&typeof $.provider==="object"&&!Array.isArray($.provider)?$.provider.id:void 0)}function aO($){return u0($?.model)??u0($?.model&&typeof $.model==="object"&&!Array.isArray($.model)?$.model.id:void 0)}function w9($,f){let J=xO($.metadata),W=EJ(f?.title)??EJ(J?.title),Z=Y5(f?.totalCost)??Y5(J?.totalCost),Q=J||W!==void 0||Z!==void 0?{...J??{},...W!==void 0?{title:W}:{},...Z!==void 0?{totalCost:Z}:{}}:void 0;return{...$,provider:u0(f?.provider)??u0($.provider)??nO(J)??"",model:u0(f?.model)??u0($.model)??aO(J)??"",metadata:Q}}function tO($){let f=$.content;if(!Array.isArray(f))return!1;return f.some((J)=>!!J&&typeof J==="object"&&J.type==="tool-call")}function sO($,f){if($.status!=="running"||$.interactive!==!0)return!1;let J=f.at(-1);return J?.role==="assistant"&&!tO(J)}async function oO($,f){return await Promise.all(f.map(async(J)=>{if(J.status!=="running"||J.interactive!==!0)return J;let W=await $.readSessionMessages(J.sessionId);return sO(J,W)?{...J,status:"idle"}:J}))}async function WA($,f){return await Promise.all(f.map(async(J)=>{let W=w9(J),Z=Boolean(EJ(W.metadata?.title)),Q=Boolean(u0(W.provider)),j=Boolean(u0(W.model)),X=Y5(W.metadata?.totalCost),H=X!==void 0&&X>0;if(Z&&Q&&j&&H)return W;let Y=await $.readSessionMessages(J.sessionId);if(Y.length===0)return W;let A=iO(Y),V=rO(Y);return w9(J,{title:Z?void 0:pO(Y),provider:Q?void 0:A.provider,model:j?void 0:A.model,totalCost:H||V<=0?void 0:V})}))}async function V5($,f={}){let J=S9(f.limit),W=f.includeSubagents===!0,Z=await cO($,J,{includeSubagents:W}),Q=f.includeManifestFallback===!0&&Z.length<J?await uO(Math.min(Math.max(J*2,100),500)):[],j=new Map;for(let Y of[...Z,...Q]){if(j.has(Y.sessionId))continue;j.set(Y.sessionId,Y)}let X=Q.length===0?Z:Array.from(j.values()).sort((Y,A)=>A.startedAt.localeCompare(Y.startedAt)).slice(0,J),H=await oO($,X);if(f.hydrate===!1)return H.map((Y)=>w9(Y));return await WA($,H)}async function eO($){let f=$.trim();if(!f)return;let J=fA(JA(),f,`${f}.json`),W=await $A(J,"utf8").catch(()=>{return});if(!W)return;try{let Z=y0.safeParse(JSON.parse(W));return Z.success?Z.data.messages_path:void 0}catch{return}}async function h9($,f={}){let J=new Map;return await V5({listSessions:async(Z)=>{let Q=await $.listSessions(Z);J.clear();for(let j of Q)J.set(j.sessionId,j);return Q.map(T8)},readSessionMessages:async(Z)=>{let Q=J.get(Z)?.messagesPath??await eO(Z);return await P1(Q)}},f)}var HV={};w(HV,{resolveSessionBackend:()=>BQ,createRuntimeHost:()=>y2});import{captureSdkError as jV}from"@cline/shared";import{createSessionId as d_,resolveHubCommandTimeoutMs as l_}from"@cline/shared";import{spawn as z_}from"node:child_process";import{closeSync as O_,mkdirSync as __,openSync as T_}from"node:fs";import{basename as N_,dirname as M_,join as y_}from"node:path";import{fileURLToPath as q_}from"node:url";import{CLINE_RUN_AS_HUB_DAEMON_ENV as w_,isHubDaemonProcess as FA,withResolvedClineBuildEnv as S_}from"@cline/shared";import{createHash as $_,randomBytes as f_}from"node:crypto";import{existsSync as J_}from"node:fs";import{chmod as W_,mkdir as C9,readFile as YA,rm as E9,writeFile as AA}from"node:fs/promises";import{dirname as VA,join as b9}from"node:path";import{resolveClineDataDir as kJ,resolveClineDir as BA}from"@cline/shared/storage";var jA="0.0.44";var bJ={name:"@cline/core",description:"Cline Core SDK for Node Runtime",version:jA,repository:{type:"git",url:"https://github.com/cline/cline",directory:"sdk/packages/core"},type:"module",types:"./dist/index.d.ts",main:"./dist/index.js",private:!1,publishConfig:{access:"public"},exports:{".":{types:"./dist/index.d.ts",import:"./dist/index.js"},"./hub":{types:"./dist/hub/index.d.ts",import:"./dist/hub/index.js"},"./hub/daemon-entry":{types:"./dist/hub/daemon/entry.d.ts",import:"./dist/hub/daemon/entry.js"},"./telemetry":{types:"./dist/services/telemetry/index.d.ts",import:"./dist/services/telemetry/index.js"}},scripts:{build:"bun run ./bun.mts && bun tsc -p tsconfig.build.json",typecheck:"bun tsc -p tsconfig.dev.json --noEmit && bun run typecheck:smoke","typecheck:smoke":"bun tsc -p tsconfig.smoke.json --noEmit",test:"bun run test:unit && bun run test:e2e","test:live":"vitest run --config vitest.config.ts src/extensions/context/compaction.live.test.ts","test:unit":"vitest run --config vitest.config.ts","test:e2e":"vitest run --config vitest.e2e.config.ts","verify:routines":"zsh -lc 'bunx vitest run src/cron/schedule-service.test.ts --config vitest.config.ts'","test:watch":"vitest --config vitest.config.ts"},dependencies:{"@cline/agents":"workspace:*","@cline/shared":"workspace:*","@cline/llms":"workspace:*","@modelcontextprotocol/sdk":"^1.29.0","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.214.0","@opentelemetry/exporter-logs-otlp-http":"^0.214.0","@opentelemetry/exporter-metrics-otlp-http":"^0.214.0","@opentelemetry/exporter-trace-otlp-http":"^0.214.0","@opentelemetry/resources":"^2.6.1","@opentelemetry/sdk-logs":"^0.214.0","@opentelemetry/sdk-metrics":"^2.6.1","@opentelemetry/sdk-trace-base":"^2.6.1","@opentelemetry/sdk-trace-node":"^2.6.1","@opentelemetry/semantic-conventions":"^1.40.0",jiti:"^2.7.0","node-machine-id":"^1.1.12",nanoid:"^5.1.7","simple-git":"3.36.0",ws:"^8.20.0",yaml:"^2.8.2",zod:"^4.3.6"},devDependencies:{"@types/ws":"^8.18.1"},engines:{node:">=22"},files:["dist","!dist/**/*.d.ts.map"]};var Z_="CLINE_HUB_DISCOVERY_PATH",Q_="CLINE_HUB_BUILD_ID",XA=30000,j_=15000,X_=100;function H_($){return $.replace(/[^a-zA-Z0-9_.-]+/g,"_")}function Y_($){return $_("sha256").update($).digest("hex").slice(0,12)}function A_($){if(!Number.isInteger($)||!$||$<=0)return!1;try{return process.kill($,0),!0}catch(f){return f instanceof Error&&"code"in f?String(f.code)==="EPERM":!1}}function B5(){return f_(32).toString("hex")}function V_($){return new Promise((f)=>setTimeout(f,$))}function B_($){return`${$}.lock`}async function K_($){try{let f=JSON.parse(await YA(b9($,"owner.json"),"utf8"));if(typeof f.pid!=="number"||typeof f.acquiredAt!=="string")return;return{pid:f.pid,acquiredAt:f.acquiredAt}}catch{return}}async function HA($){await E9($,{recursive:!0,force:!0}).catch(()=>{return})}function U1(){return process.env[Q_]?.trim()||String(bJ.version)}function x$($=process.argv[1]?.trim()||process.cwd()){let f=`hub-${Y_($)}`,J=process.env[Z_]?.trim()||b9(kJ(),"locks","hub","owners",`${H_(f)}.json`);return{ownerId:f,discoveryPath:J}}function KA($=`hub-${Date.now().toString(36)}`){return x$($)}async function K0($){try{let f=JSON.parse(await YA($,"utf8"));if(typeof f.hubId!=="string"||typeof f.protocolVersion!=="string"||typeof f.authToken!=="string"||typeof f.host!=="string"||typeof f.port!=="number"||typeof f.url!=="string"||typeof f.startedAt!=="string"||typeof f.updatedAt!=="string")return;return{hubId:f.hubId,protocolVersion:f.protocolVersion,coreVersion:typeof f.coreVersion==="string"?f.coreVersion:void 0,buildId:typeof f.buildId==="string"?f.buildId:void 0,authToken:f.authToken,host:f.host,port:f.port,url:f.url,pid:typeof f.pid==="number"?f.pid:void 0,startedAt:f.startedAt,updatedAt:f.updatedAt}}catch{return}}async function K5($,f){await C9(VA($),{recursive:!0}),await E9($,{force:!0}).catch(()=>{return}),await AA($,`${JSON.stringify(f,null,2)}
480
+ `)[0]??Z);return lO(Q,50)}return}function rO($){let f=0;for(let J of $)f+=Y5(J.metrics?.cost)??0;return f}function iO($){let f,J;for(let W=$.length-1;W>=0;W-=1){let Z=$[W];if(!f)f=u0(Z.modelInfo?.provider);if(!J)J=u0(Z.modelInfo?.id);if(f&&J)break}return{provider:f,model:J}}function nO($){return u0($?.provider)??u0($?.provider&&typeof $.provider==="object"&&!Array.isArray($.provider)?$.provider.id:void 0)}function aO($){return u0($?.model)??u0($?.model&&typeof $.model==="object"&&!Array.isArray($.model)?$.model.id:void 0)}function w9($,f){let J=xO($.metadata),W=EJ(f?.title)??EJ(J?.title),Z=Y5(f?.totalCost)??Y5(J?.totalCost),Q=J||W!==void 0||Z!==void 0?{...J??{},...W!==void 0?{title:W}:{},...Z!==void 0?{totalCost:Z}:{}}:void 0;return{...$,provider:u0(f?.provider)??u0($.provider)??nO(J)??"",model:u0(f?.model)??u0($.model)??aO(J)??"",metadata:Q}}function tO($){let f=$.content;if(!Array.isArray(f))return!1;return f.some((J)=>!!J&&typeof J==="object"&&J.type==="tool-call")}function sO($,f){if($.status!=="running"||$.interactive!==!0)return!1;let J=f.at(-1);return J?.role==="assistant"&&!tO(J)}async function oO($,f){return await Promise.all(f.map(async(J)=>{if(J.status!=="running"||J.interactive!==!0)return J;let W=await $.readSessionMessages(J.sessionId);return sO(J,W)?{...J,status:"idle"}:J}))}async function WA($,f){return await Promise.all(f.map(async(J)=>{let W=w9(J),Z=Boolean(EJ(W.metadata?.title)),Q=Boolean(u0(W.provider)),j=Boolean(u0(W.model)),X=Y5(W.metadata?.totalCost),H=X!==void 0&&X>0;if(Z&&Q&&j&&H)return W;let Y=await $.readSessionMessages(J.sessionId);if(Y.length===0)return W;let A=iO(Y),V=rO(Y);return w9(J,{title:Z?void 0:pO(Y),provider:Q?void 0:A.provider,model:j?void 0:A.model,totalCost:H||V<=0?void 0:V})}))}async function V5($,f={}){let J=S9(f.limit),W=f.includeSubagents===!0,Z=await cO($,J,{includeSubagents:W}),Q=f.includeManifestFallback===!0&&Z.length<J?await uO(Math.min(Math.max(J*2,100),500)):[],j=new Map;for(let Y of[...Z,...Q]){if(j.has(Y.sessionId))continue;j.set(Y.sessionId,Y)}let X=Q.length===0?Z:Array.from(j.values()).sort((Y,A)=>A.startedAt.localeCompare(Y.startedAt)).slice(0,J),H=await oO($,X);if(f.hydrate===!1)return H.map((Y)=>w9(Y));return await WA($,H)}async function eO($){let f=$.trim();if(!f)return;let J=fA(JA(),f,`${f}.json`),W=await $A(J,"utf8").catch(()=>{return});if(!W)return;try{let Z=y0.safeParse(JSON.parse(W));return Z.success?Z.data.messages_path:void 0}catch{return}}async function h9($,f={}){let J=new Map;return await V5({listSessions:async(Z)=>{let Q=await $.listSessions(Z);J.clear();for(let j of Q)J.set(j.sessionId,j);return Q.map(T8)},readSessionMessages:async(Z)=>{let Q=J.get(Z)?.messagesPath??await eO(Z);return await P1(Q)}},f)}var HV={};w(HV,{resolveSessionBackend:()=>BQ,createRuntimeHost:()=>y2});import{captureSdkError as jV}from"@cline/shared";import{createSessionId as d_,resolveHubCommandTimeoutMs as l_}from"@cline/shared";import{spawn as z_}from"node:child_process";import{closeSync as O_,mkdirSync as __,openSync as T_}from"node:fs";import{basename as N_,dirname as M_,join as y_}from"node:path";import{fileURLToPath as q_}from"node:url";import{CLINE_RUN_AS_HUB_DAEMON_ENV as w_,isHubDaemonProcess as FA,withResolvedClineBuildEnv as S_}from"@cline/shared";import{createHash as $_,randomBytes as f_}from"node:crypto";import{existsSync as J_}from"node:fs";import{chmod as W_,mkdir as C9,readFile as YA,rm as E9,writeFile as AA}from"node:fs/promises";import{dirname as VA,join as b9}from"node:path";import{resolveClineDataDir as kJ,resolveClineDir as BA}from"@cline/shared/storage";var jA="0.0.45";var bJ={name:"@cline/core",description:"Cline Core SDK for Node Runtime",version:jA,repository:{type:"git",url:"https://github.com/cline/cline",directory:"sdk/packages/core"},type:"module",types:"./dist/index.d.ts",main:"./dist/index.js",private:!1,publishConfig:{access:"public"},exports:{".":{types:"./dist/index.d.ts",import:"./dist/index.js"},"./hub":{types:"./dist/hub/index.d.ts",import:"./dist/hub/index.js"},"./hub/daemon-entry":{types:"./dist/hub/daemon/entry.d.ts",import:"./dist/hub/daemon/entry.js"},"./telemetry":{types:"./dist/services/telemetry/index.d.ts",import:"./dist/services/telemetry/index.js"}},scripts:{build:"bun run ./bun.mts && bun tsc -p tsconfig.build.json",typecheck:"bun tsc -p tsconfig.dev.json --noEmit && bun run typecheck:smoke","typecheck:smoke":"bun tsc -p tsconfig.smoke.json --noEmit",test:"bun run test:unit && bun run test:e2e","test:live":"vitest run --config vitest.config.ts src/extensions/context/compaction.live.test.ts","test:unit":"vitest run --config vitest.config.ts","test:e2e":"vitest run --config vitest.e2e.config.ts","verify:routines":"zsh -lc 'bunx vitest run src/cron/schedule-service.test.ts --config vitest.config.ts'","test:watch":"vitest --config vitest.config.ts"},dependencies:{"@cline/agents":"workspace:*","@cline/shared":"workspace:*","@cline/llms":"workspace:*","@modelcontextprotocol/sdk":"^1.29.0","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.214.0","@opentelemetry/exporter-logs-otlp-http":"^0.214.0","@opentelemetry/exporter-metrics-otlp-http":"^0.214.0","@opentelemetry/exporter-trace-otlp-http":"^0.214.0","@opentelemetry/resources":"^2.6.1","@opentelemetry/sdk-logs":"^0.214.0","@opentelemetry/sdk-metrics":"^2.6.1","@opentelemetry/sdk-trace-base":"^2.6.1","@opentelemetry/sdk-trace-node":"^2.6.1","@opentelemetry/semantic-conventions":"^1.40.0",jiti:"^2.7.0","node-machine-id":"^1.1.12",nanoid:"^5.1.7","simple-git":"3.36.0",ws:"^8.20.0",yaml:"^2.8.2",zod:"^4.3.6"},devDependencies:{"@types/ws":"^8.18.1"},engines:{node:">=22"},files:["dist","!dist/**/*.d.ts.map"]};var Z_="CLINE_HUB_DISCOVERY_PATH",Q_="CLINE_HUB_BUILD_ID",XA=30000,j_=15000,X_=100;function H_($){return $.replace(/[^a-zA-Z0-9_.-]+/g,"_")}function Y_($){return $_("sha256").update($).digest("hex").slice(0,12)}function A_($){if(!Number.isInteger($)||!$||$<=0)return!1;try{return process.kill($,0),!0}catch(f){return f instanceof Error&&"code"in f?String(f.code)==="EPERM":!1}}function B5(){return f_(32).toString("hex")}function V_($){return new Promise((f)=>setTimeout(f,$))}function B_($){return`${$}.lock`}async function K_($){try{let f=JSON.parse(await YA(b9($,"owner.json"),"utf8"));if(typeof f.pid!=="number"||typeof f.acquiredAt!=="string")return;return{pid:f.pid,acquiredAt:f.acquiredAt}}catch{return}}async function HA($){await E9($,{recursive:!0,force:!0}).catch(()=>{return})}function U1(){return process.env[Q_]?.trim()||String(bJ.version)}function x$($=process.argv[1]?.trim()||process.cwd()){let f=`hub-${Y_($)}`,J=process.env[Z_]?.trim()||b9(kJ(),"locks","hub","owners",`${H_(f)}.json`);return{ownerId:f,discoveryPath:J}}function KA($=`hub-${Date.now().toString(36)}`){return x$($)}async function K0($){try{let f=JSON.parse(await YA($,"utf8"));if(typeof f.hubId!=="string"||typeof f.protocolVersion!=="string"||typeof f.authToken!=="string"||typeof f.host!=="string"||typeof f.port!=="number"||typeof f.url!=="string"||typeof f.startedAt!=="string"||typeof f.updatedAt!=="string")return;return{hubId:f.hubId,protocolVersion:f.protocolVersion,coreVersion:typeof f.coreVersion==="string"?f.coreVersion:void 0,buildId:typeof f.buildId==="string"?f.buildId:void 0,authToken:f.authToken,host:f.host,port:f.port,url:f.url,pid:typeof f.pid==="number"?f.pid:void 0,startedAt:f.startedAt,updatedAt:f.updatedAt}}catch{return}}async function K5($,f){await C9(VA($),{recursive:!0}),await E9($,{force:!0}).catch(()=>{return}),await AA($,`${JSON.stringify(f,null,2)}
481
481
  `,{encoding:"utf8",mode:384}),await W_($,384)}async function c0($){await E9($,{force:!0}).catch(()=>{return})}async function G5($,f){let J=B_($);await C9(VA(J),{recursive:!0});let W=Date.now()+j_;while(!0)try{await C9(J,{recursive:!1}),await AA(b9(J,"owner.json"),`${JSON.stringify({pid:process.pid,acquiredAt:new Date().toISOString()},null,2)}
482
482
  `,"utf8");try{return await f()}finally{await HA(J)}}catch(Z){if((Z instanceof Error&&"code"in Z?String(Z.code):"")!=="EEXIST")throw Z;let j=await K_(J),X=j?Date.now()-Date.parse(j.acquiredAt):XA+1;if(!j||!A_(j.pid)||X>XA){await HA(J);continue}if(Date.now()>=W)throw Error(`Timed out waiting for hub startup lock ${J}`);await V_(X_)}}async function A$($){try{let f=await fetch(k9($));if(!f.ok)return;return await f.json()}catch{return}}function $$($,f,J="/hub"){return new URL(`ws://${$}:${f}${J}`).toString()}function k9($){let f=new URL($);return f.protocol=f.protocol==="wss:"?"https:":"http:",f.pathname="/health",f.search="",f.toString()}function GA($){return J_($)}import{CLINE_HUB_DEV_PORT as G_,CLINE_HUB_PORT as P_,resolveClineBuildEnv as U_}from"@cline/shared";var F_="CLINE_HUB_HOST",R_="CLINE_HUB_PORT",D_="CLINE_HUB_PATHNAME",I9="127.0.0.1",x9=P_,m9="/hub";function PA($){return U_($)==="development"?G_:x9}function g9($={}){return($.env??process.env)[F_]?.trim()||I9}function R2($={}){let J=($.env??process.env)[R_]?.trim();if(!J)return PA($);let W=Number.parseInt(J,10);if(!Number.isInteger(W)||W<1||W>65535)return PA($);return W}function v9($={}){return($.env??process.env)[D_]?.trim()||m9}function d0($={},f={}){return{host:$.host??g9(f),port:$.port??R2(f),pathname:$.pathname??v9(f)}}var L_="shared:cline";function UA($){let f=C$($.trim());return x$(`workspace:${f||$.trim()}`)}function Y0($=L_){return x$($)}var h_=8000,C_=200,E_=3000,b_=100,k_=[100,250,500,1000,2000],I_="--cline-hub-daemon";function x_($){return[...$.host?["--host",$.host]:[],...typeof $.port==="number"?["--port",String($.port)]:[],...$.pathname?["--pathname",$.pathname]:[]]}function m_(){try{let $=y_(kJ(),"logs","hub-daemon.log");return __(M_($),{recursive:!0}),{fd:T_($,"a"),logPath:$}}catch{return}}function IJ($){let f=$.buildId?.trim();return!!f&&f===U1()}async function Af($){try{return await A$($)}catch{return}}async function g_($,f){let J=Date.now()+f;while(Date.now()<J){if(!(await Af($))?.url)return!0;await new Promise((Z)=>setTimeout(Z,b_))}return!1}async function xJ($,f){if(IJ($))return;if(await mJ($.url,$.authToken).catch(()=>!1),$.pid)try{process.kill($.pid,"SIGTERM")}catch{}await g_($.url,E_),await c0(f).catch(()=>{return})}function v_(){let $=import.meta.url.endsWith(".ts")?"ts":"js";return q_(new URL(`./entry.${$}`,import.meta.url))}function u_($,f){let J=v_(),W=process.execPath?.trim();if(!W)throw Error("unable to resolve runtime executable for hub daemon");let Z=N_(W).toLowerCase().includes("bun"),Q=J.startsWith("/$bunfs/"),j=Z&&J.toLowerCase().endsWith(".ts"),X=Q?[I_]:[...j?["--conditions=development"]:[],J];return{launcher:W,args:[...X,"--cwd",$,...x_(f)],cwd:$,env:{...S_(process.env),CLINE_NO_INTERACTIVE:"1",[w_]:"1"}}}function c_($){if(!$||typeof $!=="object")return!1;if(("code"in $?$.code:void 0)==="ETXTBSY")return!0;let J="message"in $?$.message:void 0;return typeof J==="string"&&J.includes("ETXTBSY")}function u9($,f={}){if(FA())return;let J=u_($,f),W=m_();try{z_(J.launcher,J.args,{detached:!0,stdio:W?["ignore",W.fd,W.fd]:"ignore",env:J.env,cwd:J.cwd}).unref()}finally{if(W)O_(W.fd)}}async function D2($,f={}){for(let J=0;;J++)try{u9($,f);return}catch(W){let Z=k_[J];if(!c_(W)||Z===void 0)throw W;await new Promise((Q)=>setTimeout(Q,Z))}}function P5($,f={}){if(FA())return;let J=Y0(),W=f.port!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),Z=d0(f),Q=$$(Z.host,Z.port,Z.pathname);K0(J.discoveryPath).then(async(j)=>{if(j?.url){let A=await Af(j.url);if(A?.url&&IJ(A)&&await V$(A.url,{authToken:j.authToken}))return;if(A?.url)await xJ({...A,authToken:j.authToken},J.discoveryPath);else await c0(J.discoveryPath).catch(()=>{return})}let X=await Af(Q);if(X?.url)await xJ(X,J.discoveryPath);let Y=!W&&Z.port!==0?{...Z,port:0}:Z;await D2($,Y)}).catch(()=>{})}async function RA($,f={}){let J=Y0(),W=f.host!==void 0||f.port!==void 0||f.pathname!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),Z=f.port!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),Q=d0(f),j=$$(Q.host,Q.port,Q.pathname),X=(K)=>{if(!W)F1(K.url,K.authToken);return K},H=await K0(J.discoveryPath);if(H?.url){let K=await Af(H.url);if(K?.url&&IJ(K)&&await V$(K.url,{authToken:H.authToken}))return X({url:K.url,authToken:H.authToken});if(K?.url)await xJ({...K,authToken:H.authToken},J.discoveryPath);else await c0(J.discoveryPath).catch(()=>{return})}let Y=await Af(j);if(Y?.url)await xJ(Y,J.discoveryPath);let V=!Z&&Q.port!==0?{...Q,port:0}:Q;await D2($,V);let B=Date.now()+h_;while(Date.now()<B){let K=await K0(J.discoveryPath);if(K?.url){let R=await Af(K.url);if(R?.url&&IJ(R)&&await V$(R.url,{authToken:K.authToken}))return X({url:R.url,authToken:K.authToken})}let G=await Af(j);if(G?.url&&!IJ(G))await xJ(G,J.discoveryPath);await new Promise((R)=>setTimeout(R,C_))}throw Error("Timed out waiting for detached hub startup.")}function p_(){let $=globalThis.WebSocket;if(!$)throw Error("Global WebSocket is not available in this runtime. Node 22+ is required for hub mode.");return $}function _A($){if(typeof $==="string")return $;if($ instanceof Uint8Array)return Buffer.from($).toString();if($ instanceof ArrayBuffer)return Buffer.from($).toString();if(Array.isArray($))return Buffer.concat($.map((f)=>Buffer.from(f))).toString();if($&&typeof $==="object"&&"data"in $&&typeof $.data<"u")return _A($.data);return String($)}function r_($){if(typeof $==="string")return $;if($ instanceof Uint8Array)return Buffer.from($).toString("utf8");if($ instanceof ArrayBuffer)return Buffer.from($).toString("utf8");return""}function DA($){let f=$,J=r_(f.reason);return new T0("hub_connection_closed",f.code||J?`Hub connection closed (code=${f.code??0}${J?`, reason=${J}`:""})`:c9,{closeCode:f.code,closeReason:J||void 0})}function i_($,f){if($ instanceof T0)return $;if($ instanceof Error)return new T0("hub_connect_failed",$.message);if($&&typeof $==="object"&&"error"in $&&$.error instanceof Error)return new T0("hub_connect_failed",$.error.message);let J=$&&typeof $==="object"&&"message"in $&&typeof $.message==="string"?$.message.trim():"";if(J)return new T0("hub_connect_failed",J);let W=$&&typeof $==="object"&&"type"in $&&typeof $.type==="string"?$.type.trim():"";return new T0("hub_connect_failed",W?`Failed to connect to hub at ${f.toString()} (${W} event before socket open).`:`Failed to connect to hub at ${f.toString()}.`)}var n_=8000,a_=200,LA="*",zA=8000,t_="cline-hub-auth.",TA=new Map,NA=new Set,s_=3000,o_=3000,e_=100,c9="Hub connection closed",$T=250,fT=5000,OA=0.5;class T0 extends Error{code;details;constructor($,f,J){super(f);this.code=$;this.details=J;this.name="HubTransportError"}}function p9($){return $ instanceof T0}class L2 extends Error{command;code;constructor($,f,J){super(J);this.command=$;this.code=f;this.name="HubCommandError"}}function U5($,f){return $ instanceof L2&&$.code==="hub_command_timeout"&&(f===void 0||$.command===f)}function MA($){let f=$.searchParams.get("authToken")?.trim();if($.searchParams.delete("authToken"),f)return f;let J=r9($.toString());return J?TA.get(J):void 0}function JT($){try{let J=new URL($).hostname.toLowerCase().replace(/^\[|\]$/g,"");return J==="localhost"||J==="127.0.0.1"||J==="::1"}catch{return!1}}function r9($){if(!JT($))return;let f=new URL(R1($));return f.search="",f.hash="",f.toString()}function d9($){let f=r9($);return!!f&&NA.has(f)}function F1($,f){let J=r9($);if(J){if(NA.add(J),f?.trim())TA.set(J,f)}return $}class f${options;socket;connectPromise;clientId;currentUrl;recoveryPromise;pendingReplies=new Map;listeners=new Set;subscriptionCounts=new Map;reconnectTimer;reconnectAttempt=0;closedByClient=!1;lastCloseError=new T0("hub_connection_closed",c9);sawSocketClose=!1;registered=!1;constructor($){this.options=$;this.clientId=$.clientId??`core-${Math.random().toString(36).slice(2,10)}-${Date.now().toString(36)}`,this.currentUrl=$.url}getClientId(){return this.clientId}getUrl(){return this.currentUrl}async connect(){if(this.socket&&(this.socket.readyState===1||this.socket.readyState===0))return this.connectPromise??Promise.resolve();this.closedByClient=!1,this.clearReconnectTimer();let $=new URL(this.currentUrl),f=this.options.authToken?.trim()||MA($);$.hash="";let W=new(p_())($.toString(),f?[`${t_}${f}`]:void 0);this.socket=W;let Z=!1;this.connectPromise=new Promise((Q,j)=>{let X=!1,H=setTimeout(()=>{if(X)return;X=!0,Z=!0,this.lastCloseError=new T0("hub_connect_timeout",`Timed out connecting to hub after ${zA}ms`),this.sawSocketClose=!1,this.connectPromise=void 0,this.socket=void 0;try{W.close()}catch{}j(this.lastCloseError)},zA);W.addEventListener("open",()=>{if(X)return;X=!0,clearTimeout(H),Q()}),W.addEventListener("error",(Y)=>{if(X)return;X=!0,clearTimeout(H),this.lastCloseError=i_(Y,$),this.sawSocketClose=!1,this.connectPromise=void 0,this.socket=void 0,j(this.lastCloseError)}),W.addEventListener("close",(Y)=>{if(X)return;if(X=!0,clearTimeout(H),!Z)this.lastCloseError=DA(Y),this.sawSocketClose=!0;this.connectPromise=void 0,this.socket=void 0,j(this.lastCloseError)})}),W.addEventListener("message",(Q)=>{this.handleFrame(JSON.parse(_A(Q)))}),W.addEventListener("close",(Q)=>{if(this.socket!==W)return;if(!Z)this.lastCloseError=DA(Q),this.sawSocketClose=!0;this.registered=!1;for(let j of this.pendingReplies.values())j.reject(this.lastCloseError);if(this.pendingReplies.clear(),this.connectPromise=void 0,this.socket=void 0,!this.closedByClient&&this.hasActiveSubscriptions())this.scheduleReconnect()}),await this.connectPromise,await this.command("client.register",{clientId:this.clientId,clientType:this.options.clientType??"core",displayName:this.options.displayName??"core",transport:"native",actorKind:"client",workspaceContext:{workspaceRoot:this.options.workspaceRoot,cwd:this.options.cwd}}),this.registered=!0;for(let Q of this.subscriptionCounts.keys())this.sendSubscriptionFrame("stream.subscribe",this.subscriptionSessionIdFromKey(Q));this.reconnectAttempt=0}subscribe($,f){let J=f?.sessionId?.trim()||void 0,W={listener:$,sessionId:J};return this.listeners.add(W),this.adjustSubscriptionCount(J,1),()=>{if(!this.listeners.delete(W))return;this.adjustSubscriptionCount(J,-1)}}async command($,f,J,W){let Z=0,Q=$!=="client.register"&&$!=="client.unregister";while(!0)try{return await this.commandOnce($,f,J,W)}catch(j){if(!Q||Z>=1||!await this.recoverLocalHubTransport(j))throw j;Z+=1}}async commandOnce($,f,J,W){await this.connect();let Z=d_("hubreq_"),Q=l_($,W?.timeoutMs),j=new Promise((H,Y)=>{let A=Q===null?void 0:setTimeout(()=>{if(!this.pendingReplies.delete(Z))return;Y(new L2($,"hub_command_timeout",`Hub command ${$} timed out after ${Q}ms (hub=${this.currentUrl}, requestId=${Z}, clientId=${this.clientId}). Check hub-daemon.log for matching command.start/command.slow entries, or run 'cline doctor fix' to restart the hub.`))},Q);this.pendingReplies.set(Z,{resolve:(V)=>{if(A)clearTimeout(A);H(V)},reject:(V)=>{if(A)clearTimeout(A);Y(V)}})});try{this.sendFrame({kind:"command",envelope:{version:"v1",command:$,requestId:Z,clientId:this.clientId,sessionId:J,timeoutMs:Q,payload:f}})}catch(H){throw this.pendingReplies.delete(Z),H}let X=await j;if(!X.ok){if(X.error?.code===jf){let H=J??(typeof f?.sessionId==="string"?f.sessionId:void 0);throw new k$(H,X.error.message)}throw new L2($,X.error?.code,X.error?.message??`Hub command ${$} failed`)}return X}async recoverLocalHubTransport($){if(!d9(this.currentUrl)||!p9($))return!1;if(this.recoveryPromise)return await this.recoveryPromise;return this.recoveryPromise=(async()=>{let f=await Vf({workspaceRoot:this.options.workspaceRoot,cwd:this.options.cwd}).catch(()=>{return});if(!f)return!1;return this.currentUrl=f,this.close(),!0})().finally(()=>{this.recoveryPromise=void 0}),await this.recoveryPromise}hasActiveSubscriptions(){return this.subscriptionCounts.size>0}clearReconnectTimer(){if(!this.reconnectTimer)return;clearTimeout(this.reconnectTimer),this.reconnectTimer=void 0}scheduleReconnect(){if(this.reconnectTimer||this.closedByClient||!this.hasActiveSubscriptions())return;let $=Math.min($T*2**this.reconnectAttempt,fT),f=Math.round($*(1-OA)+Math.random()*$*OA);this.reconnectTimer=setTimeout(()=>{this.reconnectTimer=void 0,this.reconnectSubscribedTransport()},f)}async reconnectSubscribedTransport(){if(this.closedByClient||!this.hasActiveSubscriptions())return;try{await this.connect(),this.reconnectAttempt=0}catch{if(!d9(this.currentUrl)){this.reconnectAttempt+=1,this.scheduleReconnect();return}try{let $=await Vf({workspaceRoot:this.options.workspaceRoot,cwd:this.options.cwd});if($){this.currentUrl=$,await this.connect(),this.reconnectAttempt=0;return}}catch{}this.reconnectAttempt+=1,this.scheduleReconnect()}}close(){let $=this.socket;if(this.closedByClient=!0,this.clearReconnectTimer(),this.registered=!1,!$)return;this.lastCloseError=new T0("hub_connection_closed",c9),this.sawSocketClose=!1;for(let f of this.pendingReplies.values())f.reject(this.lastCloseError);this.pendingReplies.clear(),this.connectPromise=void 0,this.socket=void 0;try{$.close()}catch{}}async dispose(){if(this.socket?.readyState===1&&this.registered)try{await this.command("client.unregister",void 0,void 0,{timeoutMs:2000})}catch{}this.close()}sendFrame($){if(!this.socket||this.socket.readyState!==1){if(this.lastCloseError.code==="hub_connection_closed"&&!this.sawSocketClose)throw new T0("hub_connection_not_open","Hub connection is not open.");throw this.lastCloseError}this.socket.send(JSON.stringify($))}sendSubscriptionFrame($,f){this.sendFrame({kind:$,clientId:this.clientId,...f?{sessionId:f}:{}})}adjustSubscriptionCount($,f){let J=this.subscriptionKeyForSessionId($),W=(this.subscriptionCounts.get(J)??0)+f;if(W<=0){if(this.subscriptionCounts.delete(J),!this.hasActiveSubscriptions())this.clearReconnectTimer();if(f<0&&this.socket?.readyState===1)this.sendSubscriptionFrame("stream.unsubscribe",$);return}if(this.subscriptionCounts.set(J,W),f>0&&W===1&&this.socket?.readyState===1)this.sendSubscriptionFrame("stream.subscribe",$)}subscriptionKeyForSessionId($){return $??LA}subscriptionSessionIdFromKey($){return $===LA?void 0:$}handleFrame($){switch($.kind){case"reply":{let f=$.envelope.requestId;if(!f)return;let J=this.pendingReplies.get(f);if(!J)return;this.pendingReplies.delete(f),J.resolve($.envelope);return}case"event":for(let f of this.listeners){if(f.sessionId&&f.sessionId!==$.envelope.sessionId?.trim())continue;f.listener($.envelope)}return;case"command":case"stream.subscribe":case"stream.unsubscribe":return}}}function R1($){let f=new URL($);if(f.protocol==="http:")f.protocol="ws:";else if(f.protocol==="https:")f.protocol="wss:";return f.toString()}async function V$($,f){let J=new f$({url:$,authToken:f?.authToken,clientType:"hub-healthcheck",displayName:"hub healthcheck",workspaceRoot:f?.workspaceRoot,cwd:f?.cwd});try{return await J.connect(),!0}catch{return!1}finally{J.close()}}async function l9($,f){let J=R1($),W=await A$(J);if(!W)return{status:"unreachable",url:J};let Z=U1(),Q=W.buildId?.trim();if(!Q||Q!==Z)return{status:"build_mismatch",url:J};if(f?.verifyConnection===!0&&!await V$(J,{workspaceRoot:f.workspaceRoot,cwd:f.cwd,authToken:f.authToken}))return{status:"unreachable",url:J};return{status:"compatible",url:J}}async function WT($){let f=Date.now()+n_;while(Date.now()<f){let J=await K0($.discoveryPath);if(J?.url){let W=await l9(J.url,{verifyConnection:!0,authToken:J.authToken});if(W.status==="compatible")return F1(W.url,J.authToken)}await new Promise((W)=>setTimeout(W,a_))}return}async function ZT($){let f=Date.now()+o_;while(Date.now()<f){if(!(await A$($).catch(()=>{return}))?.url)return!0;await new Promise((W)=>setTimeout(W,e_))}return!1}function QT($,f){try{return R1($)===R1(f)}catch{return!1}}function jT($){return($&&typeof $==="object"&&Array.isArray($.sessions)?$.sessions:[]).some((J)=>{if(!J||typeof J!=="object")return!1;let W=J;if(W.status==="running"||W.status==="idle"||W.status==="pending")return!0;return Array.isArray(W.participants)&&W.participants.length>0})}async function XT($,f,J){let W=new f$({url:$,authToken:f,clientType:"hub-recovery-check",displayName:"hub recovery check",workspaceRoot:J?.workspaceRoot,cwd:J?.cwd});try{let Z=await W.command("session.list",{limit:500},void 0,{timeoutMs:s_});return!jT(Z.payload)}catch{return!1}finally{await W.dispose().catch(()=>{return})}}async function gJ($={}){if($.endpoint?.trim()){let Z=await l9($.endpoint);return Z.status==="compatible"?Z.url:void 0}let f=Y0(),J=await K0(f.discoveryPath);if(!J?.url)return;let W=await l9(J.url);if(W.status==="compatible")return F1(W.url,J.authToken);if(W.status==="build_mismatch")await c0(f.discoveryPath).catch(()=>{return});return}async function Vf($={}){let f=await gJ($);if(f&&await V$(f,{workspaceRoot:$.workspaceRoot,cwd:$.cwd}))return f;if($.endpoint?.trim())return;let J=Y0();return await D2($.workspaceRoot??process.cwd()),await WT(J)}async function mJ($,f){let J=new URL($),W=f?.trim()||MA(J);if(J.protocol==="ws:")J.protocol="http:";else if(J.protocol==="wss:")J.protocol="https:";return J.pathname="/shutdown",J.hash="",(await fetch(J,{method:"POST",headers:W?{authorization:`Bearer ${W}`}:void 0})).ok}async function i9(){let $=Y0(),f=await K0($.discoveryPath);if(!f?.url)return!1;try{if(await mJ(f.url,f.authToken))return!0}catch{}return!1}async function F5($){if(!d9($.url))return;let f=Y0(),J=await K0(f.discoveryPath);if(!J?.url||!QT(J.url,$.url))return;if(!await XT(J.url,J.authToken,{workspaceRoot:$.workspaceRoot,cwd:$.cwd}))return;if(!await i9())return;if(!await ZT(J.url))return;return await c0(f.discoveryPath).catch(()=>{return}),await Vf({workspaceRoot:$.workspaceRoot,cwd:$.cwd})}var gA={};w(gA,{HubRuntimeHost:()=>m$});import{captureSdkError as qA,createSessionId as wA,HUB_CHECKPOINT_CAPABILITY as VT,HUB_COMPACTION_CAPABILITY as BT,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as KT,HUB_HOOK_CAPABILITY_PREFIX as GT,HUB_MISTAKE_LIMIT_CAPABILITY as PT,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as UT,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as FT,isHubToolExecutorName as RT}from"@cline/shared";var yA={};w(yA,{createCoreSessionSnapshot:()=>B$,coreSessionSnapshotToRecord:()=>R5});function HT($){return $?JSON.parse(JSON.stringify($)):void 0}function YT($){return $?JSON.parse(JSON.stringify($)):void 0}function AT($){let f=$?.checkpoint&&typeof $.checkpoint==="object"&&!Array.isArray($.checkpoint)?$.checkpoint:void 0,W=(Array.isArray(f?.history)?f.history:[]).filter((j)=>!!j&&typeof j==="object"&&!Array.isArray(j)).flatMap((j)=>{let X=typeof j.ref==="string"?j.ref.trim():"",H=Number(j.createdAt),Y=Number(j.runCount);if(!X||!Number.isFinite(H)||!Number.isInteger(Y))return[];return[{ref:X,createdAt:H,runCount:Y,...j.kind==="stash"||j.kind==="commit"?{kind:j.kind}:{}}]}),Z=W.at(-1),Q=$?.checkpointEnabled===!0?!0:void 0;if(!Q&&W.length===0)return;return{...Q?{enabled:Q}:{},...Z?{latest:Z}:{},history:W}}function B$($){let{session:f}=$,J=HT(f.metadata);return{version:1,sessionId:f.sessionId,source:f.source,status:f.status,createdAt:f.startedAt,updatedAt:f.updatedAt,endedAt:f.endedAt??null,exitCode:f.exitCode??null,interactive:f.interactive,workspace:{cwd:f.cwd,root:f.workspaceRoot},model:{providerId:f.provider,modelId:f.model},capabilities:{enableTools:f.enableTools,enableSpawn:f.enableSpawn,enableTeams:f.enableTeams},lineage:{...f.parentSessionId?{parentSessionId:f.parentSessionId}:{},...f.parentAgentId?{parentAgentId:f.parentAgentId}:{},...f.agentId?{agentId:f.agentId}:{},...f.conversationId?{conversationId:f.conversationId}:{},isSubagent:f.isSubagent},...f.teamName?{team:{name:f.teamName}}:{},...f.prompt?{prompt:f.prompt}:{},...J?{metadata:J}:{},...f.messagesPath?{artifacts:{messagesPath:f.messagesPath}}:{},...$.messages?{messages:YT($.messages)}:{},...$.usage?{usage:{...$.usage}}:{},...$.aggregateUsage?{aggregateUsage:{...$.aggregateUsage}}:{},...(()=>{let W=AT(J);return W?{checkpoint:W}:{}})()}}function R5($){return{sessionId:$.sessionId,parentSessionId:$.lineage.parentSessionId,agentId:$.lineage.agentId,parentAgentId:$.lineage.parentAgentId,conversationId:$.lineage.conversationId,isSubagent:$.lineage.isSubagent,source:$.source,startedAt:$.createdAt,endedAt:$.endedAt??void 0,exitCode:$.exitCode??void 0,status:$.status,interactive:$.interactive,provider:$.model.providerId,model:$.model.modelId,cwd:$.workspace.cwd,workspaceRoot:$.workspace.root,teamName:$.team?.name,enableTools:$.capabilities.enableTools,enableSpawn:$.capabilities.enableSpawn,enableTeams:$.capabilities.enableTeams,prompt:$.prompt,metadata:$.metadata,updatedAt:$.updatedAt,messagesPath:$.artifacts?.messagesPath}}function z2($){if(!$)return;return JSON.parse(JSON.stringify($))}var DT=["beforeRun","afterRun","beforeModel","afterModel","beforeTool","afterTool","onEvent"];function SA($){if(!$||typeof $!=="object"||Array.isArray($))return;return JSON.parse(JSON.stringify($))}function hA($){if(!$)return;let{userInstructionService:f,...J}=$;return JSON.parse(JSON.stringify(J))}function CA($){let f=$&&typeof $==="object"&&!Array.isArray($)?$:{};return{agentId:typeof f.agentId==="string"?f.agentId:"",conversationId:typeof f.conversationId==="string"?f.conversationId:"",iteration:typeof f.iteration==="number"?f.iteration:0,metadata:f.metadata&&typeof f.metadata==="object"&&!Array.isArray(f.metadata)?f.metadata:void 0}}function Bf($,f,J){$.manifest.push(f),$.handlers.set(f.capabilityName,J)}function EA($,f){let J={manifest:[],handlers:new Map};for(let Z of Object.keys(f.toolExecutors??{}).filter(RT)){let Q=f.toolExecutors?.[Z];if(typeof Q!=="function")continue;Bf(J,{kind:"toolExecutor",executor:Z,capabilityName:`${UT}${Z}`},async({payload:j,abortSignal:X})=>{let H=Array.isArray(j.args)?[...j.args]:[],Y={...CA(j.context),signal:X};return{result:await Q(...H,Y)}})}for(let Z of $?.extraTools??[])Bf(J,{kind:"tool",name:Z.name,description:Z.description,inputSchema:z2(Z.inputSchema)??{},...Z.lifecycle?{lifecycle:z2(Z.lifecycle)}:{},capabilityName:`${KT}${Z.name}`},async({payload:Q,abortSignal:j,progress:X})=>{let H={...CA(Q.context),signal:j};return{result:await Z.execute(Q.input,{...H,emitUpdate:(A)=>{X({update:A})}})}});let W=$?.hooks;if(W)for(let Z of DT){let Q=W[Z];if(typeof Q!=="function")continue;Bf(J,{kind:"hook",name:Z,capabilityName:`${GT}${Z}`},async({payload:j})=>({control:await Q(j.context)}))}if($?.compaction?.compact){let Z=$.compaction.compact;Bf(J,{kind:"compaction",capabilityName:BT,config:SA($.compaction)},async({payload:Q})=>({result:await Z(Q.context)}))}if($?.checkpoint?.createCheckpoint){let Z=$.checkpoint.createCheckpoint;Bf(J,{kind:"checkpoint",capabilityName:VT,config:SA($.checkpoint)},async({payload:Q})=>({result:await Z(Q.context)}))}if($?.onConsecutiveMistakeLimitReached){let Z=$.onConsecutiveMistakeLimitReached;Bf(J,{kind:"mistakeLimit",capabilityName:PT},async({payload:Q})=>({result:await Z(Q.context)}))}if($?.userInstructionService){let Z=$.userInstructionService;Bf(J,{kind:"userInstructionService",capabilityName:FT},async()=>{return await Z.start().catch(()=>{}),{snapshot:{records:{skill:Z.listRecords("skill"),rule:Z.listRecords("rule"),workflow:Z.listRecords("workflow")},runtimeCommands:Z.listRuntimeCommands()}}})}return J}function xA($){if(typeof $==="string"&&$.trim())return $.trim();if($ instanceof Error)return $.message.trim()||void 0;if($&&typeof $==="object"&&"message"in $){let f=$.message;if(typeof f==="string"&&f.trim())return f.trim()}return}function LT($){return xA($)??"Capability request was cancelled."}function zT($){if(typeof $!=="string")return $;try{return JSON.parse($)}catch{return $}}function OT($){return $==="completed"||$==="max_iterations"||$==="aborted"||$==="mistake_limit"||$==="error"}function _T($){if(!$||typeof $!=="object"||Array.isArray($))return;let f=$,J=typeof f.inputTokens==="number"?f.inputTokens:void 0,W=typeof f.outputTokens==="number"?f.outputTokens:void 0;if(J===void 0||W===void 0)return;return{inputTokens:J,outputTokens:W,cacheReadTokens:typeof f.cacheReadTokens==="number"?f.cacheReadTokens:0,cacheWriteTokens:typeof f.cacheWriteTokens==="number"?f.cacheWriteTokens:0,totalCost:typeof f.totalCost==="number"?f.totalCost:0}}function bA($){if(!$)return;return{inputTokens:typeof $.inputTokens==="number"?$.inputTokens:0,outputTokens:typeof $.outputTokens==="number"?$.outputTokens:0,cacheReadTokens:typeof $.cacheReadTokens==="number"?$.cacheReadTokens:0,cacheWriteTokens:typeof $.cacheWriteTokens==="number"?$.cacheWriteTokens:0,totalCost:typeof $.totalCost==="number"?$.totalCost:0}}function n9($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function D1($,f){return n9($?.[f])??0}function TT($){let f=$?.delta&&typeof $.delta==="object"?$.delta:void 0,J=$?.totals&&typeof $.totals==="object"?$.totals:void 0,W=$?.agent&&typeof $.agent==="object"?$.agent:void 0,Z=W?.teamRole==="teammate"||W?.teamRole==="lead"?W.teamRole:void 0;return{event:{type:"usage",agentId:typeof W?.agentId==="string"?W.agentId:void 0,conversationId:typeof W?.conversationId==="string"?W.conversationId:void 0,parentAgentId:typeof W?.parentAgentId==="string"?W.parentAgentId:void 0,inputTokens:D1(f,"inputTokens"),outputTokens:D1(f,"outputTokens"),cacheReadTokens:D1(f,"cacheReadTokens"),cacheWriteTokens:D1(f,"cacheWriteTokens"),cost:n9(f?.totalCost),totalInputTokens:D1(J,"inputTokens"),totalOutputTokens:D1(J,"outputTokens"),totalCacheReadTokens:D1(J,"cacheReadTokens"),totalCacheWriteTokens:D1(J,"cacheWriteTokens"),totalCost:n9(J?.totalCost)},teamAgentId:typeof W?.teamAgentId==="string"?W.teamAgentId:void 0,teamRole:Z}}function NT($){let f=$?.result&&typeof $.result==="object"&&!Array.isArray($.result)?$.result:void 0,J=$?.reason??f?.finishReason,W=OT(J)?J:J==="failed"?"error":"completed",Z=_T($?.usage??f?.usage);return{type:"done",reason:W,text:typeof $?.text==="string"?$.text:typeof f?.text==="string"?f.text:"",iterations:typeof $?.iterations==="number"?$.iterations:typeof f?.iterations==="number"?f.iterations:0,usage:Z}}function D5($,f){return $.error?.message??`hub command failed: ${f}`}function vJ($){switch($){case"idle":case"completed":return"completed";case"failed":return"failed";case"aborted":return"cancelled";default:return"running"}}function mA($){let f=$.metadata&&typeof $.metadata==="object"?JSON.parse(JSON.stringify($.metadata)):void 0;return{sessionId:$.sessionId,parentSessionId:typeof f?.parentSessionId==="string"?f.parentSessionId:void 0,agentId:$.runtimeSession?.agentId||(typeof f?.agentId==="string"?f.agentId:void 0),parentAgentId:typeof f?.parentAgentId==="string"?f.parentAgentId:void 0,conversationId:typeof f?.conversationId==="string"?f.conversationId:void 0,isSubagent:typeof f?.isSubagent==="boolean"?f.isSubagent:!1,source:typeof f?.source==="string"?f.source:G0.CORE,pid:typeof f?.pid==="number"?f.pid:void 0,startedAt:new Date($.createdAt).toISOString(),endedAt:vJ($.status)==="running"?void 0:new Date($.updatedAt).toISOString(),exitCode:vJ($.status)==="completed"?0:vJ($.status)==="failed"?1:void 0,status:vJ($.status),interactive:f?.interactive===!0,provider:typeof f?.provider==="string"?f.provider:"hub",model:typeof f?.model==="string"?f.model:"hub",cwd:$.cwd?.trim()||$.workspaceRoot,workspaceRoot:$.workspaceRoot,teamName:typeof f?.teamName==="string"?f.teamName:void 0,enableTools:$.runtimeOptions?.enableTools??f?.enableTools===!0,enableSpawn:$.runtimeOptions?.enableSpawn??f?.enableSpawn===!0,enableTeams:$.runtimeOptions?.enableTeams??f?.enableTeams===!0,prompt:typeof f?.prompt==="string"?f.prompt:void 0,metadata:f,updatedAt:new Date($.updatedAt).toISOString(),messagesPath:typeof f?.messagesPath==="string"?f.messagesPath:void 0,hookPath:typeof f?.hookPath==="string"?f.hookPath:void 0}}function L1($){if(!$||typeof $!=="object"||Array.isArray($))return;let f=$;return f.version===1&&typeof f.sessionId==="string"?JSON.parse(JSON.stringify(f)):void 0}function MT($){let f=L1($?.snapshot);if(f)return R5(f);let J=$?.session;return J?mA(J):void 0}function kA($,f,J){let W=J?.workspaceRoot?.trim()||f.config.workspaceRoot||f.config.cwd;return y0.parse({version:1,session_id:$,source:f.source??G0.CORE,pid:process.pid,started_at:new Date(J?.createdAt??Date.now()).toISOString(),status:vJ(J?.status),interactive:f.interactive===!0,provider:f.config.providerId,model:f.config.modelId,cwd:J?.cwd?.trim()||f.config.cwd,workspace_root:W,team_name:f.config.teamName,enable_tools:f.config.enableTools,enable_spawn:f.config.enableSpawnAgent,enable_teams:f.config.enableAgentTeams,prompt:f.prompt?.trim()||void 0,metadata:f.sessionMetadata&&Object.keys(f.sessionMetadata).length>0?f.sessionMetadata:void 0})}function IA($,f){return y0.parse({version:1,session_id:$.sessionId,source:$.source,pid:process.pid,started_at:$.createdAt,status:$.status,interactive:$.interactive,provider:$.model.providerId,model:$.model.modelId,cwd:$.workspace.cwd,workspace_root:$.workspace.root,team_name:$.team?.name,enable_tools:$.capabilities.enableTools,enable_spawn:$.capabilities.enableSpawn,enable_teams:$.capabilities.enableTeams,prompt:($.prompt??f.prompt?.trim())||void 0,metadata:$.metadata,messages_path:$.artifacts?.messagesPath})}class m${runtimeAddress;pendingPrompts;client;clientOptions;clientContext;events=new CJ;sessionCapabilities=new Map;sessionClientContributionHandlers=new Map;sessionSubscriptions=new Map;pendingApprovalToolCallIds=new Set;agentDoneEmittedForCurrentRunBySession=new Set;activeCapabilityAbortControllers=new Map;defaultCapabilities;telemetry;constructor($,f){this.clientContext=f,this.clientOptions={authToken:$.authToken,clientType:$.clientType??"core-hub-runtime",displayName:$.displayName??"core hub runtime",workspaceRoot:f?.workspaceRoot,cwd:f?.cwd},this.defaultCapabilities=F0($.capabilities)??{},this.telemetry=$.telemetry,this.runtimeAddress=$.url,this.pendingPrompts={list:(J)=>this.requestPendingPromptsList(J),update:(J)=>this.requestPendingPromptUpdate(J),delete:(J)=>this.requestPendingPromptDelete(J)},this.client=this.createClient($.url)}createClient($){return new f$({...this.clientOptions,url:$})}async replaceClient($){let f=this.client;this.client=this.createClient($),this.runtimeAddress=$,await Promise.resolve(f.dispose()).catch(()=>{return})}async recoverLocalHubStartupDeadlock($){if(!U5($,"session.create"))return!1;let f=await F5({url:this.client.getUrl(),workspaceRoot:this.clientContext?.workspaceRoot,cwd:this.clientContext?.cwd}).catch(()=>{return});if(!f)return!1;return await this.replaceClient(f),!0}registerPlannedSession($,f,J){if(this.sessionCapabilities.set($,f),J.size>0)this.sessionClientContributionHandlers.set($,J);this.ensureSessionSubscription($)}cleanupPlannedSession($){this.sessionCapabilities.delete($),this.sessionClientContributionHandlers.delete($),this.disposeSessionSubscription($)}async connect(){await this.client.connect()}async startSession($){let f=this.resolveCapabilities($),J=EA($.localRuntime,f),W=$.config.sessionId?.trim()||wA(),Z=()=>this.client.command("session.create",{workspaceRoot:$.config.workspaceRoot?.trim()||$.config.cwd,cwd:$.config.cwd,sessionConfig:z2({...$.config,sessionId:W}),metadata:{...$.sessionMetadata??{},source:$.source??G0.CORE,provider:$.config.providerId,model:$.config.modelId,enableTools:$.config.enableTools,enableSpawn:$.config.enableSpawnAgent,enableTeams:$.config.enableAgentTeams,teamName:$.config.teamName,prompt:$.prompt,interactive:$.interactive===!0},runtimeOptions:{...J.manifest.length>0?{clientContributions:J.manifest}:{},...$.localRuntime?.configExtensions?{configExtensions:$.localRuntime.configExtensions}:{}},toolPolicies:z2($.toolPolicies),initialMessages:$.initialMessages});this.registerPlannedSession(W,f,J.handlers);let Q;try{Q=await Z()}catch(Y){if(this.cleanupPlannedSession(W),await this.recoverLocalHubStartupDeadlock(Y)){this.registerPlannedSession(W,f,J.handlers);try{Q=await Z()}catch(A){throw this.cleanupPlannedSession(W),A}}else throw Y}let j=L1(Q.payload?.snapshot),X=Q.payload?.session,H=(j?.sessionId??X?.sessionId)?.trim();if(!H)throw this.cleanupPlannedSession(W),Error("Hub runtime did not return a session id.");if(H!==W)this.cleanupPlannedSession(W),this.registerPlannedSession(H,f,J.handlers);return{sessionId:H,manifest:j?IA(j,$):kA(H,$,X),manifestPath:"",messagesPath:"",result:void 0}}async restoreSession($){let f=$.sessionId.trim();if(!f)throw Error("sessionId is required");let J=$.restore?.messages!==!1;if(J&&!$.start)throw Error("start is required when restore.messages is true");let W=$.start,Z=W?this.resolveCapabilities(W):void 0,Q=W?EA(W.localRuntime,Z??{}):{manifest:[],handlers:new Map},j=W?W.config.sessionId?.trim()||wA():void 0;if(j&&Z)this.sessionCapabilities.set(j,Z);if(j&&Q.handlers.size>0)this.sessionClientContributionHandlers.set(j,Q.handlers),this.ensureSessionSubscription(j);let X;try{X=await this.client.command("session.restore",{sessionId:f,checkpointRunCount:$.checkpointRunCount,restore:$.restore,...W?{workspaceRoot:W.config.workspaceRoot?.trim()||W.config.cwd,cwd:W.config.cwd??$.cwd,sessionConfig:z2({...W.config,sessionId:j}),metadata:{...W.sessionMetadata??{},source:W.source??G0.CORE,provider:W.config.providerId,model:W.config.modelId,enableTools:W.config.enableTools,enableSpawn:W.config.enableSpawnAgent,enableTeams:W.config.enableAgentTeams,teamName:W.config.teamName,prompt:W.prompt,interactive:W.interactive===!0},runtimeOptions:{...Q.manifest.length>0?{clientContributions:Q.manifest}:{},...W.localRuntime?.configExtensions?{configExtensions:W.localRuntime.configExtensions}:{}},toolPolicies:z2(W.toolPolicies)}:{}},f)}catch(K){if(j)this.sessionCapabilities.delete(j),this.sessionClientContributionHandlers.delete(j),this.disposeSessionSubscription(j);throw K}if(!X.ok){let K=typeof X.payload?.error==="string"?X.payload.error:"session.restore failed";if(j)this.sessionCapabilities.delete(j),this.sessionClientContributionHandlers.delete(j),this.disposeSessionSubscription(j);throw Error(K)}let H=L1(X.payload?.snapshot),Y=X.payload?.session,A=(H?.sessionId??Y?.sessionId)?.trim();if(J&&!A){if(j)this.sessionCapabilities.delete(j),this.sessionClientContributionHandlers.delete(j),this.disposeSessionSubscription(j);throw Error("Hub checkpoint restore returned no session id")}if(A&&j&&A!==j)this.sessionCapabilities.delete(j),this.sessionClientContributionHandlers.delete(j),this.disposeSessionSubscription(j);if(A&&Z)this.sessionCapabilities.set(A,Z);if(A&&Q.handlers.size>0)this.sessionClientContributionHandlers.set(A,Q.handlers);if(A)this.ensureSessionSubscription(A);let V=Array.isArray(X.payload?.messages)?X.payload.messages:void 0,B=X.payload?.checkpoint;if(!B)throw Error("Hub checkpoint restore returned no checkpoint");return{sessionId:A,startResult:A?{sessionId:A,manifest:H?IA(H,W??{}):kA(A,W??{},Y),manifestPath:"",messagesPath:"",result:void 0}:void 0,messages:V,checkpoint:B}}async runTurn($){return this.ensureSessionSubscription($.sessionId),(await this.client.command("run.start",{sessionId:$.sessionId,input:$.prompt,mode:$.mode,attachments:($.userImages?.length??0)>0||($.userFiles?.length??0)>0?{...$.userImages?.length?{userImages:$.userImages}:{},...$.userFiles?.length?{userFiles:$.userFiles}:{}}:void 0,delivery:$.delivery,timeoutMs:$.timeoutMs},$.sessionId,{timeoutMs:null})).payload?.result}async requestPendingPromptsList($){this.ensureSessionSubscription($.sessionId);let f=await this.client.command("session.pending_prompts",{sessionId:$.sessionId},$.sessionId);return Array.isArray(f.payload?.prompts)?f.payload.prompts:[]}async requestPendingPromptUpdate($){this.ensureSessionSubscription($.sessionId);let f=await this.client.command("session.update_pending_prompt",{...$},$.sessionId);return{sessionId:$.sessionId,prompts:Array.isArray(f.payload?.prompts)?f.payload.prompts:[],prompt:f.payload?.prompt,updated:f.payload?.updated===!0}}async requestPendingPromptDelete($){this.ensureSessionSubscription($.sessionId);let f=await this.client.command("session.remove_pending_prompt",{...$},$.sessionId);return{sessionId:$.sessionId,prompts:Array.isArray(f.payload?.prompts)?f.payload.prompts:[],prompt:f.payload?.prompt,removed:f.payload?.removed===!0}}async getAccumulatedUsage($){let f=await this.client.command("session.get",{includeSnapshot:!0},$),J=L1(f.payload?.snapshot);if(J){let j=J.usage?{...J.usage}:void 0,X=J.aggregateUsage?{...J.aggregateUsage}:void 0;return j||X?{usage:j,aggregateUsage:X}:void 0}let W=f.payload?.session,Z=bA(W?.usage),Q=bA(W?.aggregateUsage);return Z||Q?{usage:Z,aggregateUsage:Q}:void 0}async abort($,f){await this.client.command("run.abort",{sessionId:$,reason:xA(f)},$)}async stopSession($){this.sessionCapabilities.delete($),this.disposeSessionSubscription($),await this.client.command("session.detach",{sessionId:$},$)}async dispose(){for(let[$,f]of this.sessionSubscriptions){f();try{await this.client.command("session.detach",{sessionId:$},$)}catch{}}this.sessionSubscriptions.clear(),this.sessionCapabilities.clear(),this.agentDoneEmittedForCurrentRunBySession.clear();for(let $ of this.activeCapabilityAbortControllers.values())$.abort("Hub runtime host disposed.");this.activeCapabilityAbortControllers.clear(),await this.client.dispose()}async getSession($){let f;try{f=await this.client.command("session.get",void 0,$)}catch(J){if(I$(J))return;throw J}return MT(f.payload)}async listSessions($=100){let f=await this.client.command("session.list",{limit:$}),J=Array.isArray(f.payload?.snapshots)?f.payload.snapshots.flatMap((Z)=>{let Q=L1(Z);return Q?[R5(Q)]:[]}):[];if(J.length>0)return J;return(f.payload?.sessions??[]).map(mA)}async listSettings($){let f=await this.client.command("settings.list",hA($));if(!f.ok)throw Error(D5(f,"settings.list"));return f.payload?.snapshot}async toggleSetting($){let f=await this.client.command("settings.toggle",hA($));if(!f.ok)throw Error(D5(f,"settings.toggle"));return{snapshot:f.payload?.snapshot,changedTypes:Array.isArray(f.payload?.changedTypes)?f.payload.changedTypes:[]}}async deleteSession($){return this.sessionCapabilities.delete($),this.disposeSessionSubscription($),(await this.client.command("session.delete",{sessionId:$})).payload?.deleted===!0}async updateSession($,f){let J={...f.metadata??{}};if(typeof f.prompt==="string")J.prompt=f.prompt;if(typeof f.title==="string")J.title=f.title;return{updated:(await this.client.command("session.update",{sessionId:$,metadata:J})).ok}}async readSessionMessages($){let f=$.trim();if(!f)return[];let J=await this.client.command("session.messages",{sessionId:f},f);if(!J.ok)throw qA(this.telemetry,{component:"core",operation:"hub.runtime_host.read_session_messages",error:Error(D5(J,"session.messages")),severity:J.error?.code==="session_not_found"?"warn":"error",handled:!0,context:{command:"session.messages",sessionId:f,errorCode:J.error?.code,runtimeAddress:this.runtimeAddress}}),Error(D5(J,"session.messages"));let W=J.payload?.messages;return Array.isArray(W)?W:[]}async dispatchHookEvent($){await this.client.command("session.hook",{payload:$})}subscribe($,f){return this.events.subscribe($,f)}ensureSessionSubscription($){let f=$.trim();if(!f||this.sessionSubscriptions.has(f))return;let J=this.client.subscribe((W)=>{this.handleHubEvent(W)},{sessionId:f});this.sessionSubscriptions.set(f,typeof J==="function"?J:()=>{})}disposeSessionSubscription($){let f=$.trim();if(!f)return;this.sessionSubscriptions.get(f)?.(),this.sessionSubscriptions.delete(f),this.agentDoneEmittedForCurrentRunBySession.delete(f)}resolveCapabilities($){return F0(this.defaultCapabilities,$.capabilities)??{}}emitToolCallContentStart($){this.events.emit({type:"agent_event",payload:{sessionId:$.sessionId,event:{type:"content_start",contentType:"tool",toolCallId:$.toolCallId,toolName:$.toolName,input:$.toolInput}}})}emitAgentDoneIfNeeded($){if(this.agentDoneEmittedForCurrentRunBySession.has($.sessionId))return;this.agentDoneEmittedForCurrentRunBySession.add($.sessionId),this.events.emit({type:"agent_event",payload:{sessionId:$.sessionId,event:NT($.payload)}})}handleHubEvent($){let f=$.sessionId?.trim();if($.event==="capability.requested"){this.handleCapabilityRequest($).catch((J)=>{this.captureDetachedHubEventError("hub.runtime_host.capability_request",J,$)});return}if($.event==="capability.resolved"){this.handleCapabilityResolved($);return}if($.event==="approval.requested"){this.handleApprovalRequested($).catch((J)=>{this.captureDetachedHubEventError("hub.runtime_host.approval_request",J,$)});return}if(!f)return;switch($.event){case"run.started":{this.agentDoneEmittedForCurrentRunBySession.delete(f);let J=L1($.payload?.snapshot),W=$.payload?.session;if(J)this.events.emit({type:"session_snapshot",payload:{sessionId:f,snapshot:J}});this.events.emit({type:"status",payload:{sessionId:f,status:W?.status??"running"}});return}case"iteration.started":{this.events.emit({type:"agent_event",payload:{sessionId:f,event:{type:"iteration_start",iteration:typeof $.payload?.iteration==="number"?$.payload.iteration:0}}});return}case"iteration.finished":{this.events.emit({type:"agent_event",payload:{sessionId:f,event:{type:"iteration_end",iteration:typeof $.payload?.iteration==="number"?$.payload.iteration:0,hadToolCalls:$.payload?.hadToolCalls===!0,toolCallCount:typeof $.payload?.toolCallCount==="number"?$.payload.toolCallCount:0}}});return}case"assistant.delta":{let J=typeof $.payload?.text==="string"?$.payload.text:"";if(!J)return;this.events.emit({type:"agent_event",payload:{sessionId:f,event:{type:"content_start",contentType:"text",text:J}}});return}case"assistant.finished":{this.events.emit({type:"agent_event",payload:{sessionId:f,event:{type:"content_end",contentType:"text",text:typeof $.payload?.text==="string"?$.payload.text:void 0}}});return}case"reasoning.delta":{let J=typeof $.payload?.text==="string"?$.payload.text:"",W=$.payload?.redacted===!0;if(!J&&!W)return;this.events.emit({type:"agent_event",payload:{sessionId:f,event:{type:"content_start",contentType:"reasoning",reasoning:J,redacted:W}}});return}case"reasoning.finished":{this.events.emit({type:"agent_event",payload:{sessionId:f,event:{type:"content_end",contentType:"reasoning",reasoning:typeof $.payload?.reasoning==="string"?$.payload.reasoning:void 0}}});return}case"agent.done":{this.emitAgentDoneIfNeeded({sessionId:f,payload:$.payload});return}case"usage.updated":{let J=TT($.payload);this.events.emit({type:"agent_event",payload:{sessionId:f,event:J.event,teamAgentId:J.teamAgentId,teamRole:J.teamRole}});return}case"tool.started":{let J=typeof $.payload?.toolCallId==="string"?$.payload.toolCallId:void 0;if(J&&this.pendingApprovalToolCallIds.delete(J))return;this.emitToolCallContentStart({sessionId:f,toolCallId:J,toolName:typeof $.payload?.toolName==="string"?$.payload.toolName:void 0,toolInput:$.payload?.input});return}case"tool.finished":{let J=typeof $.payload?.toolCallId==="string"?$.payload.toolCallId:void 0;if(J)this.pendingApprovalToolCallIds.delete(J);this.events.emit({type:"agent_event",payload:{sessionId:f,event:{type:"content_end",contentType:"tool",toolCallId:J,toolName:typeof $.payload?.toolName==="string"?$.payload.toolName:void 0,output:$.payload?.output,error:typeof $.payload?.error==="string"?$.payload.error:void 0}}});return}case"session.created":case"session.updated":case"session.attached":case"session.detached":{let J=L1($.payload?.snapshot),W=$.payload?.session;if(J)this.events.emit({type:"session_snapshot",payload:{sessionId:f,snapshot:J}});this.events.emit({type:"status",payload:{sessionId:f,status:W?.status??"running"}});return}case"session.pending_prompts":{this.events.emit({type:"pending_prompts",payload:{sessionId:f,prompts:Array.isArray($.payload?.prompts)?$.payload.prompts:[]}});return}case"session.pending_prompt_submitted":{let J=$.payload?.prompt;if(!J)return;this.events.emit({type:"pending_prompt_submitted",payload:{sessionId:f,id:J.id,prompt:J.prompt,delivery:J.delivery,attachmentCount:J.attachmentCount}});return}case"run.completed":case"run.failed":case"run.aborted":{let J=L1($.payload?.snapshot),W=typeof $.payload?.reason==="string"?$.payload.reason:$.event==="run.aborted"?"aborted":$.event==="run.failed"?"error":"completed";if(this.emitAgentDoneIfNeeded({sessionId:f,payload:{...$.payload,reason:W}}),J?.interactive===!0&&W0(J.status))return;this.events.emit({type:"ended",payload:{sessionId:f,reason:W,ts:$.timestamp??Date.now()}});return}default:return}}captureDetachedHubEventError($,f,J){try{qA(this.telemetry,{component:"core",operation:$,error:f,severity:"warn",handled:!0,context:{event:J.event,sessionId:J.sessionId,runtimeAddress:this.runtimeAddress}})}catch{}}async handleCapabilityRequest($){let f=$.sessionId?.trim();if(!f)return;let J=typeof $.payload?.targetClientId==="string"?$.payload.targetClientId:void 0;if(J&&J!==this.client.getClientId())return;let W=typeof $.payload?.requestId==="string"?$.payload.requestId:"",Z=typeof $.payload?.capabilityName==="string"?$.payload.capabilityName:"";if(!W)return;let Q=this.sessionClientContributionHandlers.get(f)?.get(Z);if(!Q){await this.client.command("capability.respond",{requestId:W,ok:!1,error:`No client contribution handler registered for capability ${Z} in session ${f}.`},f).catch(()=>{});return}let j=$.payload?.payload&&typeof $.payload.payload==="object"&&!Array.isArray($.payload.payload)?$.payload.payload:{},X=new AbortController;this.activeCapabilityAbortControllers.set(W,X);let H=(Y)=>{this.client.command("capability.progress",{requestId:W,payload:Y},f).catch((A)=>{this.captureDetachedHubEventError("hub.runtime_host.capability_progress",A,$)})};try{let Y=await Q({payload:j,abortSignal:X.signal,progress:H});if(X.signal.aborted)return;await this.client.command("capability.respond",{requestId:W,ok:!0,payload:Y},f)}catch(Y){if(X.signal.aborted)return;await this.client.command("capability.respond",{requestId:W,ok:!1,error:Y instanceof Error?Y.message:String(Y)},f)}finally{this.activeCapabilityAbortControllers.delete(W)}}handleCapabilityResolved($){if($.payload?.cancelled!==!0)return;let f=typeof $.payload.requestId==="string"?$.payload.requestId.trim():"";if(!f)return;let J=this.activeCapabilityAbortControllers.get(f);if(!J)return;J.abort(LT($.payload.error))}async handleApprovalRequested($){let f=$.sessionId?.trim();if(!f)return;let J=this.sessionCapabilities.get(f)?.requestToolApproval??this.defaultCapabilities.requestToolApproval;if(!J)return;let W=typeof $.payload?.approvalId==="string"?$.payload.approvalId.trim():"",Z=typeof $.payload?.toolCallId==="string"?$.payload.toolCallId:"",Q=typeof $.payload?.toolName==="string"?$.payload.toolName:"";if(!W||!Z||!Q)return;let j=$.payload?.policy&&typeof $.payload.policy==="object"&&!Array.isArray($.payload.policy)?$.payload.policy:{autoApprove:!1},X=zT($.payload?.inputJson);this.pendingApprovalToolCallIds.add(Z),this.emitToolCallContentStart({sessionId:f,toolCallId:Z,toolName:Q,toolInput:X});let H=await Promise.resolve(J({sessionId:f,agentId:typeof $.payload?.agentId==="string"?$.payload.agentId:"",conversationId:typeof $.payload?.conversationId==="string"?$.payload.conversationId:f,iteration:typeof $.payload?.iteration==="number"?$.payload.iteration:0,toolCallId:Z,toolName:Q,input:X,policy:j})).catch((Y)=>({approved:!1,reason:Y instanceof Error?Y.message:`Tool approval request failed: ${String(Y)}`}));await this.client.command("approval.respond",{approvalId:W,approved:H.approved,reason:H.reason},f).catch(()=>{})}}var vA={};w(vA,{RemoteRuntimeHost:()=>O2});class O2 extends m${constructor($){super({url:R1($.endpoint),authToken:$.authToken,clientType:$.clientType??"core-remote-runtime",displayName:$.displayName??"core remote runtime",capabilities:$.capabilities},{workspaceRoot:$.workspaceRoot,cwd:$.cwd})}}var uA={};w(uA,{SqliteSessionStore:()=>G$});import{existsSync as yT,mkdirSync as qT}from"node:fs";import{join as wT}from"node:path";import{asBool as uJ,asOptionalString as K$,asString as g$,ensureSessionSchema as ST,loadSqliteDb as hT,nowIso as L5,toBoolInt as cJ}from"@cline/shared/db";import{resolveDbDataDir as CT}from"@cline/shared/storage";class G${sessionsDirPath;db;constructor($={}){this.sessionsDirPath=$.sessionsDir??CT()}init(){this.getRawDb()}ensureSessionsDir(){if(!yT(this.sessionsDirPath))qT(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}sessionDbPath(){return wT(this.ensureSessionsDir(),"sessions.db")}getRawDb(){if(this.db)return this.db;let $=hT(this.sessionDbPath());return ST($,{includeLegacyMigrations:!0}),this.db=$,$}close(){this.db?.close?.(),this.db=void 0}run($,f=[]){return this.getRawDb().prepare($).run(...f)}queryOne($,f=[]){return this.getRawDb().prepare($).get(...f)??void 0}queryAll($,f=[]){return this.getRawDb().prepare($).all(...f)}create($){let f=L5();this.run(`INSERT OR REPLACE INTO sessions (
483
483
  session_id, source, pid, started_at, ended_at, exit_code, status, status_lock, interactive,
package/dist/hub/index.js CHANGED
@@ -274,7 +274,7 @@ ${JSON.stringify(W,null,2)}`}startClaimLeaseHeartbeat($){let f=Math.max(1000,Mat
274
274
  error = ?,
275
275
  scheduled_for = COALESCE(?, scheduled_for),
276
276
  updated_at = ?
277
- WHERE run_id = ? AND claim_token = ?`).run($.error??null,$.scheduledFor??null,f,$.runId,$.claimToken).changes??0)>0}attachSessionIdToRun($,f){this.db.prepare("UPDATE cron_runs SET session_id = ?, updated_at = ? WHERE run_id = ?").run(f,K0(),$)}attachReportPathToRun($,f){this.db.prepare("UPDATE cron_runs SET report_path = ?, updated_at = ? WHERE run_id = ?").run(f,K0(),$)}}function K4($){return $?new Date($).getTime():void 0}function YG($){let f=$.metadata?{...$.metadata}:void 0;if(f)delete f.__hubScheduleCreatedBy,delete f.__hubScheduleCwd,delete f.__hubRuntimeOptions;return f}function B4($){let f=$.metadata;return{scheduleId:$.externalId,name:$.title,cronPattern:$.scheduleExpr??"",prompt:$.prompt??"",workspaceRoot:$.workspaceRoot??"",cwd:typeof f?.__hubScheduleCwd==="string"?f.__hubScheduleCwd:void 0,modelSelection:$.providerId||$.modelId?{providerId:$.providerId??"",modelId:$.modelId??""}:void 0,enabled:$.enabled&&!$.removed&&$.parseStatus==="valid",mode:$.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act",systemPrompt:$.systemPrompt,maxIterations:$.maxIterations,timeoutSeconds:$.timeoutSeconds,maxParallel:$.maxParallel??1,createdAt:new Date($.createdAt).getTime(),updatedAt:new Date($.updatedAt).getTime(),nextRunAt:K4($.nextRunAt),lastRunAt:K4($.lastRunAt),createdBy:typeof f?.__hubScheduleCreatedBy==="string"?f.__hubScheduleCreatedBy:void 0,tags:$.tags,runtimeOptions:f?.__hubRuntimeOptions&&typeof f.__hubRuntimeOptions==="object"&&!Array.isArray(f.__hubRuntimeOptions)?f.__hubRuntimeOptions:void 0,metadata:YG($)}}function VG($){switch($){case"done":return"success";case"cancelled":return"aborted";case"running":return"running";case"queued":return"pending";default:return"failed"}}function TW($,f){return{executionId:$.runId,scheduleId:f,sessionId:$.sessionId,triggeredAt:new Date($.scheduledFor??$.createdAt).getTime(),startedAt:K4($.startedAt),endedAt:K4($.completedAt),status:VG($.status),errorMessage:$.error}}class qf{store;materializer;runner;started=!1;disposed=!1;constructor($){this.store=new o2({dbPath:$.dbPath}),this.materializer=new p2({store:this.store}),this.runner=new n2({store:this.store,materializer:this.materializer,runtimeHandlers:$.runtimeHandlers,eventPublisher:$.eventPublisher,workspaceRoot:"",logger:$.logger,pollIntervalMs:$.pollIntervalMs,claimLeaseSeconds:$.claimLeaseSeconds,globalMaxConcurrency:$.globalMaxConcurrency})}async start(){if(this.disposed)throw Error("HubScheduleService has been disposed");if(this.started)return;this.started=!0,await this.runner.start()}async stop(){await this.runner.stop(),this.started=!1}async dispose(){if(this.disposed)return;this.disposed=!0,await this.runner.dispose(),this.store.close()}createSchedule($){if(LW($.cronPattern),!$.workspaceRoot?.trim())throw Error("workspaceRoot is required for schedules");return B4(this.store.createHubSchedule($))}getSchedule($){let f=this.store.getHubSchedule($);return f?B4(f):void 0}listSchedules($={}){return this.store.listHubSchedules($).map((f)=>B4(f))}updateSchedule($,f){if(f.cronPattern!==void 0)LW(f.cronPattern);let J=this.store.getHubSchedule($);if(!J)return;let W=f.workspaceRoot!==void 0?f.workspaceRoot.trim():J.workspaceRoot;if((f.enabled??J.enabled)&&!W)throw Error("workspaceRoot is required for enabled schedules");let Q=this.store.updateHubSchedule($,{...f,scheduleId:$});return Q?B4(Q):void 0}deleteSchedule($){return this.store.deleteHubSchedule($)}pauseSchedule($){return this.updateSchedule($,{scheduleId:$,enabled:!1})}resumeSchedule($){return this.updateSchedule($,{scheduleId:$,enabled:!0})}async triggerScheduleNow($){let f=this.store.enqueueHubScheduleRun($,"manual");if(!f)return;await this.runner.tick();let J=this.store.getRun(f.runId)??f;return TW(J,$)}triggerScheduleNowDetached($){let f=this.store.enqueueHubScheduleRun($,"manual");if(!f)return;return this.runner.tick().catch(()=>{return}),TW(f,$)}listScheduleExecutions($){let f=$.scheduleId?this.store.getHubSchedule($.scheduleId):void 0,J={specId:f?.specId,limit:$.limit};return this.store.listRuns(J).map((Z)=>{let Q=f??this.store.getSpec(Z.specId);if(!Q||Q.source!=="hub-schedule")return;return TW(Z,Q.externalId)}).filter((Z)=>{if(!Z)return!1;return!$.status||Z.status===$.status})}getScheduleStats($){let f=this.listScheduleExecutions({scheduleId:$,limit:1e4});if(f.length===0)return{totalRuns:0,successRate:0,avgDurationSeconds:0};let J=0,W=0,Z=0,Q;for(let j of f){if(j.status==="success"||j.status==="completed")J+=1;if(!Q&&j.status!=="success"&&j.status!=="completed")Q=j;if(j.startedAt&&j.endedAt)Z+=j.endedAt-j.startedAt,W+=1}return{totalRuns:f.length,successRate:J/f.length,avgDurationSeconds:W>0?Z/W/1000:0,lastFailure:Q}}getActiveExecutions(){return this.runner.getActiveRuns().flatMap(($)=>{let f=this.store.getSpec($.specId);if(!f||f.source!=="hub-schedule"||!$.sessionId)return[];return[{executionId:$.runId,scheduleId:f.externalId,sessionId:$.sessionId,startedAt:$.startedAt??new Date().toISOString(),timeoutAt:f.timeoutSeconds&&$.startedAt?new Date(new Date($.startedAt).getTime()+f.timeoutSeconds*1000).toISOString():void 0}]})}getUpcomingRuns($=20){let f={triggerKind:"schedule",enabled:!0,limit:$};return this.store.listSpecs(f).flatMap((J)=>J.source==="hub-schedule"&&J.nextRunAt?[{spec:J,nextRunAt:J.nextRunAt}]:[]).sort((J,W)=>String(J.nextRunAt).localeCompare(String(W.nextRunAt))).slice(0,$).map(({spec:J,nextRunAt:W})=>({scheduleId:J.externalId,name:J.title,nextRunAt:W}))}}m4();import{createSessionId as aP,resolveHubCommandTimeoutMs as tP}from"@cline/shared";var T3={};w(T3,{splitCoreSessionConfig:()=>X8,isSessionNotFoundError:()=>q$,SessionNotFoundError:()=>y$,SESSION_NOT_FOUND_ERROR_CODE:()=>C1});var C1="session_not_found";class y$ extends Error{sessionId;code="session_not_found";constructor($,f){super(f??($?`session not found: ${$}`:"session not found"));this.sessionId=$;this.name="SessionNotFoundError"}}function q$($){return $ instanceof y$||typeof $==="object"&&$!==null&&"code"in $&&$.code==="session_not_found"}function X8($){let{hooks:f,logger:J,telemetry:W,extensionContext:Z,extraTools:Q,extensions:j,onTeamEvent:H,onConsecutiveMistakeLimitReached:X,checkpoint:A,compaction:Y,...V}=$,B={};if(f)B.hooks=f;if(J)B.logger=J;if(W)B.telemetry=W;if(Z)B.extensionContext=Z;if(Q)B.extraTools=Q;if(j)B.extensions=j;if(H)B.onTeamEvent=H;if(X)B.onConsecutiveMistakeLimitReached=X;if(A?.createCheckpoint)B.checkpoint=A;if(Y?.compact)B.compaction=Y;let K=Object.keys(B).length>0?B:void 0;return{config:{...V,...A?{checkpoint:{enabled:A.enabled}}:{},...Y?{compaction:{enabled:Y.enabled,strategy:Y.strategy,thresholdRatio:Y.thresholdRatio,reserveTokens:Y.reserveTokens,preserveRecentTokens:Y.preserveRecentTokens,maxInputTokens:Y.maxInputTokens,summarizer:Y.summarizer}}:{}},...K?{localRuntime:K}:{}}}import{spawn as yP}from"node:child_process";import{closeSync as qP,mkdirSync as wP,openSync as SP}from"node:fs";import{basename as hP,dirname as CP,join as EP}from"node:path";import{fileURLToPath as bP}from"node:url";import{CLINE_RUN_AS_HUB_DAEMON_ENV as kP,isHubDaemonProcess as x3,withResolvedClineBuildEnv as IP}from"@cline/shared";import{createHash as jP,randomBytes as HP}from"node:crypto";import{existsSync as XP}from"node:fs";import{chmod as AP,mkdir as wW,readFile as w3,rm as SW,writeFile as S3}from"node:fs/promises";import{dirname as h3,join as hW}from"node:path";import{resolveClineDataDir as Y8,resolveClineDir as C3}from"@cline/shared/storage";var M3="0.0.44";var A8={name:"@cline/core",description:"Cline Core SDK for Node Runtime",version:M3,repository:{type:"git",url:"https://github.com/cline/cline",directory:"sdk/packages/core"},type:"module",types:"./dist/index.d.ts",main:"./dist/index.js",private:!1,publishConfig:{access:"public"},exports:{".":{types:"./dist/index.d.ts",import:"./dist/index.js"},"./hub":{types:"./dist/hub/index.d.ts",import:"./dist/hub/index.js"},"./hub/daemon-entry":{types:"./dist/hub/daemon/entry.d.ts",import:"./dist/hub/daemon/entry.js"},"./telemetry":{types:"./dist/services/telemetry/index.d.ts",import:"./dist/services/telemetry/index.js"}},scripts:{build:"bun run ./bun.mts && bun tsc -p tsconfig.build.json",typecheck:"bun tsc -p tsconfig.dev.json --noEmit && bun run typecheck:smoke","typecheck:smoke":"bun tsc -p tsconfig.smoke.json --noEmit",test:"bun run test:unit && bun run test:e2e","test:live":"vitest run --config vitest.config.ts src/extensions/context/compaction.live.test.ts","test:unit":"vitest run --config vitest.config.ts","test:e2e":"vitest run --config vitest.e2e.config.ts","verify:routines":"zsh -lc 'bunx vitest run src/cron/schedule-service.test.ts --config vitest.config.ts'","test:watch":"vitest --config vitest.config.ts"},dependencies:{"@cline/agents":"workspace:*","@cline/shared":"workspace:*","@cline/llms":"workspace:*","@modelcontextprotocol/sdk":"^1.29.0","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.214.0","@opentelemetry/exporter-logs-otlp-http":"^0.214.0","@opentelemetry/exporter-metrics-otlp-http":"^0.214.0","@opentelemetry/exporter-trace-otlp-http":"^0.214.0","@opentelemetry/resources":"^2.6.1","@opentelemetry/sdk-logs":"^0.214.0","@opentelemetry/sdk-metrics":"^2.6.1","@opentelemetry/sdk-trace-base":"^2.6.1","@opentelemetry/sdk-trace-node":"^2.6.1","@opentelemetry/semantic-conventions":"^1.40.0",jiti:"^2.7.0","node-machine-id":"^1.1.12",nanoid:"^5.1.7","simple-git":"3.36.0",ws:"^8.20.0",yaml:"^2.8.2",zod:"^4.3.6"},devDependencies:{"@types/ws":"^8.18.1"},engines:{node:">=22"},files:["dist","!dist/**/*.d.ts.map"]};var YP="CLINE_HUB_DISCOVERY_PATH",VP="CLINE_HUB_BUILD_ID",y3=30000,BP=15000,KP=100;function GP($){return $.replace(/[^a-zA-Z0-9_.-]+/g,"_")}function PP($){return jP("sha256").update($).digest("hex").slice(0,12)}function UP($){if(!Number.isInteger($)||!$||$<=0)return!1;try{return process.kill($,0),!0}catch(f){return f instanceof Error&&"code"in f?String(f.code)==="EPERM":!1}}function g4(){return HP(32).toString("hex")}function FP($){return new Promise((f)=>setTimeout(f,$))}function RP($){return`${$}.lock`}async function DP($){try{let f=JSON.parse(await w3(hW($,"owner.json"),"utf8"));if(typeof f.pid!=="number"||typeof f.acquiredAt!=="string")return;return{pid:f.pid,acquiredAt:f.acquiredAt}}catch{return}}async function q3($){await SW($,{recursive:!0,force:!0}).catch(()=>{return})}function t$(){return process.env[VP]?.trim()||String(A8.version)}function w$($=process.argv[1]?.trim()||process.cwd()){let f=`hub-${PP($)}`,J=process.env[YP]?.trim()||hW(Y8(),"locks","hub","owners",`${GP(f)}.json`);return{ownerId:f,discoveryPath:J}}function E3($=`hub-${Date.now().toString(36)}`){return w$($)}async function V0($){try{let f=JSON.parse(await w3($,"utf8"));if(typeof f.hubId!=="string"||typeof f.protocolVersion!=="string"||typeof f.authToken!=="string"||typeof f.host!=="string"||typeof f.port!=="number"||typeof f.url!=="string"||typeof f.startedAt!=="string"||typeof f.updatedAt!=="string")return;return{hubId:f.hubId,protocolVersion:f.protocolVersion,coreVersion:typeof f.coreVersion==="string"?f.coreVersion:void 0,buildId:typeof f.buildId==="string"?f.buildId:void 0,authToken:f.authToken,host:f.host,port:f.port,url:f.url,pid:typeof f.pid==="number"?f.pid:void 0,startedAt:f.startedAt,updatedAt:f.updatedAt}}catch{return}}async function v4($,f){await wW(h3($),{recursive:!0}),await SW($,{force:!0}).catch(()=>{return}),await S3($,`${JSON.stringify(f,null,2)}
277
+ WHERE run_id = ? AND claim_token = ?`).run($.error??null,$.scheduledFor??null,f,$.runId,$.claimToken).changes??0)>0}attachSessionIdToRun($,f){this.db.prepare("UPDATE cron_runs SET session_id = ?, updated_at = ? WHERE run_id = ?").run(f,K0(),$)}attachReportPathToRun($,f){this.db.prepare("UPDATE cron_runs SET report_path = ?, updated_at = ? WHERE run_id = ?").run(f,K0(),$)}}function K4($){return $?new Date($).getTime():void 0}function YG($){let f=$.metadata?{...$.metadata}:void 0;if(f)delete f.__hubScheduleCreatedBy,delete f.__hubScheduleCwd,delete f.__hubRuntimeOptions;return f}function B4($){let f=$.metadata;return{scheduleId:$.externalId,name:$.title,cronPattern:$.scheduleExpr??"",prompt:$.prompt??"",workspaceRoot:$.workspaceRoot??"",cwd:typeof f?.__hubScheduleCwd==="string"?f.__hubScheduleCwd:void 0,modelSelection:$.providerId||$.modelId?{providerId:$.providerId??"",modelId:$.modelId??""}:void 0,enabled:$.enabled&&!$.removed&&$.parseStatus==="valid",mode:$.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act",systemPrompt:$.systemPrompt,maxIterations:$.maxIterations,timeoutSeconds:$.timeoutSeconds,maxParallel:$.maxParallel??1,createdAt:new Date($.createdAt).getTime(),updatedAt:new Date($.updatedAt).getTime(),nextRunAt:K4($.nextRunAt),lastRunAt:K4($.lastRunAt),createdBy:typeof f?.__hubScheduleCreatedBy==="string"?f.__hubScheduleCreatedBy:void 0,tags:$.tags,runtimeOptions:f?.__hubRuntimeOptions&&typeof f.__hubRuntimeOptions==="object"&&!Array.isArray(f.__hubRuntimeOptions)?f.__hubRuntimeOptions:void 0,metadata:YG($)}}function VG($){switch($){case"done":return"success";case"cancelled":return"aborted";case"running":return"running";case"queued":return"pending";default:return"failed"}}function TW($,f){return{executionId:$.runId,scheduleId:f,sessionId:$.sessionId,triggeredAt:new Date($.scheduledFor??$.createdAt).getTime(),startedAt:K4($.startedAt),endedAt:K4($.completedAt),status:VG($.status),errorMessage:$.error}}class qf{store;materializer;runner;started=!1;disposed=!1;constructor($){this.store=new o2({dbPath:$.dbPath}),this.materializer=new p2({store:this.store}),this.runner=new n2({store:this.store,materializer:this.materializer,runtimeHandlers:$.runtimeHandlers,eventPublisher:$.eventPublisher,workspaceRoot:"",logger:$.logger,pollIntervalMs:$.pollIntervalMs,claimLeaseSeconds:$.claimLeaseSeconds,globalMaxConcurrency:$.globalMaxConcurrency})}async start(){if(this.disposed)throw Error("HubScheduleService has been disposed");if(this.started)return;this.started=!0,await this.runner.start()}async stop(){await this.runner.stop(),this.started=!1}async dispose(){if(this.disposed)return;this.disposed=!0,await this.runner.dispose(),this.store.close()}createSchedule($){if(LW($.cronPattern),!$.workspaceRoot?.trim())throw Error("workspaceRoot is required for schedules");return B4(this.store.createHubSchedule($))}getSchedule($){let f=this.store.getHubSchedule($);return f?B4(f):void 0}listSchedules($={}){return this.store.listHubSchedules($).map((f)=>B4(f))}updateSchedule($,f){if(f.cronPattern!==void 0)LW(f.cronPattern);let J=this.store.getHubSchedule($);if(!J)return;let W=f.workspaceRoot!==void 0?f.workspaceRoot.trim():J.workspaceRoot;if((f.enabled??J.enabled)&&!W)throw Error("workspaceRoot is required for enabled schedules");let Q=this.store.updateHubSchedule($,{...f,scheduleId:$});return Q?B4(Q):void 0}deleteSchedule($){return this.store.deleteHubSchedule($)}pauseSchedule($){return this.updateSchedule($,{scheduleId:$,enabled:!1})}resumeSchedule($){return this.updateSchedule($,{scheduleId:$,enabled:!0})}async triggerScheduleNow($){let f=this.store.enqueueHubScheduleRun($,"manual");if(!f)return;await this.runner.tick();let J=this.store.getRun(f.runId)??f;return TW(J,$)}triggerScheduleNowDetached($){let f=this.store.enqueueHubScheduleRun($,"manual");if(!f)return;return this.runner.tick().catch(()=>{return}),TW(f,$)}listScheduleExecutions($){let f=$.scheduleId?this.store.getHubSchedule($.scheduleId):void 0,J={specId:f?.specId,limit:$.limit};return this.store.listRuns(J).map((Z)=>{let Q=f??this.store.getSpec(Z.specId);if(!Q||Q.source!=="hub-schedule")return;return TW(Z,Q.externalId)}).filter((Z)=>{if(!Z)return!1;return!$.status||Z.status===$.status})}getScheduleStats($){let f=this.listScheduleExecutions({scheduleId:$,limit:1e4});if(f.length===0)return{totalRuns:0,successRate:0,avgDurationSeconds:0};let J=0,W=0,Z=0,Q;for(let j of f){if(j.status==="success"||j.status==="completed")J+=1;if(!Q&&j.status!=="success"&&j.status!=="completed")Q=j;if(j.startedAt&&j.endedAt)Z+=j.endedAt-j.startedAt,W+=1}return{totalRuns:f.length,successRate:J/f.length,avgDurationSeconds:W>0?Z/W/1000:0,lastFailure:Q}}getActiveExecutions(){return this.runner.getActiveRuns().flatMap(($)=>{let f=this.store.getSpec($.specId);if(!f||f.source!=="hub-schedule"||!$.sessionId)return[];return[{executionId:$.runId,scheduleId:f.externalId,sessionId:$.sessionId,startedAt:$.startedAt??new Date().toISOString(),timeoutAt:f.timeoutSeconds&&$.startedAt?new Date(new Date($.startedAt).getTime()+f.timeoutSeconds*1000).toISOString():void 0}]})}getUpcomingRuns($=20){let f={triggerKind:"schedule",enabled:!0,limit:$};return this.store.listSpecs(f).flatMap((J)=>J.source==="hub-schedule"&&J.nextRunAt?[{spec:J,nextRunAt:J.nextRunAt}]:[]).sort((J,W)=>String(J.nextRunAt).localeCompare(String(W.nextRunAt))).slice(0,$).map(({spec:J,nextRunAt:W})=>({scheduleId:J.externalId,name:J.title,nextRunAt:W}))}}m4();import{createSessionId as aP,resolveHubCommandTimeoutMs as tP}from"@cline/shared";var T3={};w(T3,{splitCoreSessionConfig:()=>X8,isSessionNotFoundError:()=>q$,SessionNotFoundError:()=>y$,SESSION_NOT_FOUND_ERROR_CODE:()=>C1});var C1="session_not_found";class y$ extends Error{sessionId;code="session_not_found";constructor($,f){super(f??($?`session not found: ${$}`:"session not found"));this.sessionId=$;this.name="SessionNotFoundError"}}function q$($){return $ instanceof y$||typeof $==="object"&&$!==null&&"code"in $&&$.code==="session_not_found"}function X8($){let{hooks:f,logger:J,telemetry:W,extensionContext:Z,extraTools:Q,extensions:j,onTeamEvent:H,onConsecutiveMistakeLimitReached:X,checkpoint:A,compaction:Y,...V}=$,B={};if(f)B.hooks=f;if(J)B.logger=J;if(W)B.telemetry=W;if(Z)B.extensionContext=Z;if(Q)B.extraTools=Q;if(j)B.extensions=j;if(H)B.onTeamEvent=H;if(X)B.onConsecutiveMistakeLimitReached=X;if(A?.createCheckpoint)B.checkpoint=A;if(Y?.compact)B.compaction=Y;let K=Object.keys(B).length>0?B:void 0;return{config:{...V,...A?{checkpoint:{enabled:A.enabled}}:{},...Y?{compaction:{enabled:Y.enabled,strategy:Y.strategy,thresholdRatio:Y.thresholdRatio,reserveTokens:Y.reserveTokens,preserveRecentTokens:Y.preserveRecentTokens,maxInputTokens:Y.maxInputTokens,summarizer:Y.summarizer}}:{}},...K?{localRuntime:K}:{}}}import{spawn as yP}from"node:child_process";import{closeSync as qP,mkdirSync as wP,openSync as SP}from"node:fs";import{basename as hP,dirname as CP,join as EP}from"node:path";import{fileURLToPath as bP}from"node:url";import{CLINE_RUN_AS_HUB_DAEMON_ENV as kP,isHubDaemonProcess as x3,withResolvedClineBuildEnv as IP}from"@cline/shared";import{createHash as jP,randomBytes as HP}from"node:crypto";import{existsSync as XP}from"node:fs";import{chmod as AP,mkdir as wW,readFile as w3,rm as SW,writeFile as S3}from"node:fs/promises";import{dirname as h3,join as hW}from"node:path";import{resolveClineDataDir as Y8,resolveClineDir as C3}from"@cline/shared/storage";var M3="0.0.45";var A8={name:"@cline/core",description:"Cline Core SDK for Node Runtime",version:M3,repository:{type:"git",url:"https://github.com/cline/cline",directory:"sdk/packages/core"},type:"module",types:"./dist/index.d.ts",main:"./dist/index.js",private:!1,publishConfig:{access:"public"},exports:{".":{types:"./dist/index.d.ts",import:"./dist/index.js"},"./hub":{types:"./dist/hub/index.d.ts",import:"./dist/hub/index.js"},"./hub/daemon-entry":{types:"./dist/hub/daemon/entry.d.ts",import:"./dist/hub/daemon/entry.js"},"./telemetry":{types:"./dist/services/telemetry/index.d.ts",import:"./dist/services/telemetry/index.js"}},scripts:{build:"bun run ./bun.mts && bun tsc -p tsconfig.build.json",typecheck:"bun tsc -p tsconfig.dev.json --noEmit && bun run typecheck:smoke","typecheck:smoke":"bun tsc -p tsconfig.smoke.json --noEmit",test:"bun run test:unit && bun run test:e2e","test:live":"vitest run --config vitest.config.ts src/extensions/context/compaction.live.test.ts","test:unit":"vitest run --config vitest.config.ts","test:e2e":"vitest run --config vitest.e2e.config.ts","verify:routines":"zsh -lc 'bunx vitest run src/cron/schedule-service.test.ts --config vitest.config.ts'","test:watch":"vitest --config vitest.config.ts"},dependencies:{"@cline/agents":"workspace:*","@cline/shared":"workspace:*","@cline/llms":"workspace:*","@modelcontextprotocol/sdk":"^1.29.0","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.214.0","@opentelemetry/exporter-logs-otlp-http":"^0.214.0","@opentelemetry/exporter-metrics-otlp-http":"^0.214.0","@opentelemetry/exporter-trace-otlp-http":"^0.214.0","@opentelemetry/resources":"^2.6.1","@opentelemetry/sdk-logs":"^0.214.0","@opentelemetry/sdk-metrics":"^2.6.1","@opentelemetry/sdk-trace-base":"^2.6.1","@opentelemetry/sdk-trace-node":"^2.6.1","@opentelemetry/semantic-conventions":"^1.40.0",jiti:"^2.7.0","node-machine-id":"^1.1.12",nanoid:"^5.1.7","simple-git":"3.36.0",ws:"^8.20.0",yaml:"^2.8.2",zod:"^4.3.6"},devDependencies:{"@types/ws":"^8.18.1"},engines:{node:">=22"},files:["dist","!dist/**/*.d.ts.map"]};var YP="CLINE_HUB_DISCOVERY_PATH",VP="CLINE_HUB_BUILD_ID",y3=30000,BP=15000,KP=100;function GP($){return $.replace(/[^a-zA-Z0-9_.-]+/g,"_")}function PP($){return jP("sha256").update($).digest("hex").slice(0,12)}function UP($){if(!Number.isInteger($)||!$||$<=0)return!1;try{return process.kill($,0),!0}catch(f){return f instanceof Error&&"code"in f?String(f.code)==="EPERM":!1}}function g4(){return HP(32).toString("hex")}function FP($){return new Promise((f)=>setTimeout(f,$))}function RP($){return`${$}.lock`}async function DP($){try{let f=JSON.parse(await w3(hW($,"owner.json"),"utf8"));if(typeof f.pid!=="number"||typeof f.acquiredAt!=="string")return;return{pid:f.pid,acquiredAt:f.acquiredAt}}catch{return}}async function q3($){await SW($,{recursive:!0,force:!0}).catch(()=>{return})}function t$(){return process.env[VP]?.trim()||String(A8.version)}function w$($=process.argv[1]?.trim()||process.cwd()){let f=`hub-${PP($)}`,J=process.env[YP]?.trim()||hW(Y8(),"locks","hub","owners",`${GP(f)}.json`);return{ownerId:f,discoveryPath:J}}function E3($=`hub-${Date.now().toString(36)}`){return w$($)}async function V0($){try{let f=JSON.parse(await w3($,"utf8"));if(typeof f.hubId!=="string"||typeof f.protocolVersion!=="string"||typeof f.authToken!=="string"||typeof f.host!=="string"||typeof f.port!=="number"||typeof f.url!=="string"||typeof f.startedAt!=="string"||typeof f.updatedAt!=="string")return;return{hubId:f.hubId,protocolVersion:f.protocolVersion,coreVersion:typeof f.coreVersion==="string"?f.coreVersion:void 0,buildId:typeof f.buildId==="string"?f.buildId:void 0,authToken:f.authToken,host:f.host,port:f.port,url:f.url,pid:typeof f.pid==="number"?f.pid:void 0,startedAt:f.startedAt,updatedAt:f.updatedAt}}catch{return}}async function v4($,f){await wW(h3($),{recursive:!0}),await SW($,{force:!0}).catch(()=>{return}),await S3($,`${JSON.stringify(f,null,2)}
278
278
  `,{encoding:"utf8",mode:384}),await AP($,384)}async function b0($){await SW($,{force:!0}).catch(()=>{return})}async function u4($,f){let J=RP($);await wW(h3(J),{recursive:!0});let W=Date.now()+BP;while(!0)try{await wW(J,{recursive:!1}),await S3(hW(J,"owner.json"),`${JSON.stringify({pid:process.pid,acquiredAt:new Date().toISOString()},null,2)}
279
279
  `,"utf8");try{return await f()}finally{await q3(J)}}catch(Z){if((Z instanceof Error&&"code"in Z?String(Z.code):"")!=="EEXIST")throw Z;let j=await DP(J),H=j?Date.now()-Date.parse(j.acquiredAt):y3+1;if(!j||!UP(j.pid)||H>y3){await q3(J);continue}if(Date.now()>=W)throw Error(`Timed out waiting for hub startup lock ${J}`);await FP(KP)}}async function Q$($){try{let f=await fetch(CW($));if(!f.ok)return;return await f.json()}catch{return}}function t0($,f,J="/hub"){return new URL(`ws://${$}:${f}${J}`).toString()}function CW($){let f=new URL($);return f.protocol=f.protocol==="wss:"?"https:":"http:",f.pathname="/health",f.search="",f.toString()}function b3($){return XP($)}import{CLINE_HUB_DEV_PORT as LP,CLINE_HUB_PORT as OP,resolveClineBuildEnv as zP}from"@cline/shared";var _P="CLINE_HUB_HOST",TP="CLINE_HUB_PORT",NP="CLINE_HUB_PATHNAME",EW="127.0.0.1",bW=OP,kW="/hub";function k3($){return zP($)==="development"?LP:bW}function IW($={}){return($.env??process.env)[_P]?.trim()||EW}function bf($={}){let J=($.env??process.env)[TP]?.trim();if(!J)return k3($);let W=Number.parseInt(J,10);if(!Number.isInteger(W)||W<1||W>65535)return k3($);return W}function xW($={}){return($.env??process.env)[NP]?.trim()||kW}function j$($={},f={}){return{host:$.host??IW(f),port:$.port??bf(f),pathname:$.pathname??xW(f)}}var MP="shared:cline";function I3($){let f=L$($.trim());return w$(`workspace:${f||$.trim()}`)}function G0($=MP){return w$($)}var xP=8000,mP=200,gP=3000,vP=100,uP=[100,250,500,1000,2000],cP="--cline-hub-daemon";function dP($){return[...$.host?["--host",$.host]:[],...typeof $.port==="number"?["--port",String($.port)]:[],...$.pathname?["--pathname",$.pathname]:[]]}function lP(){try{let $=EP(Y8(),"logs","hub-daemon.log");return wP(CP($),{recursive:!0}),{fd:SP($,"a"),logPath:$}}catch{return}}function V8($){let f=$.buildId?.trim();return!!f&&f===t$()}async function E1($){try{return await Q$($)}catch{return}}async function pP($,f){let J=Date.now()+f;while(Date.now()<J){if(!(await E1($))?.url)return!0;await new Promise((Z)=>setTimeout(Z,vP))}return!1}async function B8($,f){if(V8($))return;if(await K8($.url,$.authToken).catch(()=>!1),$.pid)try{process.kill($.pid,"SIGTERM")}catch{}await pP($.url,gP),await b0(f).catch(()=>{return})}function rP(){let $=import.meta.url.endsWith(".ts")?"ts":"js";return bP(new URL(`./entry.${$}`,import.meta.url))}function iP($,f){let J=rP(),W=process.execPath?.trim();if(!W)throw Error("unable to resolve runtime executable for hub daemon");let Z=hP(W).toLowerCase().includes("bun"),Q=J.startsWith("/$bunfs/"),j=Z&&J.toLowerCase().endsWith(".ts"),H=Q?[cP]:[...j?["--conditions=development"]:[],J];return{launcher:W,args:[...H,"--cwd",$,...dP(f)],cwd:$,env:{...IP(process.env),CLINE_NO_INTERACTIVE:"1",[kP]:"1"}}}function nP($){if(!$||typeof $!=="object")return!1;if(("code"in $?$.code:void 0)==="ETXTBSY")return!0;let J="message"in $?$.message:void 0;return typeof J==="string"&&J.includes("ETXTBSY")}function mW($,f={}){if(x3())return;let J=iP($,f),W=lP();try{yP(J.launcher,J.args,{detached:!0,stdio:W?["ignore",W.fd,W.fd]:"ignore",env:J.env,cwd:J.cwd}).unref()}finally{if(W)qP(W.fd)}}async function kf($,f={}){for(let J=0;;J++)try{mW($,f);return}catch(W){let Z=uP[J];if(!nP(W)||Z===void 0)throw W;await new Promise((Q)=>setTimeout(Q,Z))}}function c4($,f={}){if(x3())return;let J=G0(),W=f.port!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),Z=j$(f),Q=t0(Z.host,Z.port,Z.pathname);V0(J.discoveryPath).then(async(j)=>{if(j?.url){let Y=await E1(j.url);if(Y?.url&&V8(Y)&&await H$(Y.url,{authToken:j.authToken}))return;if(Y?.url)await B8({...Y,authToken:j.authToken},J.discoveryPath);else await b0(J.discoveryPath).catch(()=>{return})}let H=await E1(Q);if(H?.url)await B8(H,J.discoveryPath);let A=!W&&Z.port!==0?{...Z,port:0}:Z;await kf($,A)}).catch(()=>{})}async function m3($,f={}){let J=G0(),W=f.host!==void 0||f.port!==void 0||f.pathname!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),Z=f.port!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),Q=j$(f),j=t0(Q.host,Q.port,Q.pathname),H=(K)=>{if(!W)s$(K.url,K.authToken);return K},X=await V0(J.discoveryPath);if(X?.url){let K=await E1(X.url);if(K?.url&&V8(K)&&await H$(K.url,{authToken:X.authToken}))return H({url:K.url,authToken:X.authToken});if(K?.url)await B8({...K,authToken:X.authToken},J.discoveryPath);else await b0(J.discoveryPath).catch(()=>{return})}let A=await E1(j);if(A?.url)await B8(A,J.discoveryPath);let V=!Z&&Q.port!==0?{...Q,port:0}:Q;await kf($,V);let B=Date.now()+xP;while(Date.now()<B){let K=await V0(J.discoveryPath);if(K?.url){let R=await E1(K.url);if(R?.url&&V8(R)&&await H$(R.url,{authToken:K.authToken}))return H({url:R.url,authToken:K.authToken})}let G=await E1(j);if(G?.url&&!V8(G))await B8(G,J.discoveryPath);await new Promise((R)=>setTimeout(R,mP))}throw Error("Timed out waiting for detached hub startup.")}function sP(){let $=globalThis.WebSocket;if(!$)throw Error("Global WebSocket is not available in this runtime. Node 22+ is required for hub mode.");return $}function d3($){if(typeof $==="string")return $;if($ instanceof Uint8Array)return Buffer.from($).toString();if($ instanceof ArrayBuffer)return Buffer.from($).toString();if(Array.isArray($))return Buffer.concat($.map((f)=>Buffer.from(f))).toString();if($&&typeof $==="object"&&"data"in $&&typeof $.data<"u")return d3($.data);return String($)}function oP($){if(typeof $==="string")return $;if($ instanceof Uint8Array)return Buffer.from($).toString("utf8");if($ instanceof ArrayBuffer)return Buffer.from($).toString("utf8");return""}function g3($){let f=$,J=oP(f.reason);return new z0("hub_connection_closed",f.code||J?`Hub connection closed (code=${f.code??0}${J?`, reason=${J}`:""})`:gW,{closeCode:f.code,closeReason:J||void 0})}function eP($,f){if($ instanceof z0)return $;if($ instanceof Error)return new z0("hub_connect_failed",$.message);if($&&typeof $==="object"&&"error"in $&&$.error instanceof Error)return new z0("hub_connect_failed",$.error.message);let J=$&&typeof $==="object"&&"message"in $&&typeof $.message==="string"?$.message.trim():"";if(J)return new z0("hub_connect_failed",J);let W=$&&typeof $==="object"&&"type"in $&&typeof $.type==="string"?$.type.trim():"";return new z0("hub_connect_failed",W?`Failed to connect to hub at ${f.toString()} (${W} event before socket open).`:`Failed to connect to hub at ${f.toString()}.`)}var $U=8000,fU=200,v3="*",u3=8000,JU="cline-hub-auth.",l3=new Map,p3=new Set,WU=3000,ZU=3000,QU=100,gW="Hub connection closed",jU=250,HU=5000,c3=0.5;class z0 extends Error{code;details;constructor($,f,J){super(f);this.code=$;this.details=J;this.name="HubTransportError"}}function cW($){return $ instanceof z0}class If extends Error{command;code;constructor($,f,J){super(J);this.command=$;this.code=f;this.name="HubCommandError"}}function d4($,f){return $ instanceof If&&$.code==="hub_command_timeout"&&(f===void 0||$.command===f)}function r3($){let f=$.searchParams.get("authToken")?.trim();if($.searchParams.delete("authToken"),f)return f;let J=dW($.toString());return J?l3.get(J):void 0}function XU($){try{let J=new URL($).hostname.toLowerCase().replace(/^\[|\]$/g,"");return J==="localhost"||J==="127.0.0.1"||J==="::1"}catch{return!1}}function dW($){if(!XU($))return;let f=new URL(o$($));return f.search="",f.hash="",f.toString()}function vW($){let f=dW($);return!!f&&p3.has(f)}function s$($,f){let J=dW($);if(J){if(p3.add(J),f?.trim())l3.set(J,f)}return $}class s0{options;socket;connectPromise;clientId;currentUrl;recoveryPromise;pendingReplies=new Map;listeners=new Set;subscriptionCounts=new Map;reconnectTimer;reconnectAttempt=0;closedByClient=!1;lastCloseError=new z0("hub_connection_closed",gW);sawSocketClose=!1;registered=!1;constructor($){this.options=$;this.clientId=$.clientId??`core-${Math.random().toString(36).slice(2,10)}-${Date.now().toString(36)}`,this.currentUrl=$.url}getClientId(){return this.clientId}getUrl(){return this.currentUrl}async connect(){if(this.socket&&(this.socket.readyState===1||this.socket.readyState===0))return this.connectPromise??Promise.resolve();this.closedByClient=!1,this.clearReconnectTimer();let $=new URL(this.currentUrl),f=this.options.authToken?.trim()||r3($);$.hash="";let W=new(sP())($.toString(),f?[`${JU}${f}`]:void 0);this.socket=W;let Z=!1;this.connectPromise=new Promise((Q,j)=>{let H=!1,X=setTimeout(()=>{if(H)return;H=!0,Z=!0,this.lastCloseError=new z0("hub_connect_timeout",`Timed out connecting to hub after ${u3}ms`),this.sawSocketClose=!1,this.connectPromise=void 0,this.socket=void 0;try{W.close()}catch{}j(this.lastCloseError)},u3);W.addEventListener("open",()=>{if(H)return;H=!0,clearTimeout(X),Q()}),W.addEventListener("error",(A)=>{if(H)return;H=!0,clearTimeout(X),this.lastCloseError=eP(A,$),this.sawSocketClose=!1,this.connectPromise=void 0,this.socket=void 0,j(this.lastCloseError)}),W.addEventListener("close",(A)=>{if(H)return;if(H=!0,clearTimeout(X),!Z)this.lastCloseError=g3(A),this.sawSocketClose=!0;this.connectPromise=void 0,this.socket=void 0,j(this.lastCloseError)})}),W.addEventListener("message",(Q)=>{this.handleFrame(JSON.parse(d3(Q)))}),W.addEventListener("close",(Q)=>{if(this.socket!==W)return;if(!Z)this.lastCloseError=g3(Q),this.sawSocketClose=!0;this.registered=!1;for(let j of this.pendingReplies.values())j.reject(this.lastCloseError);if(this.pendingReplies.clear(),this.connectPromise=void 0,this.socket=void 0,!this.closedByClient&&this.hasActiveSubscriptions())this.scheduleReconnect()}),await this.connectPromise,await this.command("client.register",{clientId:this.clientId,clientType:this.options.clientType??"core",displayName:this.options.displayName??"core",transport:"native",actorKind:"client",workspaceContext:{workspaceRoot:this.options.workspaceRoot,cwd:this.options.cwd}}),this.registered=!0;for(let Q of this.subscriptionCounts.keys())this.sendSubscriptionFrame("stream.subscribe",this.subscriptionSessionIdFromKey(Q));this.reconnectAttempt=0}subscribe($,f){let J=f?.sessionId?.trim()||void 0,W={listener:$,sessionId:J};return this.listeners.add(W),this.adjustSubscriptionCount(J,1),()=>{if(!this.listeners.delete(W))return;this.adjustSubscriptionCount(J,-1)}}async command($,f,J,W){let Z=0,Q=$!=="client.register"&&$!=="client.unregister";while(!0)try{return await this.commandOnce($,f,J,W)}catch(j){if(!Q||Z>=1||!await this.recoverLocalHubTransport(j))throw j;Z+=1}}async commandOnce($,f,J,W){await this.connect();let Z=aP("hubreq_"),Q=tP($,W?.timeoutMs),j=new Promise((X,A)=>{let Y=Q===null?void 0:setTimeout(()=>{if(!this.pendingReplies.delete(Z))return;A(new If($,"hub_command_timeout",`Hub command ${$} timed out after ${Q}ms (hub=${this.currentUrl}, requestId=${Z}, clientId=${this.clientId}). Check hub-daemon.log for matching command.start/command.slow entries, or run 'cline doctor fix' to restart the hub.`))},Q);this.pendingReplies.set(Z,{resolve:(V)=>{if(Y)clearTimeout(Y);X(V)},reject:(V)=>{if(Y)clearTimeout(Y);A(V)}})});try{this.sendFrame({kind:"command",envelope:{version:"v1",command:$,requestId:Z,clientId:this.clientId,sessionId:J,timeoutMs:Q,payload:f}})}catch(X){throw this.pendingReplies.delete(Z),X}let H=await j;if(!H.ok){if(H.error?.code===C1){let X=J??(typeof f?.sessionId==="string"?f.sessionId:void 0);throw new y$(X,H.error.message)}throw new If($,H.error?.code,H.error?.message??`Hub command ${$} failed`)}return H}async recoverLocalHubTransport($){if(!vW(this.currentUrl)||!cW($))return!1;if(this.recoveryPromise)return await this.recoveryPromise;return this.recoveryPromise=(async()=>{let f=await b1({workspaceRoot:this.options.workspaceRoot,cwd:this.options.cwd}).catch(()=>{return});if(!f)return!1;return this.currentUrl=f,this.close(),!0})().finally(()=>{this.recoveryPromise=void 0}),await this.recoveryPromise}hasActiveSubscriptions(){return this.subscriptionCounts.size>0}clearReconnectTimer(){if(!this.reconnectTimer)return;clearTimeout(this.reconnectTimer),this.reconnectTimer=void 0}scheduleReconnect(){if(this.reconnectTimer||this.closedByClient||!this.hasActiveSubscriptions())return;let $=Math.min(jU*2**this.reconnectAttempt,HU),f=Math.round($*(1-c3)+Math.random()*$*c3);this.reconnectTimer=setTimeout(()=>{this.reconnectTimer=void 0,this.reconnectSubscribedTransport()},f)}async reconnectSubscribedTransport(){if(this.closedByClient||!this.hasActiveSubscriptions())return;try{await this.connect(),this.reconnectAttempt=0}catch{if(!vW(this.currentUrl)){this.reconnectAttempt+=1,this.scheduleReconnect();return}try{let $=await b1({workspaceRoot:this.options.workspaceRoot,cwd:this.options.cwd});if($){this.currentUrl=$,await this.connect(),this.reconnectAttempt=0;return}}catch{}this.reconnectAttempt+=1,this.scheduleReconnect()}}close(){let $=this.socket;if(this.closedByClient=!0,this.clearReconnectTimer(),this.registered=!1,!$)return;this.lastCloseError=new z0("hub_connection_closed",gW),this.sawSocketClose=!1;for(let f of this.pendingReplies.values())f.reject(this.lastCloseError);this.pendingReplies.clear(),this.connectPromise=void 0,this.socket=void 0;try{$.close()}catch{}}async dispose(){if(this.socket?.readyState===1&&this.registered)try{await this.command("client.unregister",void 0,void 0,{timeoutMs:2000})}catch{}this.close()}sendFrame($){if(!this.socket||this.socket.readyState!==1){if(this.lastCloseError.code==="hub_connection_closed"&&!this.sawSocketClose)throw new z0("hub_connection_not_open","Hub connection is not open.");throw this.lastCloseError}this.socket.send(JSON.stringify($))}sendSubscriptionFrame($,f){this.sendFrame({kind:$,clientId:this.clientId,...f?{sessionId:f}:{}})}adjustSubscriptionCount($,f){let J=this.subscriptionKeyForSessionId($),W=(this.subscriptionCounts.get(J)??0)+f;if(W<=0){if(this.subscriptionCounts.delete(J),!this.hasActiveSubscriptions())this.clearReconnectTimer();if(f<0&&this.socket?.readyState===1)this.sendSubscriptionFrame("stream.unsubscribe",$);return}if(this.subscriptionCounts.set(J,W),f>0&&W===1&&this.socket?.readyState===1)this.sendSubscriptionFrame("stream.subscribe",$)}subscriptionKeyForSessionId($){return $??v3}subscriptionSessionIdFromKey($){return $===v3?void 0:$}handleFrame($){switch($.kind){case"reply":{let f=$.envelope.requestId;if(!f)return;let J=this.pendingReplies.get(f);if(!J)return;this.pendingReplies.delete(f),J.resolve($.envelope);return}case"event":for(let f of this.listeners){if(f.sessionId&&f.sessionId!==$.envelope.sessionId?.trim())continue;f.listener($.envelope)}return;case"command":case"stream.subscribe":case"stream.unsubscribe":return}}}function o$($){let f=new URL($);if(f.protocol==="http:")f.protocol="ws:";else if(f.protocol==="https:")f.protocol="wss:";return f.toString()}async function H$($,f){let J=new s0({url:$,authToken:f?.authToken,clientType:"hub-healthcheck",displayName:"hub healthcheck",workspaceRoot:f?.workspaceRoot,cwd:f?.cwd});try{return await J.connect(),!0}catch{return!1}finally{J.close()}}async function uW($,f){let J=o$($),W=await Q$(J);if(!W)return{status:"unreachable",url:J};let Z=t$(),Q=W.buildId?.trim();if(!Q||Q!==Z)return{status:"build_mismatch",url:J};if(f?.verifyConnection===!0&&!await H$(J,{workspaceRoot:f.workspaceRoot,cwd:f.cwd,authToken:f.authToken}))return{status:"unreachable",url:J};return{status:"compatible",url:J}}async function AU($){let f=Date.now()+$U;while(Date.now()<f){let J=await V0($.discoveryPath);if(J?.url){let W=await uW(J.url,{verifyConnection:!0,authToken:J.authToken});if(W.status==="compatible")return s$(W.url,J.authToken)}await new Promise((W)=>setTimeout(W,fU))}return}async function YU($){let f=Date.now()+ZU;while(Date.now()<f){if(!(await Q$($).catch(()=>{return}))?.url)return!0;await new Promise((W)=>setTimeout(W,QU))}return!1}function VU($,f){try{return o$($)===o$(f)}catch{return!1}}function BU($){return($&&typeof $==="object"&&Array.isArray($.sessions)?$.sessions:[]).some((J)=>{if(!J||typeof J!=="object")return!1;let W=J;if(W.status==="running"||W.status==="idle"||W.status==="pending")return!0;return Array.isArray(W.participants)&&W.participants.length>0})}async function KU($,f,J){let W=new s0({url:$,authToken:f,clientType:"hub-recovery-check",displayName:"hub recovery check",workspaceRoot:J?.workspaceRoot,cwd:J?.cwd});try{let Z=await W.command("session.list",{limit:500},void 0,{timeoutMs:WU});return!BU(Z.payload)}catch{return!1}finally{await W.dispose().catch(()=>{return})}}async function G8($={}){if($.endpoint?.trim()){let Z=await uW($.endpoint);return Z.status==="compatible"?Z.url:void 0}let f=G0(),J=await V0(f.discoveryPath);if(!J?.url)return;let W=await uW(J.url);if(W.status==="compatible")return s$(W.url,J.authToken);if(W.status==="build_mismatch")await b0(f.discoveryPath).catch(()=>{return});return}async function b1($={}){let f=await G8($);if(f&&await H$(f,{workspaceRoot:$.workspaceRoot,cwd:$.cwd}))return f;if($.endpoint?.trim())return;let J=G0();return await kf($.workspaceRoot??process.cwd()),await AU(J)}async function K8($,f){let J=new URL($),W=f?.trim()||r3(J);if(J.protocol==="ws:")J.protocol="http:";else if(J.protocol==="wss:")J.protocol="https:";return J.pathname="/shutdown",J.hash="",(await fetch(J,{method:"POST",headers:W?{authorization:`Bearer ${W}`}:void 0})).ok}async function lW(){let $=G0(),f=await V0($.discoveryPath);if(!f?.url)return!1;try{if(await K8(f.url,f.authToken))return!0}catch{}return!1}async function l4($){if(!vW($.url))return;let f=G0(),J=await V0(f.discoveryPath);if(!J?.url||!VU(J.url,$.url))return;if(!await KU(J.url,J.authToken,{workspaceRoot:$.workspaceRoot,cwd:$.cwd}))return;if(!await lW())return;if(!await YU(J.url))return;return await b0(f.discoveryPath).catch(()=>{return}),await b1({workspaceRoot:$.workspaceRoot,cwd:$.cwd})}function GU($,f){if($ instanceof Error)return $;if($&&typeof $==="object"&&"message"in $&&typeof $.message==="string"&&$.message.trim())return Error($.message.trim());let J=$&&typeof $==="object"&&"type"in $&&typeof $.type==="string"?$.type.trim():"";return Error(J?`Failed to connect to hub at ${f} (${J} event before socket open).`:`Failed to connect to hub at ${f}.`)}var PU="cline-hub-auth.";function UU($){return $.host!==void 0||$.port!==void 0||$.pathname!==void 0}function FU($,f){let J=new URL($),W=new URL(f);return J.search="",J.hash="",W.search="",W.hash="",J.toString()===W.toString()}async function RU($){let f=$.searchParams.get("authToken")?.trim();if($.searchParams.delete("authToken"),f)return f;let J=G0(),W=await V0(J.discoveryPath);if(W?.url&&FU($.toString(),W.url))return W.authToken;return}async function pW($={}){let f=j$($);if(!UU($)){let J=G0(),W=await V0(J.discoveryPath);if(W?.url)return W.url}return t0(f.host,f.port,f.pathname)}async function p4($){return await new Promise((f,J)=>{(async()=>{let W=new URL($),Z=await RU(W);W.hash="";let Q=new WebSocket(W.toString(),Z?[`${PU}${Z}`]:void 0),j=new Map,H=0;Q.addEventListener("open",()=>{f({send(X){let A=X.requestId??`hub-client-${++H}`;return new Promise((Y,V)=>{j.set(A,{resolve:Y,reject:V});let B={kind:"command",envelope:{...X,requestId:A}};Q.send(JSON.stringify(B))})},close(){Q.close()}})}),Q.addEventListener("message",(X)=>{let A=JSON.parse(String(X.data));if(A.kind==="reply"&&A.envelope.requestId){let Y=j.get(A.envelope.requestId);if(Y)j.delete(A.envelope.requestId),Y.resolve(A.envelope)}}),Q.addEventListener("close",()=>{for(let X of j.values())X.reject(Error("Hub connection closed"));j.clear()}),Q.addEventListener("error",(X)=>{J(GU(X,$))})})().catch(J)})}async function i3($){try{return(await p4($)).close(),!0}catch{return!1}}async function n3($,f){let J=await pW($),W=await p4(J);try{return await W.send({version:f.version??"v1",clientId:f.clientId??"hub-client",...f})}finally{W.close()}}function rW($){return $?JSON.parse(JSON.stringify($)):{}}function r4($){let f=$?.session&&typeof $.session==="object"?$.session:void 0;if(!f)return;let J=f.metadata&&typeof f.metadata==="object"?rW(f.metadata):void 0;return{sessionId:typeof f.sessionId==="string"?f.sessionId:"",parentSessionId:typeof J?.parentSessionId==="string"?J.parentSessionId:void 0,messagesPath:typeof J?.messagesPath==="string"?J.messagesPath:void 0,metadata:J}}function a3($,f){return $.error?.message??`hub command failed: ${f}`}function DU($){let f=rW($);if(typeof f.error==="string"&&f.error.trim())return{...f,error:f.error.trim()};let J=f.result&&typeof f.result==="object"?f.result:void 0;if(typeof J?.text==="string"&&J.text.trim())return{...f,error:J.text.trim()};let W=J?.error&&typeof J.error==="object"?J.error:void 0;if(typeof W?.message==="string"&&W.message.trim())return{...f,error:W.message.trim()};return f}function t3($){let f=$?.sessionId;return typeof f==="string"&&f.trim()?f.trim():void 0}function LU($){let f=$?.checkpoint;if(!f||typeof f!=="object"||Array.isArray(f))throw Error("hub checkpoint restore returned no checkpoint");let J=f;if(typeof J.ref!=="string"||typeof J.createdAt!=="number"||typeof J.runCount!=="number")throw Error("hub checkpoint restore returned an invalid checkpoint");return J}function OU($){let f=rW($.payload);if($.event==="schedule.execution_completed")return{sessionId:$.sessionId?.trim()||t3(f)||"",eventType:"schedule.execution.completed",payload:f};if($.event==="schedule.execution_failed")return{sessionId:$.sessionId?.trim()||t3(f)||"",eventType:"schedule.execution.failed",payload:f};let J=$.sessionId?.trim();if(!J)return;switch($.event){case"iteration.started":return{sessionId:J,eventType:"runtime.chat.iteration_start",payload:f};case"iteration.finished":return{sessionId:J,eventType:"runtime.chat.iteration_end",payload:f};case"assistant.delta":return{sessionId:J,eventType:"runtime.chat.text_delta",payload:f};case"usage.updated":return{sessionId:J,eventType:"runtime.chat.usage",payload:f};case"tool.started":return{sessionId:J,eventType:"runtime.chat.tool_call_start",payload:f};case"tool.finished":return{sessionId:J,eventType:"runtime.chat.tool_call_end",payload:f};case"approval.requested":return{sessionId:J,eventType:"approval.requested",payload:f};case"run.aborted":return{sessionId:J,eventType:"runtime.chat.aborted",payload:f};case"run.failed":return{sessionId:J,eventType:"runtime.chat.failed",payload:DU($.payload)};case"run.completed":return{sessionId:J,eventType:"runtime.chat.completed",payload:f};default:return}}class iW{options;client;metadataApplied=!1;constructor($){this.options=$;this.client=new s0({url:$.address,authToken:$.authToken,clientId:$.clientId,clientType:$.clientType??"hub-session-client",displayName:$.displayName??"hub session client",workspaceRoot:$.workspaceRoot,cwd:$.cwd})}async ensureMetadataApplied(){if(this.metadataApplied||!this.options.metadata){if(!this.options.metadata)await this.client.connect();return}await this.client.connect(),await this.client.command("client.update",{metadata:this.options.metadata}),this.metadataApplied=!0}async connect(){await this.ensureMetadataApplied()}close(){this.client.close()}async dispose(){await this.client.dispose()}async startRuntimeSession($){await this.ensureMetadataApplied();let f=await this.client.command("session.create",{workspaceRoot:$.workspaceRoot,cwd:$.cwd,sessionConfig:{providerId:$.provider,modelId:$.model,apiKey:$.apiKey,cwd:$.cwd??$.workspaceRoot,workspaceRoot:$.workspaceRoot,systemPrompt:$.systemPrompt??"",mode:$.mode??"act",rules:$.rules,maxIterations:$.maxIterations,timeoutSeconds:$.timeoutSeconds,enableTools:$.enableTools,enableSpawnAgent:$.enableSpawn!==!1,enableAgentTeams:$.enableTeams!==!1,disableMcpSettingsTools:$.disableMcpSettingsTools,missionLogIntervalSteps:$.missionStepInterval,missionLogIntervalMs:$.missionTimeIntervalMs},metadata:{source:$.source??"cli",provider:$.provider,model:$.model,enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,prompt:void 0,interactive:$.interactive!==!1},runtimeOptions:{mode:$.mode,systemPrompt:$.systemPrompt,maxIterations:$.maxIterations,timeoutSeconds:$.timeoutSeconds,enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,autoApproveTools:$.autoApproveTools,toolExecutors:$.toolExecutors,configExtensions:$.configExtensions},modelSelection:{provider:$.provider,model:$.model,apiKey:$.apiKey},toolPolicies:$.toolPolicies}),J=r4(f.payload);if(!J?.sessionId)throw Error("hub session create returned no session id");return{sessionId:J.sessionId,startResult:{sessionId:J.sessionId,manifestPath:"",messagesPath:J.messagesPath??""}}}async sendRuntimeSession($,f,J){return await this.ensureMetadataApplied(),{result:(await this.client.command("session.send_input",{prompt:f.prompt,mode:f.config.mode,attachments:f.attachments,delivery:f.delivery,timeoutSeconds:f.config.timeoutSeconds},$,J)).payload?.result}}async stopRuntimeSession($){return await this.ensureMetadataApplied(),await this.client.command("session.detach",{sessionId:$},$),{applied:!0}}async abortRuntimeSession($){return await this.ensureMetadataApplied(),await this.client.command("run.abort",{sessionId:$},$),{applied:!0}}async updateSession($){return await this.ensureMetadataApplied(),await this.client.command("session.update",{sessionId:$.sessionId,metadata:$.metadata},$.sessionId),{updated:!0}}async getSession($){await this.ensureMetadataApplied();let f;try{f=await this.client.command("session.get",void 0,$)}catch(J){if(q$(J))return;throw J}return r4(f.payload)}async readMessages($){let f=$.trim();if(!f)return[];await this.ensureMetadataApplied();let J=await this.client.command("session.messages",{sessionId:f},f);if(!J.ok)throw Error(a3(J,"session.messages"));let W=J.payload?.messages;return Array.isArray(W)?W:[]}async restore($){let f=$.sessionId.trim();if(!f)throw Error("sessionId is required");let J=$.restore?.messages!==!1;if(J&&!$.config)throw Error("config is required when restore.messages is true");await this.ensureMetadataApplied();let W=$.config,Z=await this.client.command("session.restore",{sessionId:f,checkpointRunCount:$.checkpointRunCount,restore:$.restore,...W?{workspaceRoot:W.workspaceRoot,cwd:W.cwd,sessionConfig:{providerId:W.provider,modelId:W.model,apiKey:W.apiKey,cwd:W.cwd??W.workspaceRoot,workspaceRoot:W.workspaceRoot,systemPrompt:W.systemPrompt??"",mode:W.mode??"act",rules:W.rules,maxIterations:W.maxIterations,enableTools:W.enableTools,enableSpawnAgent:W.enableSpawn!==!1,enableAgentTeams:W.enableTeams!==!1,disableMcpSettingsTools:W.disableMcpSettingsTools,missionLogIntervalSteps:W.missionStepInterval,missionLogIntervalMs:W.missionTimeIntervalMs},metadata:{source:W.source??"cli",provider:W.provider,model:W.model,enableTools:W.enableTools,enableSpawn:W.enableSpawn,enableTeams:W.enableTeams,prompt:void 0,interactive:W.interactive!==!1},runtimeOptions:{mode:W.mode,systemPrompt:W.systemPrompt,maxIterations:W.maxIterations,enableTools:W.enableTools,enableSpawn:W.enableSpawn,enableTeams:W.enableTeams,autoApproveTools:W.autoApproveTools,configExtensions:W.configExtensions},modelSelection:{provider:W.provider,model:W.model,apiKey:W.apiKey},toolPolicies:W.toolPolicies}:{}},f);if(!Z.ok)throw Error(a3(Z,"session.restore"));let Q=r4(Z.payload);if(J&&!Q?.sessionId)throw Error("hub checkpoint restore returned no session id");let j=Array.isArray(Z.payload?.messages)?Z.payload.messages:void 0,H=LU(Z.payload);return{sessionId:Q?.sessionId,startResult:Q?.sessionId?{sessionId:Q.sessionId,manifestPath:"",messagesPath:Q.messagesPath??""}:void 0,...j?{messages:j}:{},checkpoint:H}}async listSessions($){await this.ensureMetadataApplied();let f=await this.client.command("session.list",{limit:$?.limit??200});return(Array.isArray(f.payload?.sessions)?f.payload?.sessions:[]).map((W)=>r4({session:W})).filter((W)=>Boolean(W?.sessionId))}async deleteSession($,f=!0){return await this.ensureMetadataApplied(),(await this.client.command("session.delete",{sessionId:$,deleteCheckpointRefs:f})).payload?.deleted===!0}async respondToolApproval($){await this.ensureMetadataApplied(),await this.client.command("approval.respond",{approvalId:$.approvalId,approved:$.approved,payload:$.reason?{reason:$.reason}:void 0,responderClientId:$.responderClientId})}streamEvents($,f){let J=new Set(($.sessionIds??[]).map((Z)=>Z.trim()).filter(Boolean)),W=this.client.subscribe((Z)=>{let Q=OU(Z);if(!Q)return;if(J.size>0&&!J.has(Q.sessionId))return;f.onEvent?.(Q)});return this.ensureMetadataApplied().catch((Z)=>{f.onError?.(Z instanceof Error?Z:Error(String(Z)))}),W}streamTeamProgress($,f){let J=this.client.subscribe((W)=>{if(W.event!=="team.progress"||!W.payload)return;f.onProjection?.(W.payload)});return this.ensureMetadataApplied().catch((W)=>{f.onError?.(W instanceof Error?W:Error(String(W)))}),J}async createSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.create",$)).payload?.schedule}async listSchedules($){await this.ensureMetadataApplied();let f=await this.client.command("schedule.list");return Array.isArray(f.payload?.schedules)?f.payload?.schedules:[]}async getSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.get",{scheduleId:$})).payload?.schedule}async updateSchedule($,f){return await this.ensureMetadataApplied(),(await this.client.command("schedule.update",{scheduleId:$,...f})).payload?.schedule}async pauseSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.disable",{scheduleId:$})).payload?.schedule}async resumeSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.enable",{scheduleId:$})).payload?.schedule}async deleteSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.delete",{scheduleId:$})).payload?.deleted===!0}async triggerScheduleNow($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.trigger",{scheduleId:$})).payload?.execution}async listScheduleExecutions($,f){await this.ensureMetadataApplied();let J=await this.client.command("schedule.list_executions",{scheduleId:$,limit:f});return Array.isArray(J.payload?.executions)?J.payload?.executions:[]}async getScheduleStats(){return await this.ensureMetadataApplied(),(await this.client.command("schedule.stats")).payload?.stats}async getActiveScheduledExecutions(){await this.ensureMetadataApplied();let $=await this.client.command("schedule.active");return Array.isArray($.payload?.executions)?$.payload?.executions:[]}async getUpcomingScheduledRuns($){await this.ensureMetadataApplied();let f=await this.client.command("schedule.upcoming",{limit:$});return Array.isArray(f.payload?.upcoming)?f.payload?.upcoming:[]}}class nW{client;constructor($){this.client=new s0({url:$.address,authToken:$.authToken,clientId:$.clientId,clientType:$.clientType??"hub-ui-client",displayName:$.displayName??"hub ui client"})}async connect(){await this.client.connect()}close(){this.client.close()}async dispose(){await this.client.dispose()}getClientId(){return this.client.getClientId()}async sendNotify($){await this.client.command("ui.notify",$)}async sendShowWindow($){await this.client.command("ui.show_window",$??{})}async listClients(){let $=await this.client.command("client.list");return Array.isArray($.payload?.clients)?$.payload.clients:[]}async listSessions($=200){let f=await this.client.command("session.list",{limit:$});return Array.isArray(f.payload?.sessions)?f.payload.sessions:[]}subscribeUI($){return this.client.subscribe((f)=>{switch(f.event){case"ui.notify":$.onNotify?.(f.payload);break;case"ui.show_window":$.onShowWindow?.(f.payload);break;case"hub.client.registered":$.onClientRegistered?.(f.payload??{});break;case"hub.client.disconnected":$.onClientDisconnected?.(f.payload??{});break;case"session.created":$.onSessionCreated?.(f.payload??{});break;case"session.updated":$.onSessionUpdated?.(f.payload??{});break;case"session.detached":$.onSessionDetached?.(f.payload??{});break}})}}import{normalizeProviderId as cw}from"@cline/llms";var TB={};w(TB,{LocalRuntimeHost:()=>F$});import{readdirSync as Ew}from"node:fs";import{homedir as bw}from"node:os";import{isAbsolute as kw,join as N7,resolve as M7}from"node:path";import{captureSdkError as Df,createSessionId as Iw,isLikelyAuthError as xw,normalizeUserInput as mw}from"@cline/shared";import{setHomeDirIfUnset as gw}from"@cline/shared/storage";L0();var zj={};w(zj,{createContextCompactionPrepareTurn:()=>L8});import{createHandlerAsync as MU}from"@cline/llms";import{estimateTokens as aW}from"@cline/shared";var e3=200000,tW=0.9,$j=16384,sW=20000,s3=1024,o3=2000,fj=2000,Jj=8;function e$($,f){if($.length<=f)return $;return`${$.slice(0,f)}
280
280
  ...[truncated ${$.length-f} chars]`}function zU($){let f=oW($);if(typeof f==="string")return f;return f.map((J)=>{switch(J.type){case"text":return J.text;case"file":return`<file path="${J.path}">
package/dist/index.js CHANGED
@@ -434,7 +434,7 @@ ${JSON.stringify(W,null,2)}`}startClaimLeaseHeartbeat($){let f=Math.max(1000,Mat
434
434
  `)[0]?.trim())}function k$($){if(!$)return;let f={...$},J=z1(typeof f.title==="string"?f.title:void 0);if(J)f.title=J;else delete f.title;return Object.keys(f).length>0?f:void 0}function F2($){let f=k$($.metadata)??{},J=$.title!==void 0?z1($.title):XW($.prompt);if(J)f.title=J;return Object.keys(f).length>0?f:void 0}function AW($){let f=P2($);if(f)return{agent:"teammate",sessionId:f.rootSessionId,taskType:"team"};let J=_J($);if(J)return{agent:"subagent",sessionId:J.rootSessionId,taskType:"subagent_task"};return{agent:"lead",sessionId:$}}function YW($){return{version:1,updated_at:$.updatedAt,agent:$.context.agent,sessionId:$.context.sessionId,...$.context.taskType?{taskType:$.context.taskType}:{},messages:TJ($.messages),...$.systemPrompt?{system_prompt:$.systemPrompt}:{}}}function wj($,f,J){WD(QD($),{recursive:!0}),ZD($,`${JSON.stringify(YW({updatedAt:f,context:J,messages:[]}),null,2)}
435
435
  `,"utf8")}function Sj($,f){return _0.parse({version:1,session_id:$.sessionId,source:$.source,pid:$.pid,started_at:$.startedAt,ended_at:f?.endedAt??$.endedAt??void 0,exit_code:f?.exitCode??$.exitCode??void 0,status:f?.status??$.status,interactive:$.interactive,provider:$.provider,model:$.model,cwd:$.cwd,workspace_root:$.workspaceRoot,team_name:$.teamName??void 0,enable_tools:$.enableTools,enable_spawn:$.enableSpawn,enable_teams:$.enableTeams,prompt:$.prompt??void 0,metadata:f?.metadata??$.metadata??void 0,messages_path:$.messagesPath??void 0})}async function hj($,f,J){let W=0;while(!0){let Z=await $();if(Z===void 0)return{updated:!1};let Q=await f(Z);if(typeof Q==="object"&&Q!==null&&"updated"in Q&&Q.updated===!1){if(W+=1,W>=J)return Q;continue}return Q}}import{existsSync as AD}from"node:fs";import{readFile as YD}from"node:fs/promises";import{formatDisplayUserInput as Cj}from"@cline/shared";class R2{listeners=new Set;subscribe($,f){let J={listener:$,sessionId:f?.sessionId?.trim()||void 0};return this.listeners.add(J),()=>{this.listeners.delete(J)}}emit($){let f=$.payload.sessionId?.trim();for(let J of this.listeners){if(J.sessionId&&J.sessionId!==f)continue;J.listener($)}}get size(){return this.listeners.size}}async function I$($){let f=$?.trim();if(!f||!AD(f))return[];try{let J=(await YD(f,"utf8")).trim();if(!J)return[];let W=JSON.parse(J);if(Array.isArray(W))return Ej(W);if(W&&typeof W==="object"&&!Array.isArray(W)){let Z=W.messages;if(Array.isArray(Z))return Ej(Z)}return[]}catch{return[]}}function VD($){if($.role!=="user")return $;if(typeof $.content==="string")return{...$,content:Cj($.content)};return{...$,content:$.content.map((f)=>{if(f.type!=="text"||typeof f.text!=="string")return f;return{...f,text:Cj(f.text)}})}}function Ej($){return $.map(VD)}function VW($){return $?{...$}:void 0}async function bj($,f){if(!($.hookName==="tool_call"||!!$.parent_agent_id))return;await f.queueSpawnRequest($);let W=await f.upsertSubagentSessionFromHook($);if(!W)return;await f.appendSubagentHookAudit(W,$),await f.applySubagentStatus(W,$)}function D2($){if(typeof $!=="string")return;let f=$.trim();return f.length>0?f:void 0}function b0($){let f=D2($);if(!f)return;return f.toLowerCase()==="unknown"?void 0:f}function MJ($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function PD($){if(!$||typeof $!=="object"||Array.isArray($))return;return{...$}}function KW($){let f=$??200;return Number.isFinite(f)?Math.max(0,Math.floor(f)):200}function UD($){if($===0)return 0;return Math.min(Math.max($*2,20),2000)}function FD($){return $.isSubagent!==!0&&!D2($.parentSessionId)}function RD($){let f=$.match(/\d{13,}/g);if(!f||f.length===0)return 0;let J=0;for(let W of f){let Z=Number.parseInt(W,10);if(Number.isFinite(Z)&&Z>J)J=Z}return J}function GW($){return{sessionId:$.session_id,source:$.source,pid:$.pid,startedAt:$.started_at,endedAt:$.ended_at??null,exitCode:$.exit_code??null,status:$.status,interactive:$.interactive,provider:$.provider,model:$.model,cwd:$.cwd,workspaceRoot:$.workspace_root,teamName:$.team_name,enableTools:$.enable_tools,enableSpawn:$.enable_spawn,enableTeams:$.enable_teams,isSubagent:!1,prompt:$.prompt,metadata:$.metadata,messagesPath:$.messages_path,updatedAt:$.ended_at??$.started_at}}async function DD($){let f=KW($);if(f===0)return[];let J=mj(),Z=(await BD(J,{withFileTypes:!0}).catch(()=>[])).filter((j)=>j.isDirectory()).map((j)=>({entry:j,recency:RD(j.name.trim())})).sort((j,H)=>H.recency-j.recency||H.entry.name.localeCompare(j.entry.name));return(await Promise.all(Z.map(async({entry:j})=>{let H=j.name.trim();if(!H)return;let X=xj(J,H,`${H}.json`),A=await Ij(X,"utf8").catch(()=>{return});if(!A)return;let Y;try{Y=JSON.parse(A)}catch{return}let V=_0.safeParse(Y);if(!V.success)return;return GW(V.data)}))).filter((j)=>Boolean(j)).sort((j,H)=>H.startedAt.localeCompare(j.startedAt)).slice(0,f)}async function LD($,f,J){let W=KW(f);if(W===0)return await $.listSessions(0),[];let Z=J.includeSubagents?W:UD(W),Q=await $.listSessions(Z);return(J.includeSubagents?Q:Q.filter(FD)).slice(0,W)}function OD($){if(typeof $==="string")return $.trim();let f=[];for(let J of $){if(!J||typeof J!=="object")continue;let W=J;if(W.type!=="text")continue;let Z=W.text?.trim();if(Z)f.push(Z)}return f.join(`
436
436
  `).trim()}function kj($){return $.replace(/\s+/g," ").trim()}function zD($,f){if($.length<=f)return $;return`${$.slice(0,Math.max(0,f-3)).trimEnd()}...`}function _D($){for(let f of["user","assistant"])for(let J of $){if(J.role!==f)continue;let W=kj(OD(J.content));if(!W)continue;let Z=f==="user"?kj(KD(W)):W,Q=GD(Z.split(`
437
- `)[0]??Z);return zD(Q,50)}return}function TD($){let f=0;for(let J of $)f+=MJ(J.metrics?.cost)??0;return f}function ND($){let f,J;for(let W=$.length-1;W>=0;W-=1){let Z=$[W];if(!f)f=b0(Z.modelInfo?.provider);if(!J)J=b0(Z.modelInfo?.id);if(f&&J)break}return{provider:f,model:J}}function MD($){return b0($?.provider)??b0($?.provider&&typeof $.provider==="object"&&!Array.isArray($.provider)?$.provider.id:void 0)}function yD($){return b0($?.model)??b0($?.model&&typeof $.model==="object"&&!Array.isArray($.model)?$.model.id:void 0)}function BW($,f){let J=PD($.metadata),W=D2(f?.title)??D2(J?.title),Z=MJ(f?.totalCost)??MJ(J?.totalCost),Q=J||W!==void 0||Z!==void 0?{...J??{},...W!==void 0?{title:W}:{},...Z!==void 0?{totalCost:Z}:{}}:void 0;return{...$,provider:b0(f?.provider)??b0($.provider)??MD(J)??"",model:b0(f?.model)??b0($.model)??yD(J)??"",metadata:Q}}function qD($){let f=$.content;if(!Array.isArray(f))return!1;return f.some((J)=>!!J&&typeof J==="object"&&J.type==="tool-call")}function wD($,f){if($.status!=="running"||$.interactive!==!0)return!1;let J=f.at(-1);return J?.role==="assistant"&&!qD(J)}async function SD($,f){return await Promise.all(f.map(async(J)=>{if(J.status!=="running"||J.interactive!==!0)return J;let W=await $.readSessionMessages(J.sessionId);return wD(J,W)?{...J,status:"idle"}:J}))}async function hD($,f){return await Promise.all(f.map(async(J)=>{let W=BW(J),Z=Boolean(D2(W.metadata?.title)),Q=Boolean(b0(W.provider)),j=Boolean(b0(W.model)),H=MJ(W.metadata?.totalCost),X=H!==void 0&&H>0;if(Z&&Q&&j&&X)return W;let A=await $.readSessionMessages(J.sessionId);if(A.length===0)return W;let Y=ND(A),V=TD(A);return BW(J,{title:Z?void 0:_D(A),provider:Q?void 0:Y.provider,model:j?void 0:Y.model,totalCost:X||V<=0?void 0:V})}))}async function PW($,f={}){let J=KW(f.limit),W=f.includeSubagents===!0,Z=await LD($,J,{includeSubagents:W}),Q=f.includeManifestFallback===!0&&Z.length<J?await DD(Math.min(Math.max(J*2,100),500)):[],j=new Map;for(let A of[...Z,...Q]){if(j.has(A.sessionId))continue;j.set(A.sessionId,A)}let H=Q.length===0?Z:Array.from(j.values()).sort((A,Y)=>Y.startedAt.localeCompare(A.startedAt)).slice(0,J),X=await SD($,H);if(f.hydrate===!1)return X.map((A)=>BW(A));return await hD($,X)}async function CD($){let f=$.trim();if(!f)return;let J=xj(mj(),f,`${f}.json`),W=await Ij(J,"utf8").catch(()=>{return});if(!W)return;try{let Z=_0.safeParse(JSON.parse(W));return Z.success?Z.data.messages_path:void 0}catch{return}}async function ED($,f={}){let J=new Map;return await PW({listSessions:async(Z)=>{let Q=await $.listSessions(Z);J.clear();for(let j of Q)J.set(j.sessionId,j);return Q.map(U2)},readSessionMessages:async(Z)=>{let Q=J.get(Z)?.messagesPath??await CD(Z);return await I$(Q)}},f)}import{captureSdkError as AA}from"@cline/shared";import{createSessionId as SL,resolveHubCommandTimeoutMs as hL}from"@cline/shared";import{spawn as HL}from"node:child_process";import{closeSync as XL,mkdirSync as AL,openSync as YL}from"node:fs";import{basename as VL,dirname as BL,join as KL}from"node:path";import{fileURLToPath as GL}from"node:url";import{CLINE_RUN_AS_HUB_DAEMON_ENV as PL,isHubDaemonProcess as tj,withResolvedClineBuildEnv as UL}from"@cline/shared";import{createHash as bD,randomBytes as kD}from"node:crypto";import{existsSync as ID}from"node:fs";import{chmod as xD,mkdir as UW,readFile as dj,rm as FW,writeFile as lj}from"node:fs/promises";import{dirname as pj,join as RW}from"node:path";import{resolveClineDataDir as DW,resolveClineDir as Ik}from"@cline/shared/storage";var vj="0.0.44";var L2={name:"@cline/core",description:"Cline Core SDK for Node Runtime",version:vj,repository:{type:"git",url:"https://github.com/cline/cline",directory:"sdk/packages/core"},type:"module",types:"./dist/index.d.ts",main:"./dist/index.js",private:!1,publishConfig:{access:"public"},exports:{".":{types:"./dist/index.d.ts",import:"./dist/index.js"},"./hub":{types:"./dist/hub/index.d.ts",import:"./dist/hub/index.js"},"./hub/daemon-entry":{types:"./dist/hub/daemon/entry.d.ts",import:"./dist/hub/daemon/entry.js"},"./telemetry":{types:"./dist/services/telemetry/index.d.ts",import:"./dist/services/telemetry/index.js"}},scripts:{build:"bun run ./bun.mts && bun tsc -p tsconfig.build.json",typecheck:"bun tsc -p tsconfig.dev.json --noEmit && bun run typecheck:smoke","typecheck:smoke":"bun tsc -p tsconfig.smoke.json --noEmit",test:"bun run test:unit && bun run test:e2e","test:live":"vitest run --config vitest.config.ts src/extensions/context/compaction.live.test.ts","test:unit":"vitest run --config vitest.config.ts","test:e2e":"vitest run --config vitest.e2e.config.ts","verify:routines":"zsh -lc 'bunx vitest run src/cron/schedule-service.test.ts --config vitest.config.ts'","test:watch":"vitest --config vitest.config.ts"},dependencies:{"@cline/agents":"workspace:*","@cline/shared":"workspace:*","@cline/llms":"workspace:*","@modelcontextprotocol/sdk":"^1.29.0","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.214.0","@opentelemetry/exporter-logs-otlp-http":"^0.214.0","@opentelemetry/exporter-metrics-otlp-http":"^0.214.0","@opentelemetry/exporter-trace-otlp-http":"^0.214.0","@opentelemetry/resources":"^2.6.1","@opentelemetry/sdk-logs":"^0.214.0","@opentelemetry/sdk-metrics":"^2.6.1","@opentelemetry/sdk-trace-base":"^2.6.1","@opentelemetry/sdk-trace-node":"^2.6.1","@opentelemetry/semantic-conventions":"^1.40.0",jiti:"^2.7.0","node-machine-id":"^1.1.12",nanoid:"^5.1.7","simple-git":"3.36.0",ws:"^8.20.0",yaml:"^2.8.2",zod:"^4.3.6"},devDependencies:{"@types/ws":"^8.18.1"},engines:{node:">=22"},files:["dist","!dist/**/*.d.ts.map"]};var mD="CLINE_HUB_DISCOVERY_PATH",gD="CLINE_HUB_BUILD_ID",uj=30000,vD=15000,uD=100;function cD($){return $.replace(/[^a-zA-Z0-9_.-]+/g,"_")}function dD($){return bD("sha256").update($).digest("hex").slice(0,12)}function lD($){if(!Number.isInteger($)||!$||$<=0)return!1;try{return process.kill($,0),!0}catch(f){return f instanceof Error&&"code"in f?String(f.code)==="EPERM":!1}}function rj(){return kD(32).toString("hex")}function pD($){return new Promise((f)=>setTimeout(f,$))}function rD($){return`${$}.lock`}async function iD($){try{let f=JSON.parse(await dj(RW($,"owner.json"),"utf8"));if(typeof f.pid!=="number"||typeof f.acquiredAt!=="string")return;return{pid:f.pid,acquiredAt:f.acquiredAt}}catch{return}}async function cj($){await FW($,{recursive:!0,force:!0}).catch(()=>{return})}function Xf(){return process.env[gD]?.trim()||String(L2.version)}function _1($=process.argv[1]?.trim()||process.cwd()){let f=`hub-${dD($)}`,J=process.env[mD]?.trim()||RW(DW(),"locks","hub","owners",`${cD(f)}.json`);return{ownerId:f,discoveryPath:J}}function mk($=`hub-${Date.now().toString(36)}`){return _1($)}async function K0($){try{let f=JSON.parse(await dj($,"utf8"));if(typeof f.hubId!=="string"||typeof f.protocolVersion!=="string"||typeof f.authToken!=="string"||typeof f.host!=="string"||typeof f.port!=="number"||typeof f.url!=="string"||typeof f.startedAt!=="string"||typeof f.updatedAt!=="string")return;return{hubId:f.hubId,protocolVersion:f.protocolVersion,coreVersion:typeof f.coreVersion==="string"?f.coreVersion:void 0,buildId:typeof f.buildId==="string"?f.buildId:void 0,authToken:f.authToken,host:f.host,port:f.port,url:f.url,pid:typeof f.pid==="number"?f.pid:void 0,startedAt:f.startedAt,updatedAt:f.updatedAt}}catch{return}}async function ij($,f){await UW(pj($),{recursive:!0}),await FW($,{force:!0}).catch(()=>{return}),await lj($,`${JSON.stringify(f,null,2)}
437
+ `)[0]??Z);return zD(Q,50)}return}function TD($){let f=0;for(let J of $)f+=MJ(J.metrics?.cost)??0;return f}function ND($){let f,J;for(let W=$.length-1;W>=0;W-=1){let Z=$[W];if(!f)f=b0(Z.modelInfo?.provider);if(!J)J=b0(Z.modelInfo?.id);if(f&&J)break}return{provider:f,model:J}}function MD($){return b0($?.provider)??b0($?.provider&&typeof $.provider==="object"&&!Array.isArray($.provider)?$.provider.id:void 0)}function yD($){return b0($?.model)??b0($?.model&&typeof $.model==="object"&&!Array.isArray($.model)?$.model.id:void 0)}function BW($,f){let J=PD($.metadata),W=D2(f?.title)??D2(J?.title),Z=MJ(f?.totalCost)??MJ(J?.totalCost),Q=J||W!==void 0||Z!==void 0?{...J??{},...W!==void 0?{title:W}:{},...Z!==void 0?{totalCost:Z}:{}}:void 0;return{...$,provider:b0(f?.provider)??b0($.provider)??MD(J)??"",model:b0(f?.model)??b0($.model)??yD(J)??"",metadata:Q}}function qD($){let f=$.content;if(!Array.isArray(f))return!1;return f.some((J)=>!!J&&typeof J==="object"&&J.type==="tool-call")}function wD($,f){if($.status!=="running"||$.interactive!==!0)return!1;let J=f.at(-1);return J?.role==="assistant"&&!qD(J)}async function SD($,f){return await Promise.all(f.map(async(J)=>{if(J.status!=="running"||J.interactive!==!0)return J;let W=await $.readSessionMessages(J.sessionId);return wD(J,W)?{...J,status:"idle"}:J}))}async function hD($,f){return await Promise.all(f.map(async(J)=>{let W=BW(J),Z=Boolean(D2(W.metadata?.title)),Q=Boolean(b0(W.provider)),j=Boolean(b0(W.model)),H=MJ(W.metadata?.totalCost),X=H!==void 0&&H>0;if(Z&&Q&&j&&X)return W;let A=await $.readSessionMessages(J.sessionId);if(A.length===0)return W;let Y=ND(A),V=TD(A);return BW(J,{title:Z?void 0:_D(A),provider:Q?void 0:Y.provider,model:j?void 0:Y.model,totalCost:X||V<=0?void 0:V})}))}async function PW($,f={}){let J=KW(f.limit),W=f.includeSubagents===!0,Z=await LD($,J,{includeSubagents:W}),Q=f.includeManifestFallback===!0&&Z.length<J?await DD(Math.min(Math.max(J*2,100),500)):[],j=new Map;for(let A of[...Z,...Q]){if(j.has(A.sessionId))continue;j.set(A.sessionId,A)}let H=Q.length===0?Z:Array.from(j.values()).sort((A,Y)=>Y.startedAt.localeCompare(A.startedAt)).slice(0,J),X=await SD($,H);if(f.hydrate===!1)return X.map((A)=>BW(A));return await hD($,X)}async function CD($){let f=$.trim();if(!f)return;let J=xj(mj(),f,`${f}.json`),W=await Ij(J,"utf8").catch(()=>{return});if(!W)return;try{let Z=_0.safeParse(JSON.parse(W));return Z.success?Z.data.messages_path:void 0}catch{return}}async function ED($,f={}){let J=new Map;return await PW({listSessions:async(Z)=>{let Q=await $.listSessions(Z);J.clear();for(let j of Q)J.set(j.sessionId,j);return Q.map(U2)},readSessionMessages:async(Z)=>{let Q=J.get(Z)?.messagesPath??await CD(Z);return await I$(Q)}},f)}import{captureSdkError as AA}from"@cline/shared";import{createSessionId as SL,resolveHubCommandTimeoutMs as hL}from"@cline/shared";import{spawn as HL}from"node:child_process";import{closeSync as XL,mkdirSync as AL,openSync as YL}from"node:fs";import{basename as VL,dirname as BL,join as KL}from"node:path";import{fileURLToPath as GL}from"node:url";import{CLINE_RUN_AS_HUB_DAEMON_ENV as PL,isHubDaemonProcess as tj,withResolvedClineBuildEnv as UL}from"@cline/shared";import{createHash as bD,randomBytes as kD}from"node:crypto";import{existsSync as ID}from"node:fs";import{chmod as xD,mkdir as UW,readFile as dj,rm as FW,writeFile as lj}from"node:fs/promises";import{dirname as pj,join as RW}from"node:path";import{resolveClineDataDir as DW,resolveClineDir as Ik}from"@cline/shared/storage";var vj="0.0.45";var L2={name:"@cline/core",description:"Cline Core SDK for Node Runtime",version:vj,repository:{type:"git",url:"https://github.com/cline/cline",directory:"sdk/packages/core"},type:"module",types:"./dist/index.d.ts",main:"./dist/index.js",private:!1,publishConfig:{access:"public"},exports:{".":{types:"./dist/index.d.ts",import:"./dist/index.js"},"./hub":{types:"./dist/hub/index.d.ts",import:"./dist/hub/index.js"},"./hub/daemon-entry":{types:"./dist/hub/daemon/entry.d.ts",import:"./dist/hub/daemon/entry.js"},"./telemetry":{types:"./dist/services/telemetry/index.d.ts",import:"./dist/services/telemetry/index.js"}},scripts:{build:"bun run ./bun.mts && bun tsc -p tsconfig.build.json",typecheck:"bun tsc -p tsconfig.dev.json --noEmit && bun run typecheck:smoke","typecheck:smoke":"bun tsc -p tsconfig.smoke.json --noEmit",test:"bun run test:unit && bun run test:e2e","test:live":"vitest run --config vitest.config.ts src/extensions/context/compaction.live.test.ts","test:unit":"vitest run --config vitest.config.ts","test:e2e":"vitest run --config vitest.e2e.config.ts","verify:routines":"zsh -lc 'bunx vitest run src/cron/schedule-service.test.ts --config vitest.config.ts'","test:watch":"vitest --config vitest.config.ts"},dependencies:{"@cline/agents":"workspace:*","@cline/shared":"workspace:*","@cline/llms":"workspace:*","@modelcontextprotocol/sdk":"^1.29.0","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.214.0","@opentelemetry/exporter-logs-otlp-http":"^0.214.0","@opentelemetry/exporter-metrics-otlp-http":"^0.214.0","@opentelemetry/exporter-trace-otlp-http":"^0.214.0","@opentelemetry/resources":"^2.6.1","@opentelemetry/sdk-logs":"^0.214.0","@opentelemetry/sdk-metrics":"^2.6.1","@opentelemetry/sdk-trace-base":"^2.6.1","@opentelemetry/sdk-trace-node":"^2.6.1","@opentelemetry/semantic-conventions":"^1.40.0",jiti:"^2.7.0","node-machine-id":"^1.1.12",nanoid:"^5.1.7","simple-git":"3.36.0",ws:"^8.20.0",yaml:"^2.8.2",zod:"^4.3.6"},devDependencies:{"@types/ws":"^8.18.1"},engines:{node:">=22"},files:["dist","!dist/**/*.d.ts.map"]};var mD="CLINE_HUB_DISCOVERY_PATH",gD="CLINE_HUB_BUILD_ID",uj=30000,vD=15000,uD=100;function cD($){return $.replace(/[^a-zA-Z0-9_.-]+/g,"_")}function dD($){return bD("sha256").update($).digest("hex").slice(0,12)}function lD($){if(!Number.isInteger($)||!$||$<=0)return!1;try{return process.kill($,0),!0}catch(f){return f instanceof Error&&"code"in f?String(f.code)==="EPERM":!1}}function rj(){return kD(32).toString("hex")}function pD($){return new Promise((f)=>setTimeout(f,$))}function rD($){return`${$}.lock`}async function iD($){try{let f=JSON.parse(await dj(RW($,"owner.json"),"utf8"));if(typeof f.pid!=="number"||typeof f.acquiredAt!=="string")return;return{pid:f.pid,acquiredAt:f.acquiredAt}}catch{return}}async function cj($){await FW($,{recursive:!0,force:!0}).catch(()=>{return})}function Xf(){return process.env[gD]?.trim()||String(L2.version)}function _1($=process.argv[1]?.trim()||process.cwd()){let f=`hub-${dD($)}`,J=process.env[mD]?.trim()||RW(DW(),"locks","hub","owners",`${cD(f)}.json`);return{ownerId:f,discoveryPath:J}}function mk($=`hub-${Date.now().toString(36)}`){return _1($)}async function K0($){try{let f=JSON.parse(await dj($,"utf8"));if(typeof f.hubId!=="string"||typeof f.protocolVersion!=="string"||typeof f.authToken!=="string"||typeof f.host!=="string"||typeof f.port!=="number"||typeof f.url!=="string"||typeof f.startedAt!=="string"||typeof f.updatedAt!=="string")return;return{hubId:f.hubId,protocolVersion:f.protocolVersion,coreVersion:typeof f.coreVersion==="string"?f.coreVersion:void 0,buildId:typeof f.buildId==="string"?f.buildId:void 0,authToken:f.authToken,host:f.host,port:f.port,url:f.url,pid:typeof f.pid==="number"?f.pid:void 0,startedAt:f.startedAt,updatedAt:f.updatedAt}}catch{return}}async function ij($,f){await UW(pj($),{recursive:!0}),await FW($,{force:!0}).catch(()=>{return}),await lj($,`${JSON.stringify(f,null,2)}
438
438
  `,{encoding:"utf8",mode:384}),await xD($,384)}async function e0($){await FW($,{force:!0}).catch(()=>{return})}async function nj($,f){let J=rD($);await UW(pj(J),{recursive:!0});let W=Date.now()+vD;while(!0)try{await UW(J,{recursive:!1}),await lj(RW(J,"owner.json"),`${JSON.stringify({pid:process.pid,acquiredAt:new Date().toISOString()},null,2)}
439
439
  `,"utf8");try{return await f()}finally{await cj(J)}}catch(Z){if((Z instanceof Error&&"code"in Z?String(Z.code):"")!=="EEXIST")throw Z;let j=await iD(J),H=j?Date.now()-Date.parse(j.acquiredAt):uj+1;if(!j||!lD(j.pid)||H>uj){await cj(J);continue}if(Date.now()>=W)throw Error(`Timed out waiting for hub startup lock ${J}`);await pD(uD)}}async function x$($){try{let f=await fetch(nD($));if(!f.ok)return;return await f.json()}catch{return}}function Y$($,f,J="/hub"){return new URL(`ws://${$}:${f}${J}`).toString()}function nD($){let f=new URL($);return f.protocol=f.protocol==="wss:"?"https:":"http:",f.pathname="/health",f.search="",f.toString()}function gk($){return ID($)}import{CLINE_HUB_DEV_PORT as aD,CLINE_HUB_PORT as tD,resolveClineBuildEnv as sD}from"@cline/shared";var oD="CLINE_HUB_HOST",eD="CLINE_HUB_PORT",$L="CLINE_HUB_PATHNAME",fL="127.0.0.1",JL=tD,WL="/hub";function aj($){return sD($)==="development"?aD:JL}function ZL($={}){return($.env??process.env)[oD]?.trim()||fL}function yJ($={}){let J=($.env??process.env)[eD]?.trim();if(!J)return aj($);let W=Number.parseInt(J,10);if(!Number.isInteger(W)||W<1||W>65535)return aj($);return W}function QL($={}){return($.env??process.env)[$L]?.trim()||WL}function m$($={},f={}){return{host:$.host??ZL(f),port:$.port??yJ(f),pathname:$.pathname??QL(f)}}var jL="shared:cline";function pk($){let f=R1($.trim());return _1(`workspace:${f||$.trim()}`)}function R0($=jL){return _1($)}var FL=8000,RL=200,DL=3000,LL=100,OL=[100,250,500,1000,2000],zL="--cline-hub-daemon";function _L($){return[...$.host?["--host",$.host]:[],...typeof $.port==="number"?["--port",String($.port)]:[],...$.pathname?["--pathname",$.pathname]:[]]}function TL(){try{let $=KL(DW(),"logs","hub-daemon.log");return AL(BL($),{recursive:!0}),{fd:YL($,"a"),logPath:$}}catch{return}}function O2($){let f=$.buildId?.trim();return!!f&&f===Xf()}async function T1($){try{return await x$($)}catch{return}}async function NL($,f){let J=Date.now()+f;while(Date.now()<J){if(!(await T1($))?.url)return!0;await new Promise((Z)=>setTimeout(Z,LL))}return!1}async function z2($,f){if(O2($))return;if(await LW($.url,$.authToken).catch(()=>!1),$.pid)try{process.kill($.pid,"SIGTERM")}catch{}await NL($.url,DL),await e0(f).catch(()=>{return})}function ML(){let $=import.meta.url.endsWith(".ts")?"ts":"js";return GL(new URL(`./entry.${$}`,import.meta.url))}function yL($,f){let J=ML(),W=process.execPath?.trim();if(!W)throw Error("unable to resolve runtime executable for hub daemon");let Z=VL(W).toLowerCase().includes("bun"),Q=J.startsWith("/$bunfs/"),j=Z&&J.toLowerCase().endsWith(".ts"),H=Q?[zL]:[...j?["--conditions=development"]:[],J];return{launcher:W,args:[...H,"--cwd",$,..._L(f)],cwd:$,env:{...UL(process.env),CLINE_NO_INTERACTIVE:"1",[PL]:"1"}}}function qL($){if(!$||typeof $!=="object")return!1;if(("code"in $?$.code:void 0)==="ETXTBSY")return!0;let J="message"in $?$.message:void 0;return typeof J==="string"&&J.includes("ETXTBSY")}function wL($,f={}){if(tj())return;let J=yL($,f),W=TL();try{HL(J.launcher,J.args,{detached:!0,stdio:W?["ignore",W.fd,W.fd]:"ignore",env:J.env,cwd:J.cwd}).unref()}finally{if(W)XL(W.fd)}}async function qJ($,f={}){for(let J=0;;J++)try{wL($,f);return}catch(W){let Z=OL[J];if(!qL(W)||Z===void 0)throw W;await new Promise((Q)=>setTimeout(Q,Z))}}function sj($,f={}){if(tj())return;let J=R0(),W=f.port!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),Z=m$(f),Q=Y$(Z.host,Z.port,Z.pathname);K0(J.discoveryPath).then(async(j)=>{if(j?.url){let Y=await T1(j.url);if(Y?.url&&O2(Y)&&await g$(Y.url,{authToken:j.authToken}))return;if(Y?.url)await z2({...Y,authToken:j.authToken},J.discoveryPath);else await e0(J.discoveryPath).catch(()=>{return})}let H=await T1(Q);if(H?.url)await z2(H,J.discoveryPath);let A=!W&&Z.port!==0?{...Z,port:0}:Z;await qJ($,A)}).catch(()=>{})}async function JI($,f={}){let J=R0(),W=f.host!==void 0||f.port!==void 0||f.pathname!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),Z=f.port!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),Q=m$(f),j=Y$(Q.host,Q.port,Q.pathname),H=(K)=>{if(!W)Af(K.url,K.authToken);return K},X=await K0(J.discoveryPath);if(X?.url){let K=await T1(X.url);if(K?.url&&O2(K)&&await g$(K.url,{authToken:X.authToken}))return H({url:K.url,authToken:X.authToken});if(K?.url)await z2({...K,authToken:X.authToken},J.discoveryPath);else await e0(J.discoveryPath).catch(()=>{return})}let A=await T1(j);if(A?.url)await z2(A,J.discoveryPath);let V=!Z&&Q.port!==0?{...Q,port:0}:Q;await qJ($,V);let B=Date.now()+FL;while(Date.now()<B){let K=await K0(J.discoveryPath);if(K?.url){let R=await T1(K.url);if(R?.url&&O2(R)&&await g$(R.url,{authToken:K.authToken}))return H({url:R.url,authToken:K.authToken})}let G=await T1(j);if(G?.url&&!O2(G))await z2(G,J.discoveryPath);await new Promise((R)=>setTimeout(R,RL))}throw Error("Timed out waiting for detached hub startup.")}function CL(){let $=globalThis.WebSocket;if(!$)throw Error("Global WebSocket is not available in this runtime. Node 22+ is required for hub mode.");return $}function JH($){if(typeof $==="string")return $;if($ instanceof Uint8Array)return Buffer.from($).toString();if($ instanceof ArrayBuffer)return Buffer.from($).toString();if(Array.isArray($))return Buffer.concat($.map((f)=>Buffer.from(f))).toString();if($&&typeof $==="object"&&"data"in $&&typeof $.data<"u")return JH($.data);return String($)}function EL($){if(typeof $==="string")return $;if($ instanceof Uint8Array)return Buffer.from($).toString("utf8");if($ instanceof ArrayBuffer)return Buffer.from($).toString("utf8");return""}function oj($){let f=$,J=EL(f.reason);return new k0("hub_connection_closed",f.code||J?`Hub connection closed (code=${f.code??0}${J?`, reason=${J}`:""})`:OW,{closeCode:f.code,closeReason:J||void 0})}function bL($,f){if($ instanceof k0)return $;if($ instanceof Error)return new k0("hub_connect_failed",$.message);if($&&typeof $==="object"&&"error"in $&&$.error instanceof Error)return new k0("hub_connect_failed",$.error.message);let J=$&&typeof $==="object"&&"message"in $&&typeof $.message==="string"?$.message.trim():"";if(J)return new k0("hub_connect_failed",J);let W=$&&typeof $==="object"&&"type"in $&&typeof $.type==="string"?$.type.trim():"";return new k0("hub_connect_failed",W?`Failed to connect to hub at ${f.toString()} (${W} event before socket open).`:`Failed to connect to hub at ${f.toString()}.`)}var kL=8000,IL=200,ej="*",$H=8000,xL="cline-hub-auth.",WH=new Map,ZH=new Set,mL=3000,gL=3000,vL=100,OW="Hub connection closed",uL=250,cL=5000,fH=0.5;class k0 extends Error{code;details;constructor($,f,J){super(f);this.code=$;this.details=J;this.name="HubTransportError"}}function dL($){return $ instanceof k0}class wJ extends Error{command;code;constructor($,f,J){super(J);this.command=$;this.code=f;this.name="HubCommandError"}}function QH($,f){return $ instanceof wJ&&$.code==="hub_command_timeout"&&(f===void 0||$.command===f)}function jH($){let f=$.searchParams.get("authToken")?.trim();if($.searchParams.delete("authToken"),f)return f;let J=TW($.toString());return J?WH.get(J):void 0}function lL($){try{let J=new URL($).hostname.toLowerCase().replace(/^\[|\]$/g,"");return J==="localhost"||J==="127.0.0.1"||J==="::1"}catch{return!1}}function TW($){if(!lL($))return;let f=new URL(Yf($));return f.search="",f.hash="",f.toString()}function zW($){let f=TW($);return!!f&&ZH.has(f)}function Af($,f){let J=TW($);if(J){if(ZH.add(J),f?.trim())WH.set(J,f)}return $}class V${options;socket;connectPromise;clientId;currentUrl;recoveryPromise;pendingReplies=new Map;listeners=new Set;subscriptionCounts=new Map;reconnectTimer;reconnectAttempt=0;closedByClient=!1;lastCloseError=new k0("hub_connection_closed",OW);sawSocketClose=!1;registered=!1;constructor($){this.options=$;this.clientId=$.clientId??`core-${Math.random().toString(36).slice(2,10)}-${Date.now().toString(36)}`,this.currentUrl=$.url}getClientId(){return this.clientId}getUrl(){return this.currentUrl}async connect(){if(this.socket&&(this.socket.readyState===1||this.socket.readyState===0))return this.connectPromise??Promise.resolve();this.closedByClient=!1,this.clearReconnectTimer();let $=new URL(this.currentUrl),f=this.options.authToken?.trim()||jH($);$.hash="";let W=new(CL())($.toString(),f?[`${xL}${f}`]:void 0);this.socket=W;let Z=!1;this.connectPromise=new Promise((Q,j)=>{let H=!1,X=setTimeout(()=>{if(H)return;H=!0,Z=!0,this.lastCloseError=new k0("hub_connect_timeout",`Timed out connecting to hub after ${$H}ms`),this.sawSocketClose=!1,this.connectPromise=void 0,this.socket=void 0;try{W.close()}catch{}j(this.lastCloseError)},$H);W.addEventListener("open",()=>{if(H)return;H=!0,clearTimeout(X),Q()}),W.addEventListener("error",(A)=>{if(H)return;H=!0,clearTimeout(X),this.lastCloseError=bL(A,$),this.sawSocketClose=!1,this.connectPromise=void 0,this.socket=void 0,j(this.lastCloseError)}),W.addEventListener("close",(A)=>{if(H)return;if(H=!0,clearTimeout(X),!Z)this.lastCloseError=oj(A),this.sawSocketClose=!0;this.connectPromise=void 0,this.socket=void 0,j(this.lastCloseError)})}),W.addEventListener("message",(Q)=>{this.handleFrame(JSON.parse(JH(Q)))}),W.addEventListener("close",(Q)=>{if(this.socket!==W)return;if(!Z)this.lastCloseError=oj(Q),this.sawSocketClose=!0;this.registered=!1;for(let j of this.pendingReplies.values())j.reject(this.lastCloseError);if(this.pendingReplies.clear(),this.connectPromise=void 0,this.socket=void 0,!this.closedByClient&&this.hasActiveSubscriptions())this.scheduleReconnect()}),await this.connectPromise,await this.command("client.register",{clientId:this.clientId,clientType:this.options.clientType??"core",displayName:this.options.displayName??"core",transport:"native",actorKind:"client",workspaceContext:{workspaceRoot:this.options.workspaceRoot,cwd:this.options.cwd}}),this.registered=!0;for(let Q of this.subscriptionCounts.keys())this.sendSubscriptionFrame("stream.subscribe",this.subscriptionSessionIdFromKey(Q));this.reconnectAttempt=0}subscribe($,f){let J=f?.sessionId?.trim()||void 0,W={listener:$,sessionId:J};return this.listeners.add(W),this.adjustSubscriptionCount(J,1),()=>{if(!this.listeners.delete(W))return;this.adjustSubscriptionCount(J,-1)}}async command($,f,J,W){let Z=0,Q=$!=="client.register"&&$!=="client.unregister";while(!0)try{return await this.commandOnce($,f,J,W)}catch(j){if(!Q||Z>=1||!await this.recoverLocalHubTransport(j))throw j;Z+=1}}async commandOnce($,f,J,W){await this.connect();let Z=SL("hubreq_"),Q=hL($,W?.timeoutMs),j=new Promise((X,A)=>{let Y=Q===null?void 0:setTimeout(()=>{if(!this.pendingReplies.delete(Z))return;A(new wJ($,"hub_command_timeout",`Hub command ${$} timed out after ${Q}ms (hub=${this.currentUrl}, requestId=${Z}, clientId=${this.clientId}). Check hub-daemon.log for matching command.start/command.slow entries, or run 'cline doctor fix' to restart the hub.`))},Q);this.pendingReplies.set(Z,{resolve:(V)=>{if(Y)clearTimeout(Y);X(V)},reject:(V)=>{if(Y)clearTimeout(Y);A(V)}})});try{this.sendFrame({kind:"command",envelope:{version:"v1",command:$,requestId:Z,clientId:this.clientId,sessionId:J,timeoutMs:Q,payload:f}})}catch(X){throw this.pendingReplies.delete(Z),X}let H=await j;if(!H.ok){if(H.error?.code===Q2){let X=J??(typeof f?.sessionId==="string"?f.sessionId:void 0);throw new U1(X,H.error.message)}throw new wJ($,H.error?.code,H.error?.message??`Hub command ${$} failed`)}return H}async recoverLocalHubTransport($){if(!zW(this.currentUrl)||!dL($))return!1;if(this.recoveryPromise)return await this.recoveryPromise;return this.recoveryPromise=(async()=>{let f=await _2({workspaceRoot:this.options.workspaceRoot,cwd:this.options.cwd}).catch(()=>{return});if(!f)return!1;return this.currentUrl=f,this.close(),!0})().finally(()=>{this.recoveryPromise=void 0}),await this.recoveryPromise}hasActiveSubscriptions(){return this.subscriptionCounts.size>0}clearReconnectTimer(){if(!this.reconnectTimer)return;clearTimeout(this.reconnectTimer),this.reconnectTimer=void 0}scheduleReconnect(){if(this.reconnectTimer||this.closedByClient||!this.hasActiveSubscriptions())return;let $=Math.min(uL*2**this.reconnectAttempt,cL),f=Math.round($*(1-fH)+Math.random()*$*fH);this.reconnectTimer=setTimeout(()=>{this.reconnectTimer=void 0,this.reconnectSubscribedTransport()},f)}async reconnectSubscribedTransport(){if(this.closedByClient||!this.hasActiveSubscriptions())return;try{await this.connect(),this.reconnectAttempt=0}catch{if(!zW(this.currentUrl)){this.reconnectAttempt+=1,this.scheduleReconnect();return}try{let $=await _2({workspaceRoot:this.options.workspaceRoot,cwd:this.options.cwd});if($){this.currentUrl=$,await this.connect(),this.reconnectAttempt=0;return}}catch{}this.reconnectAttempt+=1,this.scheduleReconnect()}}close(){let $=this.socket;if(this.closedByClient=!0,this.clearReconnectTimer(),this.registered=!1,!$)return;this.lastCloseError=new k0("hub_connection_closed",OW),this.sawSocketClose=!1;for(let f of this.pendingReplies.values())f.reject(this.lastCloseError);this.pendingReplies.clear(),this.connectPromise=void 0,this.socket=void 0;try{$.close()}catch{}}async dispose(){if(this.socket?.readyState===1&&this.registered)try{await this.command("client.unregister",void 0,void 0,{timeoutMs:2000})}catch{}this.close()}sendFrame($){if(!this.socket||this.socket.readyState!==1){if(this.lastCloseError.code==="hub_connection_closed"&&!this.sawSocketClose)throw new k0("hub_connection_not_open","Hub connection is not open.");throw this.lastCloseError}this.socket.send(JSON.stringify($))}sendSubscriptionFrame($,f){this.sendFrame({kind:$,clientId:this.clientId,...f?{sessionId:f}:{}})}adjustSubscriptionCount($,f){let J=this.subscriptionKeyForSessionId($),W=(this.subscriptionCounts.get(J)??0)+f;if(W<=0){if(this.subscriptionCounts.delete(J),!this.hasActiveSubscriptions())this.clearReconnectTimer();if(f<0&&this.socket?.readyState===1)this.sendSubscriptionFrame("stream.unsubscribe",$);return}if(this.subscriptionCounts.set(J,W),f>0&&W===1&&this.socket?.readyState===1)this.sendSubscriptionFrame("stream.subscribe",$)}subscriptionKeyForSessionId($){return $??ej}subscriptionSessionIdFromKey($){return $===ej?void 0:$}handleFrame($){switch($.kind){case"reply":{let f=$.envelope.requestId;if(!f)return;let J=this.pendingReplies.get(f);if(!J)return;this.pendingReplies.delete(f),J.resolve($.envelope);return}case"event":for(let f of this.listeners){if(f.sessionId&&f.sessionId!==$.envelope.sessionId?.trim())continue;f.listener($.envelope)}return;case"command":case"stream.subscribe":case"stream.unsubscribe":return}}}function Yf($){let f=new URL($);if(f.protocol==="http:")f.protocol="ws:";else if(f.protocol==="https:")f.protocol="wss:";return f.toString()}async function g$($,f){let J=new V$({url:$,authToken:f?.authToken,clientType:"hub-healthcheck",displayName:"hub healthcheck",workspaceRoot:f?.workspaceRoot,cwd:f?.cwd});try{return await J.connect(),!0}catch{return!1}finally{J.close()}}async function _W($,f){let J=Yf($),W=await x$(J);if(!W)return{status:"unreachable",url:J};let Z=Xf(),Q=W.buildId?.trim();if(!Q||Q!==Z)return{status:"build_mismatch",url:J};if(f?.verifyConnection===!0&&!await g$(J,{workspaceRoot:f.workspaceRoot,cwd:f.cwd,authToken:f.authToken}))return{status:"unreachable",url:J};return{status:"compatible",url:J}}async function pL($){let f=Date.now()+kL;while(Date.now()<f){let J=await K0($.discoveryPath);if(J?.url){let W=await _W(J.url,{verifyConnection:!0,authToken:J.authToken});if(W.status==="compatible")return Af(W.url,J.authToken)}await new Promise((W)=>setTimeout(W,IL))}return}async function rL($){let f=Date.now()+gL;while(Date.now()<f){if(!(await x$($).catch(()=>{return}))?.url)return!0;await new Promise((W)=>setTimeout(W,vL))}return!1}function iL($,f){try{return Yf($)===Yf(f)}catch{return!1}}function nL($){return($&&typeof $==="object"&&Array.isArray($.sessions)?$.sessions:[]).some((J)=>{if(!J||typeof J!=="object")return!1;let W=J;if(W.status==="running"||W.status==="idle"||W.status==="pending")return!0;return Array.isArray(W.participants)&&W.participants.length>0})}async function aL($,f,J){let W=new V$({url:$,authToken:f,clientType:"hub-recovery-check",displayName:"hub recovery check",workspaceRoot:J?.workspaceRoot,cwd:J?.cwd});try{let Z=await W.command("session.list",{limit:500},void 0,{timeoutMs:mL});return!nL(Z.payload)}catch{return!1}finally{await W.dispose().catch(()=>{return})}}async function NW($={}){if($.endpoint?.trim()){let Z=await _W($.endpoint);return Z.status==="compatible"?Z.url:void 0}let f=R0(),J=await K0(f.discoveryPath);if(!J?.url)return;let W=await _W(J.url);if(W.status==="compatible")return Af(W.url,J.authToken);if(W.status==="build_mismatch")await e0(f.discoveryPath).catch(()=>{return});return}async function _2($={}){let f=await NW($);if(f&&await g$(f,{workspaceRoot:$.workspaceRoot,cwd:$.cwd}))return f;if($.endpoint?.trim())return;let J=R0();return await qJ($.workspaceRoot??process.cwd()),await pL(J)}async function LW($,f){let J=new URL($),W=f?.trim()||jH(J);if(J.protocol==="ws:")J.protocol="http:";else if(J.protocol==="wss:")J.protocol="https:";return J.pathname="/shutdown",J.hash="",(await fetch(J,{method:"POST",headers:W?{authorization:`Bearer ${W}`}:void 0})).ok}async function tL(){let $=R0(),f=await K0($.discoveryPath);if(!f?.url)return!1;try{if(await LW(f.url,f.authToken))return!0}catch{}return!1}async function HH($){if(!zW($.url))return;let f=R0(),J=await K0(f.discoveryPath);if(!J?.url||!iL(J.url,$.url))return;if(!await aL(J.url,J.authToken,{workspaceRoot:$.workspaceRoot,cwd:$.cwd}))return;if(!await tL())return;if(!await rL(J.url))return;return await e0(f.discoveryPath).catch(()=>{return}),await _2({workspaceRoot:$.workspaceRoot,cwd:$.cwd})}import{captureSdkError as XH,createSessionId as AH,HUB_CHECKPOINT_CAPABILITY as $O,HUB_COMPACTION_CAPABILITY as fO,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as JO,HUB_HOOK_CAPABILITY_PREFIX as WO,HUB_MISTAKE_LIMIT_CAPABILITY as ZO,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as QO,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as jO,isHubToolExecutorName as HO}from"@cline/shared";function sL($){return $?JSON.parse(JSON.stringify($)):void 0}function oL($){return $?JSON.parse(JSON.stringify($)):void 0}function eL($){let f=$?.checkpoint&&typeof $.checkpoint==="object"&&!Array.isArray($.checkpoint)?$.checkpoint:void 0,W=(Array.isArray(f?.history)?f.history:[]).filter((j)=>!!j&&typeof j==="object"&&!Array.isArray(j)).flatMap((j)=>{let H=typeof j.ref==="string"?j.ref.trim():"",X=Number(j.createdAt),A=Number(j.runCount);if(!H||!Number.isFinite(X)||!Number.isInteger(A))return[];return[{ref:H,createdAt:X,runCount:A,...j.kind==="stash"||j.kind==="commit"?{kind:j.kind}:{}}]}),Z=W.at(-1),Q=$?.checkpointEnabled===!0?!0:void 0;if(!Q&&W.length===0)return;return{...Q?{enabled:Q}:{},...Z?{latest:Z}:{},history:W}}function v$($){let{session:f}=$,J=sL(f.metadata);return{version:1,sessionId:f.sessionId,source:f.source,status:f.status,createdAt:f.startedAt,updatedAt:f.updatedAt,endedAt:f.endedAt??null,exitCode:f.exitCode??null,interactive:f.interactive,workspace:{cwd:f.cwd,root:f.workspaceRoot},model:{providerId:f.provider,modelId:f.model},capabilities:{enableTools:f.enableTools,enableSpawn:f.enableSpawn,enableTeams:f.enableTeams},lineage:{...f.parentSessionId?{parentSessionId:f.parentSessionId}:{},...f.parentAgentId?{parentAgentId:f.parentAgentId}:{},...f.agentId?{agentId:f.agentId}:{},...f.conversationId?{conversationId:f.conversationId}:{},isSubagent:f.isSubagent},...f.teamName?{team:{name:f.teamName}}:{},...f.prompt?{prompt:f.prompt}:{},...J?{metadata:J}:{},...f.messagesPath?{artifacts:{messagesPath:f.messagesPath}}:{},...$.messages?{messages:oL($.messages)}:{},...$.usage?{usage:{...$.usage}}:{},...$.aggregateUsage?{aggregateUsage:{...$.aggregateUsage}}:{},...(()=>{let W=eL(J);return W?{checkpoint:W}:{}})()}}function MW($){return{sessionId:$.sessionId,parentSessionId:$.lineage.parentSessionId,agentId:$.lineage.agentId,parentAgentId:$.lineage.parentAgentId,conversationId:$.lineage.conversationId,isSubagent:$.lineage.isSubagent,source:$.source,startedAt:$.createdAt,endedAt:$.endedAt??void 0,exitCode:$.exitCode??void 0,status:$.status,interactive:$.interactive,provider:$.model.providerId,model:$.model.modelId,cwd:$.workspace.cwd,workspaceRoot:$.workspace.root,teamName:$.team?.name,enableTools:$.capabilities.enableTools,enableSpawn:$.capabilities.enableSpawn,enableTeams:$.capabilities.enableTeams,prompt:$.prompt,metadata:$.metadata,updatedAt:$.updatedAt,messagesPath:$.artifacts?.messagesPath}}function Vf($){if(!$)return;return JSON.parse(JSON.stringify($))}var XO=["beforeRun","afterRun","beforeModel","afterModel","beforeTool","afterTool","onEvent"];function YH($){if(!$||typeof $!=="object"||Array.isArray($))return;return JSON.parse(JSON.stringify($))}function VH($){if(!$)return;let{userInstructionService:f,...J}=$;return JSON.parse(JSON.stringify(J))}function BH($){let f=$&&typeof $==="object"&&!Array.isArray($)?$:{};return{agentId:typeof f.agentId==="string"?f.agentId:"",conversationId:typeof f.conversationId==="string"?f.conversationId:"",iteration:typeof f.iteration==="number"?f.iteration:0,metadata:f.metadata&&typeof f.metadata==="object"&&!Array.isArray(f.metadata)?f.metadata:void 0}}function N1($,f,J){$.manifest.push(f),$.handlers.set(f.capabilityName,J)}function KH($,f){let J={manifest:[],handlers:new Map};for(let Z of Object.keys(f.toolExecutors??{}).filter(HO)){let Q=f.toolExecutors?.[Z];if(typeof Q!=="function")continue;N1(J,{kind:"toolExecutor",executor:Z,capabilityName:`${QO}${Z}`},async({payload:j,abortSignal:H})=>{let X=Array.isArray(j.args)?[...j.args]:[],A={...BH(j.context),signal:H};return{result:await Q(...X,A)}})}for(let Z of $?.extraTools??[])N1(J,{kind:"tool",name:Z.name,description:Z.description,inputSchema:Vf(Z.inputSchema)??{},...Z.lifecycle?{lifecycle:Vf(Z.lifecycle)}:{},capabilityName:`${JO}${Z.name}`},async({payload:Q,abortSignal:j,progress:H})=>{let X={...BH(Q.context),signal:j};return{result:await Z.execute(Q.input,{...X,emitUpdate:(Y)=>{H({update:Y})}})}});let W=$?.hooks;if(W)for(let Z of XO){let Q=W[Z];if(typeof Q!=="function")continue;N1(J,{kind:"hook",name:Z,capabilityName:`${WO}${Z}`},async({payload:j})=>({control:await Q(j.context)}))}if($?.compaction?.compact){let Z=$.compaction.compact;N1(J,{kind:"compaction",capabilityName:fO,config:YH($.compaction)},async({payload:Q})=>({result:await Z(Q.context)}))}if($?.checkpoint?.createCheckpoint){let Z=$.checkpoint.createCheckpoint;N1(J,{kind:"checkpoint",capabilityName:$O,config:YH($.checkpoint)},async({payload:Q})=>({result:await Z(Q.context)}))}if($?.onConsecutiveMistakeLimitReached){let Z=$.onConsecutiveMistakeLimitReached;N1(J,{kind:"mistakeLimit",capabilityName:ZO},async({payload:Q})=>({result:await Z(Q.context)}))}if($?.userInstructionService){let Z=$.userInstructionService;N1(J,{kind:"userInstructionService",capabilityName:jO},async()=>{return await Z.start().catch(()=>{}),{snapshot:{records:{skill:Z.listRecords("skill"),rule:Z.listRecords("rule"),workflow:Z.listRecords("workflow")},runtimeCommands:Z.listRuntimeCommands()}}})}return J}function FH($){if(typeof $==="string"&&$.trim())return $.trim();if($ instanceof Error)return $.message.trim()||void 0;if($&&typeof $==="object"&&"message"in $){let f=$.message;if(typeof f==="string"&&f.trim())return f.trim()}return}function AO($){return FH($)??"Capability request was cancelled."}function YO($){if(typeof $!=="string")return $;try{return JSON.parse($)}catch{return $}}function VO($){return $==="completed"||$==="max_iterations"||$==="aborted"||$==="mistake_limit"||$==="error"}function BO($){if(!$||typeof $!=="object"||Array.isArray($))return;let f=$,J=typeof f.inputTokens==="number"?f.inputTokens:void 0,W=typeof f.outputTokens==="number"?f.outputTokens:void 0;if(J===void 0||W===void 0)return;return{inputTokens:J,outputTokens:W,cacheReadTokens:typeof f.cacheReadTokens==="number"?f.cacheReadTokens:0,cacheWriteTokens:typeof f.cacheWriteTokens==="number"?f.cacheWriteTokens:0,totalCost:typeof f.totalCost==="number"?f.totalCost:0}}function GH($){if(!$)return;return{inputTokens:typeof $.inputTokens==="number"?$.inputTokens:0,outputTokens:typeof $.outputTokens==="number"?$.outputTokens:0,cacheReadTokens:typeof $.cacheReadTokens==="number"?$.cacheReadTokens:0,cacheWriteTokens:typeof $.cacheWriteTokens==="number"?$.cacheWriteTokens:0,totalCost:typeof $.totalCost==="number"?$.totalCost:0}}function yW($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function u$($,f){return yW($?.[f])??0}function KO($){let f=$?.delta&&typeof $.delta==="object"?$.delta:void 0,J=$?.totals&&typeof $.totals==="object"?$.totals:void 0,W=$?.agent&&typeof $.agent==="object"?$.agent:void 0,Z=W?.teamRole==="teammate"||W?.teamRole==="lead"?W.teamRole:void 0;return{event:{type:"usage",agentId:typeof W?.agentId==="string"?W.agentId:void 0,conversationId:typeof W?.conversationId==="string"?W.conversationId:void 0,parentAgentId:typeof W?.parentAgentId==="string"?W.parentAgentId:void 0,inputTokens:u$(f,"inputTokens"),outputTokens:u$(f,"outputTokens"),cacheReadTokens:u$(f,"cacheReadTokens"),cacheWriteTokens:u$(f,"cacheWriteTokens"),cost:yW(f?.totalCost),totalInputTokens:u$(J,"inputTokens"),totalOutputTokens:u$(J,"outputTokens"),totalCacheReadTokens:u$(J,"cacheReadTokens"),totalCacheWriteTokens:u$(J,"cacheWriteTokens"),totalCost:yW(J?.totalCost)},teamAgentId:typeof W?.teamAgentId==="string"?W.teamAgentId:void 0,teamRole:Z}}function GO($){let f=$?.result&&typeof $.result==="object"&&!Array.isArray($.result)?$.result:void 0,J=$?.reason??f?.finishReason,W=VO(J)?J:J==="failed"?"error":"completed",Z=BO($?.usage??f?.usage);return{type:"done",reason:W,text:typeof $?.text==="string"?$.text:typeof f?.text==="string"?f.text:"",iterations:typeof $?.iterations==="number"?$.iterations:typeof f?.iterations==="number"?f.iterations:0,usage:Z}}function SJ($,f){return $.error?.message??`hub command failed: ${f}`}function T2($){switch($){case"idle":case"completed":return"completed";case"failed":return"failed";case"aborted":return"cancelled";default:return"running"}}function RH($){let f=$.metadata&&typeof $.metadata==="object"?JSON.parse(JSON.stringify($.metadata)):void 0;return{sessionId:$.sessionId,parentSessionId:typeof f?.parentSessionId==="string"?f.parentSessionId:void 0,agentId:$.runtimeSession?.agentId||(typeof f?.agentId==="string"?f.agentId:void 0),parentAgentId:typeof f?.parentAgentId==="string"?f.parentAgentId:void 0,conversationId:typeof f?.conversationId==="string"?f.conversationId:void 0,isSubagent:typeof f?.isSubagent==="boolean"?f.isSubagent:!1,source:typeof f?.source==="string"?f.source:U0.CORE,pid:typeof f?.pid==="number"?f.pid:void 0,startedAt:new Date($.createdAt).toISOString(),endedAt:T2($.status)==="running"?void 0:new Date($.updatedAt).toISOString(),exitCode:T2($.status)==="completed"?0:T2($.status)==="failed"?1:void 0,status:T2($.status),interactive:f?.interactive===!0,provider:typeof f?.provider==="string"?f.provider:"hub",model:typeof f?.model==="string"?f.model:"hub",cwd:$.cwd?.trim()||$.workspaceRoot,workspaceRoot:$.workspaceRoot,teamName:typeof f?.teamName==="string"?f.teamName:void 0,enableTools:$.runtimeOptions?.enableTools??f?.enableTools===!0,enableSpawn:$.runtimeOptions?.enableSpawn??f?.enableSpawn===!0,enableTeams:$.runtimeOptions?.enableTeams??f?.enableTeams===!0,prompt:typeof f?.prompt==="string"?f.prompt:void 0,metadata:f,updatedAt:new Date($.updatedAt).toISOString(),messagesPath:typeof f?.messagesPath==="string"?f.messagesPath:void 0,hookPath:typeof f?.hookPath==="string"?f.hookPath:void 0}}function c$($){if(!$||typeof $!=="object"||Array.isArray($))return;let f=$;return f.version===1&&typeof f.sessionId==="string"?JSON.parse(JSON.stringify(f)):void 0}function PO($){let f=c$($?.snapshot);if(f)return MW(f);let J=$?.session;return J?RH(J):void 0}function PH($,f,J){let W=J?.workspaceRoot?.trim()||f.config.workspaceRoot||f.config.cwd;return _0.parse({version:1,session_id:$,source:f.source??U0.CORE,pid:process.pid,started_at:new Date(J?.createdAt??Date.now()).toISOString(),status:T2(J?.status),interactive:f.interactive===!0,provider:f.config.providerId,model:f.config.modelId,cwd:J?.cwd?.trim()||f.config.cwd,workspace_root:W,team_name:f.config.teamName,enable_tools:f.config.enableTools,enable_spawn:f.config.enableSpawnAgent,enable_teams:f.config.enableAgentTeams,prompt:f.prompt?.trim()||void 0,metadata:f.sessionMetadata&&Object.keys(f.sessionMetadata).length>0?f.sessionMetadata:void 0})}function UH($,f){return _0.parse({version:1,session_id:$.sessionId,source:$.source,pid:process.pid,started_at:$.createdAt,status:$.status,interactive:$.interactive,provider:$.model.providerId,model:$.model.modelId,cwd:$.workspace.cwd,workspace_root:$.workspace.root,team_name:$.team?.name,enable_tools:$.capabilities.enableTools,enable_spawn:$.capabilities.enableSpawn,enable_teams:$.capabilities.enableTeams,prompt:($.prompt??f.prompt?.trim())||void 0,metadata:$.metadata,messages_path:$.artifacts?.messagesPath})}class M1{runtimeAddress;pendingPrompts;client;clientOptions;clientContext;events=new R2;sessionCapabilities=new Map;sessionClientContributionHandlers=new Map;sessionSubscriptions=new Map;pendingApprovalToolCallIds=new Set;agentDoneEmittedForCurrentRunBySession=new Set;activeCapabilityAbortControllers=new Map;defaultCapabilities;telemetry;constructor($,f){this.clientContext=f,this.clientOptions={authToken:$.authToken,clientType:$.clientType??"core-hub-runtime",displayName:$.displayName??"core hub runtime",workspaceRoot:f?.workspaceRoot,cwd:f?.cwd},this.defaultCapabilities=F0($.capabilities)??{},this.telemetry=$.telemetry,this.runtimeAddress=$.url,this.pendingPrompts={list:(J)=>this.requestPendingPromptsList(J),update:(J)=>this.requestPendingPromptUpdate(J),delete:(J)=>this.requestPendingPromptDelete(J)},this.client=this.createClient($.url)}createClient($){return new V$({...this.clientOptions,url:$})}async replaceClient($){let f=this.client;this.client=this.createClient($),this.runtimeAddress=$,await Promise.resolve(f.dispose()).catch(()=>{return})}async recoverLocalHubStartupDeadlock($){if(!QH($,"session.create"))return!1;let f=await HH({url:this.client.getUrl(),workspaceRoot:this.clientContext?.workspaceRoot,cwd:this.clientContext?.cwd}).catch(()=>{return});if(!f)return!1;return await this.replaceClient(f),!0}registerPlannedSession($,f,J){if(this.sessionCapabilities.set($,f),J.size>0)this.sessionClientContributionHandlers.set($,J);this.ensureSessionSubscription($)}cleanupPlannedSession($){this.sessionCapabilities.delete($),this.sessionClientContributionHandlers.delete($),this.disposeSessionSubscription($)}async connect(){await this.client.connect()}async startSession($){let f=this.resolveCapabilities($),J=KH($.localRuntime,f),W=$.config.sessionId?.trim()||AH(),Z=()=>this.client.command("session.create",{workspaceRoot:$.config.workspaceRoot?.trim()||$.config.cwd,cwd:$.config.cwd,sessionConfig:Vf({...$.config,sessionId:W}),metadata:{...$.sessionMetadata??{},source:$.source??U0.CORE,provider:$.config.providerId,model:$.config.modelId,enableTools:$.config.enableTools,enableSpawn:$.config.enableSpawnAgent,enableTeams:$.config.enableAgentTeams,teamName:$.config.teamName,prompt:$.prompt,interactive:$.interactive===!0},runtimeOptions:{...J.manifest.length>0?{clientContributions:J.manifest}:{},...$.localRuntime?.configExtensions?{configExtensions:$.localRuntime.configExtensions}:{}},toolPolicies:Vf($.toolPolicies),initialMessages:$.initialMessages});this.registerPlannedSession(W,f,J.handlers);let Q;try{Q=await Z()}catch(A){if(this.cleanupPlannedSession(W),await this.recoverLocalHubStartupDeadlock(A)){this.registerPlannedSession(W,f,J.handlers);try{Q=await Z()}catch(Y){throw this.cleanupPlannedSession(W),Y}}else throw A}let j=c$(Q.payload?.snapshot),H=Q.payload?.session,X=(j?.sessionId??H?.sessionId)?.trim();if(!X)throw this.cleanupPlannedSession(W),Error("Hub runtime did not return a session id.");if(X!==W)this.cleanupPlannedSession(W),this.registerPlannedSession(X,f,J.handlers);return{sessionId:X,manifest:j?UH(j,$):PH(X,$,H),manifestPath:"",messagesPath:"",result:void 0}}async restoreSession($){let f=$.sessionId.trim();if(!f)throw Error("sessionId is required");let J=$.restore?.messages!==!1;if(J&&!$.start)throw Error("start is required when restore.messages is true");let W=$.start,Z=W?this.resolveCapabilities(W):void 0,Q=W?KH(W.localRuntime,Z??{}):{manifest:[],handlers:new Map},j=W?W.config.sessionId?.trim()||AH():void 0;if(j&&Z)this.sessionCapabilities.set(j,Z);if(j&&Q.handlers.size>0)this.sessionClientContributionHandlers.set(j,Q.handlers),this.ensureSessionSubscription(j);let H;try{H=await this.client.command("session.restore",{sessionId:f,checkpointRunCount:$.checkpointRunCount,restore:$.restore,...W?{workspaceRoot:W.config.workspaceRoot?.trim()||W.config.cwd,cwd:W.config.cwd??$.cwd,sessionConfig:Vf({...W.config,sessionId:j}),metadata:{...W.sessionMetadata??{},source:W.source??U0.CORE,provider:W.config.providerId,model:W.config.modelId,enableTools:W.config.enableTools,enableSpawn:W.config.enableSpawnAgent,enableTeams:W.config.enableAgentTeams,teamName:W.config.teamName,prompt:W.prompt,interactive:W.interactive===!0},runtimeOptions:{...Q.manifest.length>0?{clientContributions:Q.manifest}:{},...W.localRuntime?.configExtensions?{configExtensions:W.localRuntime.configExtensions}:{}},toolPolicies:Vf(W.toolPolicies)}:{}},f)}catch(K){if(j)this.sessionCapabilities.delete(j),this.sessionClientContributionHandlers.delete(j),this.disposeSessionSubscription(j);throw K}if(!H.ok){let K=typeof H.payload?.error==="string"?H.payload.error:"session.restore failed";if(j)this.sessionCapabilities.delete(j),this.sessionClientContributionHandlers.delete(j),this.disposeSessionSubscription(j);throw Error(K)}let X=c$(H.payload?.snapshot),A=H.payload?.session,Y=(X?.sessionId??A?.sessionId)?.trim();if(J&&!Y){if(j)this.sessionCapabilities.delete(j),this.sessionClientContributionHandlers.delete(j),this.disposeSessionSubscription(j);throw Error("Hub checkpoint restore returned no session id")}if(Y&&j&&Y!==j)this.sessionCapabilities.delete(j),this.sessionClientContributionHandlers.delete(j),this.disposeSessionSubscription(j);if(Y&&Z)this.sessionCapabilities.set(Y,Z);if(Y&&Q.handlers.size>0)this.sessionClientContributionHandlers.set(Y,Q.handlers);if(Y)this.ensureSessionSubscription(Y);let V=Array.isArray(H.payload?.messages)?H.payload.messages:void 0,B=H.payload?.checkpoint;if(!B)throw Error("Hub checkpoint restore returned no checkpoint");return{sessionId:Y,startResult:Y?{sessionId:Y,manifest:X?UH(X,W??{}):PH(Y,W??{},A),manifestPath:"",messagesPath:"",result:void 0}:void 0,messages:V,checkpoint:B}}async runTurn($){return this.ensureSessionSubscription($.sessionId),(await this.client.command("run.start",{sessionId:$.sessionId,input:$.prompt,mode:$.mode,attachments:($.userImages?.length??0)>0||($.userFiles?.length??0)>0?{...$.userImages?.length?{userImages:$.userImages}:{},...$.userFiles?.length?{userFiles:$.userFiles}:{}}:void 0,delivery:$.delivery,timeoutMs:$.timeoutMs},$.sessionId,{timeoutMs:null})).payload?.result}async requestPendingPromptsList($){this.ensureSessionSubscription($.sessionId);let f=await this.client.command("session.pending_prompts",{sessionId:$.sessionId},$.sessionId);return Array.isArray(f.payload?.prompts)?f.payload.prompts:[]}async requestPendingPromptUpdate($){this.ensureSessionSubscription($.sessionId);let f=await this.client.command("session.update_pending_prompt",{...$},$.sessionId);return{sessionId:$.sessionId,prompts:Array.isArray(f.payload?.prompts)?f.payload.prompts:[],prompt:f.payload?.prompt,updated:f.payload?.updated===!0}}async requestPendingPromptDelete($){this.ensureSessionSubscription($.sessionId);let f=await this.client.command("session.remove_pending_prompt",{...$},$.sessionId);return{sessionId:$.sessionId,prompts:Array.isArray(f.payload?.prompts)?f.payload.prompts:[],prompt:f.payload?.prompt,removed:f.payload?.removed===!0}}async getAccumulatedUsage($){let f=await this.client.command("session.get",{includeSnapshot:!0},$),J=c$(f.payload?.snapshot);if(J){let j=J.usage?{...J.usage}:void 0,H=J.aggregateUsage?{...J.aggregateUsage}:void 0;return j||H?{usage:j,aggregateUsage:H}:void 0}let W=f.payload?.session,Z=GH(W?.usage),Q=GH(W?.aggregateUsage);return Z||Q?{usage:Z,aggregateUsage:Q}:void 0}async abort($,f){await this.client.command("run.abort",{sessionId:$,reason:FH(f)},$)}async stopSession($){this.sessionCapabilities.delete($),this.disposeSessionSubscription($),await this.client.command("session.detach",{sessionId:$},$)}async dispose(){for(let[$,f]of this.sessionSubscriptions){f();try{await this.client.command("session.detach",{sessionId:$},$)}catch{}}this.sessionSubscriptions.clear(),this.sessionCapabilities.clear(),this.agentDoneEmittedForCurrentRunBySession.clear();for(let $ of this.activeCapabilityAbortControllers.values())$.abort("Hub runtime host disposed.");this.activeCapabilityAbortControllers.clear(),await this.client.dispose()}async getSession($){let f;try{f=await this.client.command("session.get",void 0,$)}catch(J){if(F1(J))return;throw J}return PO(f.payload)}async listSessions($=100){let f=await this.client.command("session.list",{limit:$}),J=Array.isArray(f.payload?.snapshots)?f.payload.snapshots.flatMap((Z)=>{let Q=c$(Z);return Q?[MW(Q)]:[]}):[];if(J.length>0)return J;return(f.payload?.sessions??[]).map(RH)}async listSettings($){let f=await this.client.command("settings.list",VH($));if(!f.ok)throw Error(SJ(f,"settings.list"));return f.payload?.snapshot}async toggleSetting($){let f=await this.client.command("settings.toggle",VH($));if(!f.ok)throw Error(SJ(f,"settings.toggle"));return{snapshot:f.payload?.snapshot,changedTypes:Array.isArray(f.payload?.changedTypes)?f.payload.changedTypes:[]}}async deleteSession($){return this.sessionCapabilities.delete($),this.disposeSessionSubscription($),(await this.client.command("session.delete",{sessionId:$})).payload?.deleted===!0}async updateSession($,f){let J={...f.metadata??{}};if(typeof f.prompt==="string")J.prompt=f.prompt;if(typeof f.title==="string")J.title=f.title;return{updated:(await this.client.command("session.update",{sessionId:$,metadata:J})).ok}}async readSessionMessages($){let f=$.trim();if(!f)return[];let J=await this.client.command("session.messages",{sessionId:f},f);if(!J.ok)throw XH(this.telemetry,{component:"core",operation:"hub.runtime_host.read_session_messages",error:Error(SJ(J,"session.messages")),severity:J.error?.code==="session_not_found"?"warn":"error",handled:!0,context:{command:"session.messages",sessionId:f,errorCode:J.error?.code,runtimeAddress:this.runtimeAddress}}),Error(SJ(J,"session.messages"));let W=J.payload?.messages;return Array.isArray(W)?W:[]}async dispatchHookEvent($){await this.client.command("session.hook",{payload:$})}subscribe($,f){return this.events.subscribe($,f)}ensureSessionSubscription($){let f=$.trim();if(!f||this.sessionSubscriptions.has(f))return;let J=this.client.subscribe((W)=>{this.handleHubEvent(W)},{sessionId:f});this.sessionSubscriptions.set(f,typeof J==="function"?J:()=>{})}disposeSessionSubscription($){let f=$.trim();if(!f)return;this.sessionSubscriptions.get(f)?.(),this.sessionSubscriptions.delete(f),this.agentDoneEmittedForCurrentRunBySession.delete(f)}resolveCapabilities($){return F0(this.defaultCapabilities,$.capabilities)??{}}emitToolCallContentStart($){this.events.emit({type:"agent_event",payload:{sessionId:$.sessionId,event:{type:"content_start",contentType:"tool",toolCallId:$.toolCallId,toolName:$.toolName,input:$.toolInput}}})}emitAgentDoneIfNeeded($){if(this.agentDoneEmittedForCurrentRunBySession.has($.sessionId))return;this.agentDoneEmittedForCurrentRunBySession.add($.sessionId),this.events.emit({type:"agent_event",payload:{sessionId:$.sessionId,event:GO($.payload)}})}handleHubEvent($){let f=$.sessionId?.trim();if($.event==="capability.requested"){this.handleCapabilityRequest($).catch((J)=>{this.captureDetachedHubEventError("hub.runtime_host.capability_request",J,$)});return}if($.event==="capability.resolved"){this.handleCapabilityResolved($);return}if($.event==="approval.requested"){this.handleApprovalRequested($).catch((J)=>{this.captureDetachedHubEventError("hub.runtime_host.approval_request",J,$)});return}if(!f)return;switch($.event){case"run.started":{this.agentDoneEmittedForCurrentRunBySession.delete(f);let J=c$($.payload?.snapshot),W=$.payload?.session;if(J)this.events.emit({type:"session_snapshot",payload:{sessionId:f,snapshot:J}});this.events.emit({type:"status",payload:{sessionId:f,status:W?.status??"running"}});return}case"iteration.started":{this.events.emit({type:"agent_event",payload:{sessionId:f,event:{type:"iteration_start",iteration:typeof $.payload?.iteration==="number"?$.payload.iteration:0}}});return}case"iteration.finished":{this.events.emit({type:"agent_event",payload:{sessionId:f,event:{type:"iteration_end",iteration:typeof $.payload?.iteration==="number"?$.payload.iteration:0,hadToolCalls:$.payload?.hadToolCalls===!0,toolCallCount:typeof $.payload?.toolCallCount==="number"?$.payload.toolCallCount:0}}});return}case"assistant.delta":{let J=typeof $.payload?.text==="string"?$.payload.text:"";if(!J)return;this.events.emit({type:"agent_event",payload:{sessionId:f,event:{type:"content_start",contentType:"text",text:J}}});return}case"assistant.finished":{this.events.emit({type:"agent_event",payload:{sessionId:f,event:{type:"content_end",contentType:"text",text:typeof $.payload?.text==="string"?$.payload.text:void 0}}});return}case"reasoning.delta":{let J=typeof $.payload?.text==="string"?$.payload.text:"",W=$.payload?.redacted===!0;if(!J&&!W)return;this.events.emit({type:"agent_event",payload:{sessionId:f,event:{type:"content_start",contentType:"reasoning",reasoning:J,redacted:W}}});return}case"reasoning.finished":{this.events.emit({type:"agent_event",payload:{sessionId:f,event:{type:"content_end",contentType:"reasoning",reasoning:typeof $.payload?.reasoning==="string"?$.payload.reasoning:void 0}}});return}case"agent.done":{this.emitAgentDoneIfNeeded({sessionId:f,payload:$.payload});return}case"usage.updated":{let J=KO($.payload);this.events.emit({type:"agent_event",payload:{sessionId:f,event:J.event,teamAgentId:J.teamAgentId,teamRole:J.teamRole}});return}case"tool.started":{let J=typeof $.payload?.toolCallId==="string"?$.payload.toolCallId:void 0;if(J&&this.pendingApprovalToolCallIds.delete(J))return;this.emitToolCallContentStart({sessionId:f,toolCallId:J,toolName:typeof $.payload?.toolName==="string"?$.payload.toolName:void 0,toolInput:$.payload?.input});return}case"tool.finished":{let J=typeof $.payload?.toolCallId==="string"?$.payload.toolCallId:void 0;if(J)this.pendingApprovalToolCallIds.delete(J);this.events.emit({type:"agent_event",payload:{sessionId:f,event:{type:"content_end",contentType:"tool",toolCallId:J,toolName:typeof $.payload?.toolName==="string"?$.payload.toolName:void 0,output:$.payload?.output,error:typeof $.payload?.error==="string"?$.payload.error:void 0}}});return}case"session.created":case"session.updated":case"session.attached":case"session.detached":{let J=c$($.payload?.snapshot),W=$.payload?.session;if(J)this.events.emit({type:"session_snapshot",payload:{sessionId:f,snapshot:J}});this.events.emit({type:"status",payload:{sessionId:f,status:W?.status??"running"}});return}case"session.pending_prompts":{this.events.emit({type:"pending_prompts",payload:{sessionId:f,prompts:Array.isArray($.payload?.prompts)?$.payload.prompts:[]}});return}case"session.pending_prompt_submitted":{let J=$.payload?.prompt;if(!J)return;this.events.emit({type:"pending_prompt_submitted",payload:{sessionId:f,id:J.id,prompt:J.prompt,delivery:J.delivery,attachmentCount:J.attachmentCount}});return}case"run.completed":case"run.failed":case"run.aborted":{let J=c$($.payload?.snapshot),W=typeof $.payload?.reason==="string"?$.payload.reason:$.event==="run.aborted"?"aborted":$.event==="run.failed"?"error":"completed";if(this.emitAgentDoneIfNeeded({sessionId:f,payload:{...$.payload,reason:W}}),J?.interactive===!0&&$0(J.status))return;this.events.emit({type:"ended",payload:{sessionId:f,reason:W,ts:$.timestamp??Date.now()}});return}default:return}}captureDetachedHubEventError($,f,J){try{XH(this.telemetry,{component:"core",operation:$,error:f,severity:"warn",handled:!0,context:{event:J.event,sessionId:J.sessionId,runtimeAddress:this.runtimeAddress}})}catch{}}async handleCapabilityRequest($){let f=$.sessionId?.trim();if(!f)return;let J=typeof $.payload?.targetClientId==="string"?$.payload.targetClientId:void 0;if(J&&J!==this.client.getClientId())return;let W=typeof $.payload?.requestId==="string"?$.payload.requestId:"",Z=typeof $.payload?.capabilityName==="string"?$.payload.capabilityName:"";if(!W)return;let Q=this.sessionClientContributionHandlers.get(f)?.get(Z);if(!Q){await this.client.command("capability.respond",{requestId:W,ok:!1,error:`No client contribution handler registered for capability ${Z} in session ${f}.`},f).catch(()=>{});return}let j=$.payload?.payload&&typeof $.payload.payload==="object"&&!Array.isArray($.payload.payload)?$.payload.payload:{},H=new AbortController;this.activeCapabilityAbortControllers.set(W,H);let X=(A)=>{this.client.command("capability.progress",{requestId:W,payload:A},f).catch((Y)=>{this.captureDetachedHubEventError("hub.runtime_host.capability_progress",Y,$)})};try{let A=await Q({payload:j,abortSignal:H.signal,progress:X});if(H.signal.aborted)return;await this.client.command("capability.respond",{requestId:W,ok:!0,payload:A},f)}catch(A){if(H.signal.aborted)return;await this.client.command("capability.respond",{requestId:W,ok:!1,error:A instanceof Error?A.message:String(A)},f)}finally{this.activeCapabilityAbortControllers.delete(W)}}handleCapabilityResolved($){if($.payload?.cancelled!==!0)return;let f=typeof $.payload.requestId==="string"?$.payload.requestId.trim():"";if(!f)return;let J=this.activeCapabilityAbortControllers.get(f);if(!J)return;J.abort(AO($.payload.error))}async handleApprovalRequested($){let f=$.sessionId?.trim();if(!f)return;let J=this.sessionCapabilities.get(f)?.requestToolApproval??this.defaultCapabilities.requestToolApproval;if(!J)return;let W=typeof $.payload?.approvalId==="string"?$.payload.approvalId.trim():"",Z=typeof $.payload?.toolCallId==="string"?$.payload.toolCallId:"",Q=typeof $.payload?.toolName==="string"?$.payload.toolName:"";if(!W||!Z||!Q)return;let j=$.payload?.policy&&typeof $.payload.policy==="object"&&!Array.isArray($.payload.policy)?$.payload.policy:{autoApprove:!1},H=YO($.payload?.inputJson);this.pendingApprovalToolCallIds.add(Z),this.emitToolCallContentStart({sessionId:f,toolCallId:Z,toolName:Q,toolInput:H});let X=await Promise.resolve(J({sessionId:f,agentId:typeof $.payload?.agentId==="string"?$.payload.agentId:"",conversationId:typeof $.payload?.conversationId==="string"?$.payload.conversationId:f,iteration:typeof $.payload?.iteration==="number"?$.payload.iteration:0,toolCallId:Z,toolName:Q,input:H,policy:j})).catch((A)=>({approved:!1,reason:A instanceof Error?A.message:`Tool approval request failed: ${String(A)}`}));await this.client.command("approval.respond",{approvalId:W,approved:X.approved,reason:X.reason},f).catch(()=>{})}}class hJ extends M1{constructor($){super({url:Yf($.endpoint),authToken:$.authToken,clientType:$.clientType??"core-remote-runtime",displayName:$.displayName??"core remote runtime",capabilities:$.capabilities},{workspaceRoot:$.workspaceRoot,cwd:$.cwd})}}import{existsSync as UO,mkdirSync as FO}from"node:fs";import{join as RO}from"node:path";import{asBool as N2,asOptionalString as $$,asString as B$,ensureSessionSchema as DO,loadSqliteDb as LO,nowIso as CJ,toBoolInt as M2}from"@cline/shared/db";import{resolveDbDataDir as OO}from"@cline/shared/storage";class d${sessionsDirPath;db;constructor($={}){this.sessionsDirPath=$.sessionsDir??OO()}init(){this.getRawDb()}ensureSessionsDir(){if(!UO(this.sessionsDirPath))FO(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}sessionDbPath(){return RO(this.ensureSessionsDir(),"sessions.db")}getRawDb(){if(this.db)return this.db;let $=LO(this.sessionDbPath());return DO($,{includeLegacyMigrations:!0}),this.db=$,$}close(){this.db?.close?.(),this.db=void 0}run($,f=[]){return this.getRawDb().prepare($).run(...f)}queryOne($,f=[]){return this.getRawDb().prepare($).get(...f)??void 0}queryAll($,f=[]){return this.getRawDb().prepare($).all(...f)}create($){let f=CJ();this.run(`INSERT OR REPLACE INTO sessions (
440
440
  session_id, source, pid, started_at, ended_at, exit_code, status, status_lock, interactive,
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@cline/core",
3
3
  "description": "Cline Core SDK for Node Runtime",
4
- "version": "0.0.44",
4
+ "version": "0.0.45",
5
5
  "repository": {
6
6
  "type": "git",
7
7
  "url": "https://github.com/cline/cline",
@@ -44,9 +44,9 @@
44
44
  "test:watch": "vitest --config vitest.config.ts"
45
45
  },
46
46
  "dependencies": {
47
- "@cline/agents": "0.0.44",
48
- "@cline/shared": "0.0.44",
49
- "@cline/llms": "0.0.44",
47
+ "@cline/agents": "0.0.45",
48
+ "@cline/shared": "0.0.45",
49
+ "@cline/llms": "0.0.45",
50
50
  "@modelcontextprotocol/sdk": "^1.29.0",
51
51
  "@opentelemetry/api": "^1.9.0",
52
52
  "@opentelemetry/api-logs": "^0.214.0",