@sctg/cline-core 3.89.2-beta.20260619073136 → 3.89.2-beta.20260619085118
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/hub/daemon/entry.js +1 -1
- package/dist/hub/index.js +1 -1
- package/dist/index.js +1 -1
- package/package.json +4 -4
package/dist/hub/daemon/entry.js
CHANGED
|
@@ -494,7 +494,7 @@ ${JSON.stringify(Z,null,2)}`}startClaimLeaseHeartbeat($){let J=Math.max(1000,Mat
|
|
|
494
494
|
updated_at = ?
|
|
495
495
|
WHERE run_id = ? AND claim_token = ?`).run($.error??null,$.scheduledFor??null,J,$.runId,$.claimToken).changes??0)>0}attachSessionIdToRun($,J){this.db.prepare("UPDATE cron_runs SET session_id = ?, updated_at = ? WHERE run_id = ?").run(J,O0(),$)}attachReportPathToRun($,J){this.db.prepare("UPDATE cron_runs SET report_path = ?, updated_at = ? WHERE run_id = ?").run(J,O0(),$)}}class WJ{store;reconciler;watcher;eventIngress;materializer;runner;started=!1;disposed=!1;constructor($){this.store=new ZJ({dbPath:$.dbPath});let J=$.specs;this.reconciler=new q3({store:this.store,specs:J}),this.materializer=new t4({store:this.store}),this.eventIngress=new G3({store:this.store,logger:$.logger}),this.runner=new e4({store:this.store,materializer:this.materializer,runtimeHandlers:$.runtimeHandlers,workspaceRoot:$.workspaceRoot,specs:J,logger:$.logger,pollIntervalMs:$.pollIntervalMs,claimLeaseSeconds:$.claimLeaseSeconds,globalMaxConcurrency:$.globalMaxConcurrency}),this.watcher=new P3({reconciler:this.reconciler,debounceMs:$.watcherDebounceMs,onReconciled:()=>{this.materializer.materializeAll()},onError:(Q)=>{let Z=$.logger;if(Z)if(Z.error)Z.error("cron.watcher.failed",{error:Q});else Z.log("cron.watcher.failed",{error:Q})}})}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 yA={};w(yA,{manifestToSessionRecord:()=>iQ,listSessionHistoryFromBackend:()=>b3,listSessionHistory:()=>nQ,hydrateSessionHistory:()=>SA});import{readdir as qq,readFile as NA}from"node:fs/promises";import{join as wA}from"node:path";import{formatDisplayUserInput as Pq,normalizeUserInput as Nq}from"@sctg/cline-shared";import{resolveSessionDataDir as CA}from"@sctg/cline-shared/storage";import{existsSync as _q}from"node:fs";import{readFile as Mq}from"node:fs/promises";import{formatDisplayUserInput as MA}from"@sctg/cline-shared";class jJ{listeners=new Set;subscribe($,J){let Q={listener:$,sessionId:J?.sessionId?.trim()||void 0};return this.listeners.add(Q),()=>{this.listeners.delete(Q)}}emit($){let J=$.payload.sessionId?.trim();for(let Q of this.listeners){if(Q.sessionId&&Q.sessionId!==J)continue;Q.listener($)}}get size(){return this.listeners.size}}async function M1($){let J=$?.trim();if(!J||!_q(J))return[];try{let Q=(await Mq(J,"utf8")).trim();if(!Q)return[];let Z=JSON.parse(Q);if(Array.isArray(Z))return zA(Z);if(Z&&typeof Z==="object"&&!Array.isArray(Z)){let W=Z.messages;if(Array.isArray(W))return zA(W)}return[]}catch{return[]}}function zq($){if($.role!=="user")return $;if(typeof $.content==="string")return{...$,content:MA($.content)};return{...$,content:$.content.map((J)=>{if(J.type!=="text"||typeof J.text!=="string")return J;return{...J,text:MA(J.text)}})}}function zA($){return $.map(zq)}function S3($){return $?{...$}:void 0}async function qA($,J){if(!($.hookName==="tool_call"||!!$.parent_agent_id))return;await J.queueSpawnRequest($);let Z=await J.upsertSubagentSessionFromHook($);if(!Z)return;await J.appendSubagentHookAudit(Z,$),await J.applySubagentStatus(Z,$)}function fJ($){if(typeof $!=="string")return;let J=$.trim();return J.length>0?J:void 0}function s0($){let J=fJ($);if(!J)return;return J.toLowerCase()==="unknown"?void 0:J}function rQ($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function wq($){if(!$||typeof $!=="object"||Array.isArray($))return;return{...$}}function E3($){let J=$??200;return Number.isFinite(J)?Math.max(0,Math.floor(J)):200}function Cq($){if($===0)return 0;return Math.min(Math.max($*2,20),2000)}function Sq($){return $.isSubagent!==!0&&!fJ($.parentSessionId)}function yq($){let J=$.match(/\d{13,}/g);if(!J||J.length===0)return 0;let Q=0;for(let Z of J){let W=Number.parseInt(Z,10);if(Number.isFinite(W)&&W>Q)Q=W}return Q}function iQ($){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 Eq($){let J=E3($);if(J===0)return[];let Q=CA(),W=(await qq(Q,{withFileTypes:!0}).catch(()=>[])).filter((f)=>f.isDirectory()).map((f)=>({entry:f,recency:yq(f.name.trim())})).sort((f,X)=>X.recency-f.recency||X.entry.name.localeCompare(f.entry.name));return(await Promise.all(W.map(async({entry:f})=>{let X=f.name.trim();if(!X)return;let Y=wA(Q,X,`${X}.json`),V=await NA(Y,"utf8").catch(()=>{return});if(!V)return;let H;try{H=JSON.parse(V)}catch{return}let A=S0.safeParse(H);if(!A.success)return;return iQ(A.data)}))).filter((f)=>Boolean(f)).sort((f,X)=>X.startedAt.localeCompare(f.startedAt)).slice(0,J)}async function bq($,J,Q){let Z=E3(J);if(Z===0)return await $.listSessions(0),[];let W=Q.includeSubagents?Z:Cq(Z),j=await $.listSessions(W);return(Q.includeSubagents?j:j.filter(Sq)).slice(0,Z)}function hq($){if(typeof $==="string")return $.trim();let J=[];for(let Q of $){if(!Q||typeof Q!=="object")continue;let Z=Q;if(Z.type!=="text")continue;let W=Z.text?.trim();if(W)J.push(W)}return J.join(`
|
|
496
496
|
`).trim()}function PA($){return $.replace(/\s+/g," ").trim()}function kq($,J){if($.length<=J)return $;return`${$.slice(0,Math.max(0,J-3)).trimEnd()}...`}function Iq($){for(let J of["user","assistant"])for(let Q of $){if(Q.role!==J)continue;let Z=PA(hq(Q.content));if(!Z)continue;let W=J==="user"?PA(Pq(Z)):Z,j=Nq(W.split(`
|
|
497
|
-
`)[0]??W);return kq(j,50)}return}function xq($){let J=0;for(let Q of $)J+=rQ(Q.metrics?.cost)??0;return J}function gq($){let J,Q;for(let Z=$.length-1;Z>=0;Z-=1){let W=$[Z];if(!J)J=s0(W.modelInfo?.provider);if(!Q)Q=s0(W.modelInfo?.id);if(J&&Q)break}return{provider:J,model:Q}}function mq($){return s0($?.provider)??s0($?.provider&&typeof $.provider==="object"&&!Array.isArray($.provider)?$.provider.id:void 0)}function vq($){return s0($?.model)??s0($?.model&&typeof $.model==="object"&&!Array.isArray($.model)?$.model.id:void 0)}function y3($,J){let Q=wq($.metadata),Z=fJ(J?.title)??fJ(Q?.title),W=rQ(J?.totalCost)??rQ(Q?.totalCost),j=Q||Z!==void 0||W!==void 0?{...Q??{},...Z!==void 0?{title:Z}:{},...W!==void 0?{totalCost:W}:{}}:void 0;return{...$,provider:s0(J?.provider)??s0($.provider)??mq(Q)??"",model:s0(J?.model)??s0($.model)??vq(Q)??"",metadata:j}}function cq($){let J=$.content;if(!Array.isArray(J))return!1;return J.some((Q)=>!!Q&&typeof Q==="object"&&Q.type==="tool-call")}function uq($,J){if($.status!=="running"||$.interactive!==!0)return!1;let Q=J.at(-1);return Q?.role==="assistant"&&!cq(Q)}async function dq($,J){return await Promise.all(J.map(async(Q)=>{if(Q.status!=="running"||Q.interactive!==!0)return Q;let Z=await $.readSessionMessages(Q.sessionId);return uq(Q,Z)?{...Q,status:"idle"}:Q}))}async function SA($,J){return await Promise.all(J.map(async(Q)=>{let Z=y3(Q),W=Boolean(fJ(Z.metadata?.title)),j=Boolean(s0(Z.provider)),f=Boolean(s0(Z.model)),X=rQ(Z.metadata?.totalCost),Y=X!==void 0&&X>0;if(W&&j&&f&&Y)return Z;let V=await $.readSessionMessages(Q.sessionId);if(V.length===0)return Z;let H=gq(V),A=xq(V);return y3(Q,{title:W?void 0:Iq(V),provider:j?void 0:H.provider,model:f?void 0:H.model,totalCost:Y||A<=0?void 0:A})}))}async function nQ($,J={}){let Q=E3(J.limit),Z=J.includeSubagents===!0,W=await bq($,Q,{includeSubagents:Z}),j=J.includeManifestFallback===!0&&W.length<Q?await Eq(Math.min(Math.max(Q*2,100),500)):[],f=new Map;for(let V of[...W,...j]){if(f.has(V.sessionId))continue;f.set(V.sessionId,V)}let X=j.length===0?W:Array.from(f.values()).sort((V,H)=>H.startedAt.localeCompare(V.startedAt)).slice(0,Q),Y=await dq($,X);if(J.hydrate===!1)return Y.map((V)=>y3(V));return await SA($,Y)}async function lq($){let J=$.trim();if(!J)return;let Q=wA(CA(),J,`${J}.json`),Z=await NA(Q,"utf8").catch(()=>{return});if(!Z)return;try{let W=S0.safeParse(JSON.parse(Z));return W.success?W.data.messages_path:void 0}catch{return}}async function b3($,J={}){let Q=new Map;return await nQ({listSessions:async(W)=>{let j=await $.listSessions(W);Q.clear();for(let f of j)Q.set(f.sessionId,f);return j.map(Y4)},readSessionMessages:async(W)=>{let j=Q.get(W)?.messagesPath??await lq(W);return await M1(j)}},J)}var lB={};w(lB,{resolveSessionBackend:()=>FW,createRuntimeHost:()=>r8});import{captureSdkError as uB}from"@sctg/cline-shared";import{createSessionId as gP,isHubProtocolCompatible as mP,resolveClineBuildEnv as vP,resolveHubCommandTimeoutMs as cP}from"@sctg/cline-shared";import{spawn as FP}from"node:child_process";import{closeSync as UP,mkdirSync as DP,openSync as RP}from"node:fs";import{basename as LP,dirname as OP,join as TP}from"node:path";import{fileURLToPath as _P}from"node:url";import{CLINE_RUN_AS_HUB_DAEMON_ENV as MP,isHubDaemonProcess as pA,isHubProtocolCompatible as zP,resolveClineBuildEnv as rA,withResolvedClineBuildEnv as qP}from"@sctg/cline-shared";import{createHash as pq,randomBytes as rq}from"node:crypto";import{existsSync as iq}from"node:fs";import{chmod as nq,mkdir as h3,readFile as IA,rm as k3,writeFile as xA}from"node:fs/promises";import{dirname as gA,join as I3}from"node:path";import{resolveClineDataDir as L2,resolveClineDir as mA}from"@sctg/cline-shared/storage";var bA="3.89.2-beta.
|
|
497
|
+
`)[0]??W);return kq(j,50)}return}function xq($){let J=0;for(let Q of $)J+=rQ(Q.metrics?.cost)??0;return J}function gq($){let J,Q;for(let Z=$.length-1;Z>=0;Z-=1){let W=$[Z];if(!J)J=s0(W.modelInfo?.provider);if(!Q)Q=s0(W.modelInfo?.id);if(J&&Q)break}return{provider:J,model:Q}}function mq($){return s0($?.provider)??s0($?.provider&&typeof $.provider==="object"&&!Array.isArray($.provider)?$.provider.id:void 0)}function vq($){return s0($?.model)??s0($?.model&&typeof $.model==="object"&&!Array.isArray($.model)?$.model.id:void 0)}function y3($,J){let Q=wq($.metadata),Z=fJ(J?.title)??fJ(Q?.title),W=rQ(J?.totalCost)??rQ(Q?.totalCost),j=Q||Z!==void 0||W!==void 0?{...Q??{},...Z!==void 0?{title:Z}:{},...W!==void 0?{totalCost:W}:{}}:void 0;return{...$,provider:s0(J?.provider)??s0($.provider)??mq(Q)??"",model:s0(J?.model)??s0($.model)??vq(Q)??"",metadata:j}}function cq($){let J=$.content;if(!Array.isArray(J))return!1;return J.some((Q)=>!!Q&&typeof Q==="object"&&Q.type==="tool-call")}function uq($,J){if($.status!=="running"||$.interactive!==!0)return!1;let Q=J.at(-1);return Q?.role==="assistant"&&!cq(Q)}async function dq($,J){return await Promise.all(J.map(async(Q)=>{if(Q.status!=="running"||Q.interactive!==!0)return Q;let Z=await $.readSessionMessages(Q.sessionId);return uq(Q,Z)?{...Q,status:"idle"}:Q}))}async function SA($,J){return await Promise.all(J.map(async(Q)=>{let Z=y3(Q),W=Boolean(fJ(Z.metadata?.title)),j=Boolean(s0(Z.provider)),f=Boolean(s0(Z.model)),X=rQ(Z.metadata?.totalCost),Y=X!==void 0&&X>0;if(W&&j&&f&&Y)return Z;let V=await $.readSessionMessages(Q.sessionId);if(V.length===0)return Z;let H=gq(V),A=xq(V);return y3(Q,{title:W?void 0:Iq(V),provider:j?void 0:H.provider,model:f?void 0:H.model,totalCost:Y||A<=0?void 0:A})}))}async function nQ($,J={}){let Q=E3(J.limit),Z=J.includeSubagents===!0,W=await bq($,Q,{includeSubagents:Z}),j=J.includeManifestFallback===!0&&W.length<Q?await Eq(Math.min(Math.max(Q*2,100),500)):[],f=new Map;for(let V of[...W,...j]){if(f.has(V.sessionId))continue;f.set(V.sessionId,V)}let X=j.length===0?W:Array.from(f.values()).sort((V,H)=>H.startedAt.localeCompare(V.startedAt)).slice(0,Q),Y=await dq($,X);if(J.hydrate===!1)return Y.map((V)=>y3(V));return await SA($,Y)}async function lq($){let J=$.trim();if(!J)return;let Q=wA(CA(),J,`${J}.json`),Z=await NA(Q,"utf8").catch(()=>{return});if(!Z)return;try{let W=S0.safeParse(JSON.parse(Z));return W.success?W.data.messages_path:void 0}catch{return}}async function b3($,J={}){let Q=new Map;return await nQ({listSessions:async(W)=>{let j=await $.listSessions(W);Q.clear();for(let f of j)Q.set(f.sessionId,f);return j.map(Y4)},readSessionMessages:async(W)=>{let j=Q.get(W)?.messagesPath??await lq(W);return await M1(j)}},J)}var lB={};w(lB,{resolveSessionBackend:()=>FW,createRuntimeHost:()=>r8});import{captureSdkError as uB}from"@sctg/cline-shared";import{createSessionId as gP,isHubProtocolCompatible as mP,resolveClineBuildEnv as vP,resolveHubCommandTimeoutMs as cP}from"@sctg/cline-shared";import{spawn as FP}from"node:child_process";import{closeSync as UP,mkdirSync as DP,openSync as RP}from"node:fs";import{basename as LP,dirname as OP,join as TP}from"node:path";import{fileURLToPath as _P}from"node:url";import{CLINE_RUN_AS_HUB_DAEMON_ENV as MP,isHubDaemonProcess as pA,isHubProtocolCompatible as zP,resolveClineBuildEnv as rA,withResolvedClineBuildEnv as qP}from"@sctg/cline-shared";import{createHash as pq,randomBytes as rq}from"node:crypto";import{existsSync as iq}from"node:fs";import{chmod as nq,mkdir as h3,readFile as IA,rm as k3,writeFile as xA}from"node:fs/promises";import{dirname as gA,join as I3}from"node:path";import{resolveClineDataDir as L2,resolveClineDir as mA}from"@sctg/cline-shared/storage";var bA="3.89.2-beta.20260619085118";var XJ={name:"@sctg/cline-core",description:"Cline Core SDK for Node Runtime",version:bA,repository:{type:"git",url:"https://github.com/TEA-ching/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"},"./services/feature-flags/posthog":{types:"./dist/services/feature-flags/posthog.d.ts",import:"./dist/services/feature-flags/posthog.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:{"@sctg/cline-agents":"workspace:*","@sctg/cline-shared":"workspace:*","@sctg/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","markdown-docx":"^1.6.0",nanoid:"^5.1.7","simple-git":"3.36.0",ws:"^8.20.0",yaml:"^2.8.2",zod:"^4.3.6"},peerDependencies:{"posthog-node":"^5.8.0"},peerDependenciesMeta:{"posthog-node":{optional:!0}},devDependencies:{"@types/ws":"^8.18.1","posthog-node":"^5.8.0"},engines:{node:">=22"},files:["dist","!dist/**/*.d.ts.map"]};var aq="CLINE_HUB_DISCOVERY_PATH",sq="CLINE_HUB_BUILD_ID",hA=30000,oq=15000,tq=100;function eq($){return $.replace(/[^a-zA-Z0-9_.-]+/g,"_")}function $P($){return pq("sha256").update($).digest("hex").slice(0,12)}function JP($){if(!Number.isInteger($)||!$||$<=0)return!1;try{return process.kill($,0),!0}catch(J){return J instanceof Error&&"code"in J?String(J.code)==="EPERM":!1}}function aQ(){return rq(32).toString("hex")}function QP($){return new Promise((J)=>setTimeout(J,$))}function ZP($){return`${$}.lock`}async function WP($){try{let J=JSON.parse(await IA(I3($,"owner.json"),"utf8"));if(typeof J.pid!=="number"||typeof J.acquiredAt!=="string")return;return{pid:J.pid,acquiredAt:J.acquiredAt}}catch{return}}async function kA($){await k3($,{recursive:!0,force:!0}).catch(()=>{return})}function sQ(){return process.env[sq]?.trim()||String(XJ.version)}function d$($=process.argv[1]?.trim()||process.cwd()){let J=`hub-${$P($)}`,Q=process.env[aq]?.trim()||I3(L2(),"locks","hub","owners",`${eq(J)}.json`);return{ownerId:J,discoveryPath:Q}}function vA($=`hub-${Date.now().toString(36)}`){return d$($)}async function K0($){try{let J=JSON.parse(await IA($,"utf8"));if(typeof J.hubId!=="string"||typeof J.protocolVersion!=="string"||typeof J.authToken!=="string"||typeof J.host!=="string"||typeof J.port!=="number"||typeof J.url!=="string"||typeof J.startedAt!=="string"||typeof J.updatedAt!=="string")return;return{hubId:J.hubId,protocolVersion:J.protocolVersion,minClientProtocolVersion:typeof J.minClientProtocolVersion==="string"?J.minClientProtocolVersion:void 0,maxClientProtocolVersion:typeof J.maxClientProtocolVersion==="string"?J.maxClientProtocolVersion:void 0,capabilities:Array.isArray(J.capabilities)?J.capabilities.filter((Q)=>typeof Q==="string"):void 0,coreVersion:typeof J.coreVersion==="string"?J.coreVersion:void 0,buildId:typeof J.buildId==="string"?J.buildId:void 0,authToken:J.authToken,host:J.host,port:J.port,url:J.url,pid:typeof J.pid==="number"?J.pid:void 0,startedAt:J.startedAt,updatedAt:J.updatedAt}}catch{return}}async function oQ($,J){await h3(gA($),{recursive:!0}),await k3($,{force:!0}).catch(()=>{return}),await xA($,`${JSON.stringify(J,null,2)}
|
|
498
498
|
`,{encoding:"utf8",mode:384}),await nq($,384)}async function E0($){await k3($,{force:!0}).catch(()=>{return})}async function tQ($,J){let Q=ZP($);await h3(gA(Q),{recursive:!0});let Z=Date.now()+oq;while(!0)try{await h3(Q,{recursive:!1}),await xA(I3(Q,"owner.json"),`${JSON.stringify({pid:process.pid,acquiredAt:new Date().toISOString()},null,2)}
|
|
499
499
|
`,"utf8");try{return await J()}finally{await kA(Q)}}catch(W){if((W instanceof Error&&"code"in W?String(W.code):"")!=="EEXIST")throw W;let f=await WP(Q),X=f?Date.now()-Date.parse(f.acquiredAt):hA+1;if(!f||!JP(f.pid)||X>hA){await kA(Q);continue}if(Date.now()>=Z)throw Error(`Timed out waiting for hub startup lock ${Q}`);await QP(tq)}}async function l$($,J){try{let Q=await fetch(J?.authToken?x3($):eQ($),{headers:J?.authToken?{authorization:`Bearer ${J.authToken}`}:void 0});if(!Q.ok)return;let Z=await Q.json();if(typeof Z.protocolVersion!=="string"||typeof Z.host!=="string"||typeof Z.port!=="number"||typeof Z.url!=="string")return;return{protocolVersion:Z.protocolVersion,minClientProtocolVersion:typeof Z.minClientProtocolVersion==="string"?Z.minClientProtocolVersion:void 0,maxClientProtocolVersion:typeof Z.maxClientProtocolVersion==="string"?Z.maxClientProtocolVersion:void 0,capabilities:Array.isArray(Z.capabilities)?Z.capabilities.filter((W)=>typeof W==="string"):void 0,coreVersion:typeof Z.coreVersion==="string"?Z.coreVersion:void 0,buildId:typeof Z.buildId==="string"?Z.buildId:void 0,host:Z.host,port:Z.port,url:Z.url,hubId:typeof Z.hubId==="string"?Z.hubId:void 0,authToken:typeof Z.authToken==="string"?Z.authToken:void 0,pid:typeof Z.pid==="number"?Z.pid:void 0,startedAt:typeof Z.startedAt==="string"?Z.startedAt:void 0,updatedAt:typeof Z.updatedAt==="string"?Z.updatedAt:void 0}}catch{return}}function A$($,J,Q="/hub"){return new URL(`ws://${$}:${J}${Q}`).toString()}function eQ($){let J=new URL($);return J.protocol=J.protocol==="wss:"?"https:":"http:",J.pathname="/health",J.search="",J.toString()}function x3($){let J=new URL(eQ($));return J.pathname="/status",J.toString()}function cA($){return iq($)}import{CLINE_HUB_DEV_PORT as jP,CLINE_HUB_PORT as fP,resolveClineBuildEnv as XP}from"@sctg/cline-shared";var YP="CLINE_HUB_HOST",VP="CLINE_HUB_PORT",HP="CLINE_HUB_PATHNAME",g3="127.0.0.1",m3=fP,v3="/hub";function uA($){return XP($)==="development"?jP:m3}function c3($={}){return($.env??process.env)[YP]?.trim()||g3}function h8($={}){let Q=($.env??process.env)[VP]?.trim();if(!Q)return uA($);let Z=Number.parseInt(Q,10);if(!Number.isInteger(Z)||Z<1||Z>65535)return uA($);return Z}function u3($={}){return($.env??process.env)[HP]?.trim()||v3}function o0($={},J={}){return{host:$.host??c3(J),port:$.port??h8(J),pathname:$.pathname??u3(J)}}import{join as AP}from"node:path";var BP="shared:cline",KP="CLINE_HUB_DISCOVERY_PATH",GP="hub-production";function dA($){let J=g$($.trim());return d$(`workspace:${J||$.trim()}`)}function b0($=BP){return d$($)}function t0(){return{ownerId:GP,discoveryPath:process.env[KP]?.trim()||AP(L2(),"locks","hub","production.json")}}var PP=8000,NP=200,wP=3000,CP=100,SP=[100,250,500,1000,2000],yP="--cline-hub-daemon";function EP($){return[...$.host?["--host",$.host]:[],...typeof $.port==="number"?["--port",String($.port)]:[],...$.pathname?["--pathname",$.pathname]:[]]}function bP(){try{let $=TP(L2(),"logs","hub-daemon.log");return DP(OP($),{recursive:!0}),{fd:RP($,"a"),logPath:$}}catch{return}}function iA(){return rA()==="production"?t0():b0()}function O2($){return zP($).compatible}function lA($,J,Q){if(!J||J.url!==Q)return $;return{...$,authToken:$.authToken??J.authToken,pid:$.pid??J.pid}}async function T2($,J){try{return await l$($,{authToken:J})}catch{return}}async function hP($,J){let Q=Date.now()+J;while(Date.now()<Q){if(!(await T2($))?.url)return!0;await new Promise((W)=>setTimeout(W,CP))}return!1}async function $9($,J){if(await VJ($.url,$.authToken).catch(()=>!1),$.pid)try{process.kill($.pid,"SIGTERM")}catch{}let Q=await hP($.url,wP);return await E0(J).catch(()=>{return}),Q}async function YJ($,J){if(O2($))return!0;return $9($,J)}async function nA($){if(rA()!=="production")return;let J=b0();if(J.discoveryPath===$.discoveryPath)return;let Q=await K0(J.discoveryPath);if(Q?.url)await $9(Q,J.discoveryPath);else await E0(J.discoveryPath).catch(()=>{return})}function kP(){let $=import.meta.url.endsWith(".ts")?"ts":"js";return _P(new URL(`./entry.${$}`,import.meta.url))}function IP($,J){let Q=kP(),Z=process.execPath?.trim();if(!Z)throw Error("unable to resolve runtime executable for hub daemon");let W=LP(Z).toLowerCase().includes("bun"),j=Q.startsWith("/$bunfs/"),f=W&&Q.toLowerCase().endsWith(".ts"),X=j?[yP]:[...f?["--conditions=development"]:[],Q];return{launcher:Z,args:[...X,"--cwd",$,...EP(J)],cwd:$,env:{...qP(process.env),CLINE_NO_INTERACTIVE:"1",[MP]:"1"}}}function xP($){if(!$||typeof $!=="object")return!1;if(("code"in $?$.code:void 0)==="ETXTBSY")return!0;let Q="message"in $?$.message:void 0;return typeof Q==="string"&&Q.includes("ETXTBSY")}function d3($,J={}){if(pA())return;let Q=IP($,J),Z=bP();try{FP(Q.launcher,Q.args,{detached:!0,stdio:Z?["ignore",Z.fd,Z.fd]:"ignore",env:Q.env,cwd:Q.cwd,windowsHide:!0}).unref()}finally{if(Z)UP(Z.fd)}}async function k8($,J={}){for(let Q=0;;Q++)try{d3($,J);return}catch(Z){let W=SP[Q];if(!xP(Z)||W===void 0)throw Z;await new Promise((j)=>setTimeout(j,W))}}function J9($,J={}){if(pA())return;let Q=iA(),Z=o0(J),W=A$(Z.host,Z.port,Z.pathname),j=J.allowPortFallback===!0&&Z.port!==0;nA(Q).catch(()=>{return}).then(()=>K0(Q.discoveryPath)).then(async(f)=>{let X=!1;if(f?.url)if(!f.authToken){if(X=!0,!await $9(f,Q.discoveryPath)&&!j)return}else{let H=await T2(f.url,f.authToken);if(H?.url&&O2(H)&&await R$(H.url,{authToken:f.authToken}))return;if(H?.url)await YJ({...H,authToken:f.authToken},Q.discoveryPath);else await E0(Q.discoveryPath).catch(()=>{return})}let Y=await T2(W);if(Y?.url){if(O2(Y)){if(!j||!X)return}else if(!await YJ({...Y,authToken:void 0},Q.discoveryPath)&&!j)return}let V=j?{...Z,port:0}:Z;await k8($,V)}).catch(()=>{})}async function aA($,J={}){let Q=iA(),Z=J.host!==void 0||J.port!==void 0||J.pathname!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),W=o0(J),j=A$(W.host,W.port,W.pathname),f=(K)=>{if(!Z)z1(K.url,K.authToken);return K};await nA(Q).catch(()=>{return});let X=await K0(Q.discoveryPath),Y=!1;if(X?.url){let K=X.authToken;if(!K)Y=!0,await $9(X,Q.discoveryPath);else{let G=await T2(X.url,K);if(G?.url&&O2(G)&&await R$(G.url,{authToken:K}))return f({url:G.url,authToken:K});if(G?.url)await YJ({...G,authToken:K},Q.discoveryPath);else await E0(Q.discoveryPath).catch(()=>{return})}}let V=await T2(j);if(V?.url){let K=lA(V,X,j);if(O2(V))throw Error(`A compatible Cline Hub is already running at ${j}, but its discovery record is missing or unreadable. Run 'cline doctor fix' to repair local hub discovery.${Y?" This can happen immediately after upgrading from a build that wrote an empty hub auth token; run 'cline doctor fix' to stop the old daemon and repair local hub discovery.":""}`);if(!await YJ(K,Q.discoveryPath)&&J.allowPortFallback!==!0&&W.port!==0)throw Error(`An incompatible Cline Hub is already running at ${j} and could not be retired automatically. Run 'cline doctor fix' to stop stale hub daemons before starting a new hub.`)}let A=J.allowPortFallback===!0&&W.port!==0?{...W,port:0}:W;await k8($,A);let B=Date.now()+PP;while(Date.now()<B){let K=await K0(Q.discoveryPath);if(K?.url&&K.authToken){let R=await T2(K.url,K.authToken);if(R?.url&&O2(R)&&await R$(R.url,{authToken:K.authToken}))return f({url:R.url,authToken:K.authToken})}let G=await T2(j);if(G?.url&&!O2(G)){let R=lA(G,K,j);if(!await YJ(R,Q.discoveryPath)&&J.allowPortFallback!==!0&&W.port!==0)throw Error(`An incompatible Cline Hub is still running at ${j} and could not be retired automatically. Run 'cline doctor fix' to stop stale hub daemons before starting a new hub.`)}await new Promise((R)=>setTimeout(R,NP))}throw Error("Timed out waiting for detached hub startup.")}function Q9(){return vP()==="production"?t0():b0()}function uP(){let $=globalThis.WebSocket;if(!$)throw Error("Global WebSocket is not available in this runtime. Node 22+ is required for hub mode.");return $}function $B($){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((J)=>Buffer.from(J))).toString();if($&&typeof $==="object"&&"data"in $&&typeof $.data<"u")return $B($.data);return String($)}function dP($){if(typeof $==="string")return $;if($ instanceof Uint8Array)return Buffer.from($).toString("utf8");if($ instanceof ArrayBuffer)return Buffer.from($).toString("utf8");return""}function sA($){let J=$,Q=dP(J.reason);return new P0("hub_connection_closed",J.code||Q?`Hub connection closed (code=${J.code??0}${Q?`, reason=${Q}`:""})`:l3,{closeCode:J.code,closeReason:Q||void 0})}function lP($,J){if($ instanceof P0)return $;if($ instanceof Error)return new P0("hub_connect_failed",$.message);if($&&typeof $==="object"&&"error"in $&&$.error instanceof Error)return new P0("hub_connect_failed",$.error.message);let Q=$&&typeof $==="object"&&"message"in $&&typeof $.message==="string"?$.message.trim():"";if(Q)return new P0("hub_connect_failed",Q);let Z=$&&typeof $==="object"&&"type"in $&&typeof $.type==="string"?$.type.trim():"";return new P0("hub_connect_failed",Z?`Failed to connect to hub at ${J.toString()} (${Z} event before socket open).`:`Failed to connect to hub at ${J.toString()}.`)}var pP=8000,rP=200,oA="*",tA=8000,iP="cline-hub-auth.",JB=new Map,QB=new Set,nP=3000,aP=3000,sP=100,l3="Hub connection closed",oP=250,tP=5000,eA=0.5;class P0 extends Error{code;details;constructor($,J,Q){super(J);this.code=$;this.details=Q;this.name="HubTransportError"}}function i3($){return $ instanceof P0}class I8 extends Error{command;code;constructor($,J,Q){super(Q);this.command=$;this.code=J;this.name="HubCommandError"}}function Z9($,J){return $ instanceof I8&&$.code==="hub_command_timeout"&&(J===void 0||$.command===J)}function ZB($){let J=$.searchParams.get("authToken")?.trim();if($.searchParams.delete("authToken"),J)return J;let Q=n3($.toString());return Q?JB.get(Q):void 0}function eP($){try{let Q=new URL($).hostname.toLowerCase().replace(/^\[|\]$/g,"");return Q==="localhost"||Q==="127.0.0.1"||Q==="::1"}catch{return!1}}function n3($){if(!eP($))return;let J=new URL(q1($));return J.search="",J.hash="",J.toString()}function p3($){let J=n3($);return!!J&&QB.has(J)}function z1($,J){let Q=n3($);if(Q){if(QB.add(Q),J?.trim())JB.set(Q,J)}return $}class B${options;socket;connectPromise;clientId;currentUrl;recoveryPromise;pendingReplies=new Map;listeners=new Set;subscriptionCounts=new Map;reconnectTimer;reconnectAttempt=0;closedByClient=!1;lastCloseError=new P0("hub_connection_closed",l3);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),J=this.options.authToken?.trim()||ZB($);$.hash="";let Z=new(uP())($.toString(),J?[`${iP}${J}`]:void 0);this.socket=Z;let W=!1;this.connectPromise=new Promise((j,f)=>{let X=!1,Y=setTimeout(()=>{if(X)return;X=!0,W=!0,this.lastCloseError=new P0("hub_connect_timeout",`Timed out connecting to hub after ${tA}ms`),this.sawSocketClose=!1,this.connectPromise=void 0,this.socket=void 0;try{Z.close()}catch{}f(this.lastCloseError)},tA);Z.addEventListener("open",()=>{if(X)return;X=!0,clearTimeout(Y),j()}),Z.addEventListener("error",(V)=>{if(X)return;X=!0,clearTimeout(Y),this.lastCloseError=lP(V,$),this.sawSocketClose=!1,this.connectPromise=void 0,this.socket=void 0,f(this.lastCloseError)}),Z.addEventListener("close",(V)=>{if(X)return;if(X=!0,clearTimeout(Y),!W)this.lastCloseError=sA(V),this.sawSocketClose=!0;this.connectPromise=void 0,this.socket=void 0,f(this.lastCloseError)})}),Z.addEventListener("message",(j)=>{this.handleFrame(JSON.parse($B(j)))}),Z.addEventListener("close",(j)=>{if(this.socket!==Z)return;if(!W)this.lastCloseError=sA(j),this.sawSocketClose=!0;this.registered=!1;for(let f of this.pendingReplies.values())f.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 j of this.subscriptionCounts.keys())this.sendSubscriptionFrame("stream.subscribe",this.subscriptionSessionIdFromKey(j));this.reconnectAttempt=0}subscribe($,J){let Q=J?.sessionId?.trim()||void 0,Z={listener:$,sessionId:Q};return this.listeners.add(Z),this.adjustSubscriptionCount(Q,1),()=>{if(!this.listeners.delete(Z))return;this.adjustSubscriptionCount(Q,-1)}}async command($,J,Q,Z){let W=0,j=$!=="client.register"&&$!=="client.unregister";while(!0)try{return await this.commandOnce($,J,Q,Z)}catch(f){if(!j||W>=1||!await this.recoverLocalHubTransport(f))throw f;W+=1}}async commandOnce($,J,Q,Z){await this.connect();let W=gP("hubreq_"),j=cP($,Z?.timeoutMs),f=new Promise((Y,V)=>{let H=j===null?void 0:setTimeout(()=>{if(!this.pendingReplies.delete(W))return;V(new I8($,"hub_command_timeout",`Hub command ${$} timed out after ${j}ms (hub=${this.currentUrl}, requestId=${W}, clientId=${this.clientId}). Check hub-daemon.log for matching command.start/command.slow entries, or run 'cline doctor fix' to restart the hub.`))},j);this.pendingReplies.set(W,{resolve:(A)=>{if(H)clearTimeout(H);Y(A)},reject:(A)=>{if(H)clearTimeout(H);V(A)}})});try{this.sendFrame({kind:"command",envelope:{version:"v1",command:$,requestId:W,clientId:this.clientId,sessionId:Q,timeoutMs:j,payload:J}})}catch(Y){throw this.pendingReplies.delete(W),Y}let X=await f;if(!X.ok){if(X.error?.code===F2){let Y=Q??(typeof J?.sessionId==="string"?J.sessionId:void 0);throw new c$(Y,X.error.message)}throw new I8($,X.error?.code,X.error?.message??`Hub command ${$} failed`)}return X}async recoverLocalHubTransport($){if(!p3(this.currentUrl)||!i3($))return!1;if(this.recoveryPromise)return await this.recoveryPromise;return this.recoveryPromise=(async()=>{let J=await _2({workspaceRoot:this.options.workspaceRoot,cwd:this.options.cwd}).catch(()=>{return});if(!J)return!1;return this.currentUrl=J,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(oP*2**this.reconnectAttempt,tP),J=Math.round($*(1-eA)+Math.random()*$*eA);this.reconnectTimer=setTimeout(()=>{this.reconnectTimer=void 0,this.reconnectSubscribedTransport()},J)}async reconnectSubscribedTransport(){if(this.closedByClient||!this.hasActiveSubscriptions())return;try{await this.connect(),this.reconnectAttempt=0}catch{if(!p3(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 P0("hub_connection_closed",l3),this.sawSocketClose=!1;for(let J of this.pendingReplies.values())J.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 P0("hub_connection_not_open","Hub connection is not open.");throw this.lastCloseError}this.socket.send(JSON.stringify($))}sendSubscriptionFrame($,J){this.sendFrame({kind:$,clientId:this.clientId,...J?{sessionId:J}:{}})}adjustSubscriptionCount($,J){let Q=this.subscriptionKeyForSessionId($),Z=(this.subscriptionCounts.get(Q)??0)+J;if(Z<=0){if(this.subscriptionCounts.delete(Q),!this.hasActiveSubscriptions())this.clearReconnectTimer();if(J<0&&this.socket?.readyState===1)this.sendSubscriptionFrame("stream.unsubscribe",$);return}if(this.subscriptionCounts.set(Q,Z),J>0&&Z===1&&this.socket?.readyState===1)this.sendSubscriptionFrame("stream.subscribe",$)}subscriptionKeyForSessionId($){return $??oA}subscriptionSessionIdFromKey($){return $===oA?void 0:$}handleFrame($){switch($.kind){case"reply":{let J=$.envelope.requestId;if(!J)return;let Q=this.pendingReplies.get(J);if(!Q)return;this.pendingReplies.delete(J),Q.resolve($.envelope);return}case"event":for(let J of this.listeners){if(J.sessionId&&J.sessionId!==$.envelope.sessionId?.trim())continue;J.listener($.envelope)}return;case"command":case"stream.subscribe":case"stream.unsubscribe":return}}}function q1($){let J=new URL($);if(J.protocol==="http:")J.protocol="ws:";else if(J.protocol==="https:")J.protocol="wss:";return J.toString()}async function R$($,J){let Q=new B$({url:$,authToken:J?.authToken,clientType:"hub-healthcheck",displayName:"hub healthcheck",workspaceRoot:J?.workspaceRoot,cwd:J?.cwd});try{return await Q.connect(),!0}catch{return!1}finally{Q.close()}}async function r3($,J){let Q=q1($),Z=await l$(Q,{authToken:J?.authToken});if(!Z)return{status:"unreachable",url:Q};if(!mP(Z).compatible)return{status:"protocol_mismatch",url:Q};if(J?.verifyConnection===!0&&!await R$(Q,{workspaceRoot:J.workspaceRoot,cwd:J.cwd,authToken:J.authToken}))return{status:"unreachable",url:Q};return{status:"compatible",url:Q}}async function $N($){let J=Date.now()+pP;while(Date.now()<J){let Q=await K0($.discoveryPath);if(Q?.url){let Z=await r3(Q.url,{verifyConnection:!0,authToken:Q.authToken});if(Z.status==="compatible")return z1(Z.url,Q.authToken)}await new Promise((Z)=>setTimeout(Z,rP))}return}async function JN($){let J=Date.now()+aP;while(Date.now()<J){if(!(await l$($).catch(()=>{return}))?.url)return!0;await new Promise((Z)=>setTimeout(Z,sP))}return!1}function QN($,J){try{return q1($)===q1(J)}catch{return!1}}function ZN($){return($&&typeof $==="object"&&Array.isArray($.sessions)?$.sessions:[]).some((Q)=>{if(!Q||typeof Q!=="object")return!1;let Z=Q;if(Z.status==="running"||Z.status==="idle"||Z.status==="pending")return!0;return Array.isArray(Z.participants)&&Z.participants.length>0})}async function WN($,J,Q){let Z=new B$({url:$,authToken:J,clientType:"hub-recovery-check",displayName:"hub recovery check",workspaceRoot:Q?.workspaceRoot,cwd:Q?.cwd});try{let W=await Z.command("session.list",{limit:500},void 0,{timeoutMs:nP});return!ZN(W.payload)}catch{return!1}finally{await Z.dispose().catch(()=>{return})}}async function HJ($={}){if($.endpoint?.trim()){let W=await r3($.endpoint);return W.status==="compatible"?W.url:void 0}let J=Q9(),Q=await K0(J.discoveryPath);if(!Q?.url)return;let Z=await r3(Q.url,{authToken:Q.authToken});if(Z.status==="compatible")return z1(Z.url,Q.authToken);if(Z.status==="protocol_mismatch")await E0(J.discoveryPath).catch(()=>{return});return}async function _2($={}){let J=await HJ($);if(J&&await R$(J,{workspaceRoot:$.workspaceRoot,cwd:$.cwd}))return J;if($.endpoint?.trim())return;let Q=Q9();return await k8($.workspaceRoot??process.cwd()),await $N(Q)}async function VJ($,J){let Q=new URL($),Z=J?.trim()||ZB(Q);if(Q.protocol==="ws:")Q.protocol="http:";else if(Q.protocol==="wss:")Q.protocol="https:";return Q.pathname="/shutdown",Q.hash="",(await fetch(Q,{method:"POST",headers:Z?{authorization:`Bearer ${Z}`}:void 0})).ok}async function a3($=Q9()){let J=await K0($.discoveryPath);if(!J?.url)return!1;try{if(await VJ(J.url,J.authToken))return!0}catch{}return!1}async function W9($){if(!p3($.url))return;let J=Q9(),Q=await K0(J.discoveryPath);if(!Q?.url||!QN(Q.url,$.url))return;if(!await WN(Q.url,Q.authToken,{workspaceRoot:$.workspaceRoot,cwd:$.cwd}))return;if(!await a3())return;if(!await JN(Q.url))return;return await E0(J.discoveryPath).catch(()=>{return}),await _2({workspaceRoot:$.workspaceRoot,cwd:$.cwd})}var UB={};w(UB,{HubRuntimeHost:()=>p$});import{captureSdkError as jB,createSessionId as fB,HUB_CHECKPOINT_CAPABILITY as YN,HUB_COMPACTION_CAPABILITY as VN,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as HN,HUB_HOOK_CAPABILITY_PREFIX as AN,HUB_MISTAKE_LIMIT_CAPABILITY as BN,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as KN,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as GN,isHubToolExecutorName as FN}from"@sctg/cline-shared";var WB={};w(WB,{createCoreSessionSnapshot:()=>L$,coreSessionSnapshotToRecord:()=>j9});function jN($){return $?JSON.parse(JSON.stringify($)):void 0}function fN($){return $?JSON.parse(JSON.stringify($)):void 0}function XN($){let J=$?.checkpoint&&typeof $.checkpoint==="object"&&!Array.isArray($.checkpoint)?$.checkpoint:void 0,Z=(Array.isArray(J?.history)?J.history:[]).filter((f)=>!!f&&typeof f==="object"&&!Array.isArray(f)).flatMap((f)=>{let X=typeof f.ref==="string"?f.ref.trim():"",Y=Number(f.createdAt),V=Number(f.runCount);if(!X||!Number.isFinite(Y)||!Number.isInteger(V))return[];return[{ref:X,createdAt:Y,runCount:V,...f.kind==="stash"||f.kind==="commit"?{kind:f.kind}:{}}]}),W=Z.at(-1),j=$?.checkpointEnabled===!0?!0:void 0;if(!j&&Z.length===0)return;return{...j?{enabled:j}:{},...W?{latest:W}:{},history:Z}}function L$($){let{session:J}=$,Q=jN(J.metadata);return{version:1,sessionId:J.sessionId,source:J.source,status:J.status,createdAt:J.startedAt,updatedAt:J.updatedAt,endedAt:J.endedAt??null,exitCode:J.exitCode??null,interactive:J.interactive,workspace:{cwd:J.cwd,root:J.workspaceRoot},model:{providerId:J.provider,modelId:J.model},capabilities:{enableTools:J.enableTools,enableSpawn:J.enableSpawn,enableTeams:J.enableTeams},lineage:{...J.parentSessionId?{parentSessionId:J.parentSessionId}:{},...J.parentAgentId?{parentAgentId:J.parentAgentId}:{},...J.agentId?{agentId:J.agentId}:{},...J.conversationId?{conversationId:J.conversationId}:{},isSubagent:J.isSubagent},...J.teamName?{team:{name:J.teamName}}:{},...J.prompt?{prompt:J.prompt}:{},...Q?{metadata:Q}:{},...J.messagesPath?{artifacts:{messagesPath:J.messagesPath}}:{},...$.messages?{messages:fN($.messages)}:{},...$.usage?{usage:{...$.usage}}:{},...$.aggregateUsage?{aggregateUsage:{...$.aggregateUsage}}:{},...(()=>{let Z=XN(Q);return Z?{checkpoint:Z}:{}})()}}function j9($){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 x8($){if(!$)return;return JSON.parse(JSON.stringify($))}var UN=["beforeRun","afterRun","beforeModel","afterModel","beforeTool","afterTool","onEvent"];function XB($){if(!$||typeof $!=="object"||Array.isArray($))return;return JSON.parse(JSON.stringify($))}function YB($){if(!$)return;let{userInstructionService:J,...Q}=$;return JSON.parse(JSON.stringify(Q))}function VB($){let J=$&&typeof $==="object"&&!Array.isArray($)?$:{};return{agentId:typeof J.agentId==="string"?J.agentId:"",conversationId:typeof J.conversationId==="string"?J.conversationId:"",iteration:typeof J.iteration==="number"?J.iteration:0,metadata:J.metadata&&typeof J.metadata==="object"&&!Array.isArray(J.metadata)?J.metadata:void 0}}function M2($,J,Q){$.manifest.push(J),$.handlers.set(J.capabilityName,Q)}function HB($,J){let Q={manifest:[],handlers:new Map};for(let W of Object.keys(J.toolExecutors??{}).filter(FN)){let j=J.toolExecutors?.[W];if(typeof j!=="function")continue;M2(Q,{kind:"toolExecutor",executor:W,capabilityName:`${KN}${W}`},async({payload:f,abortSignal:X})=>{let Y=Array.isArray(f.args)?[...f.args]:[],V={...VB(f.context),signal:X};return{result:await j(...Y,V)}})}for(let W of $?.extraTools??[])M2(Q,{kind:"tool",name:W.name,description:W.description,inputSchema:x8(W.inputSchema)??{},...W.lifecycle?{lifecycle:x8(W.lifecycle)}:{},capabilityName:`${HN}${W.name}`},async({payload:j,abortSignal:f,progress:X})=>{let Y={...VB(j.context),signal:f};return{result:await W.execute(j.input,{...Y,emitUpdate:(H)=>{X({update:H})}})}});let Z=$?.hooks;if(Z)for(let W of UN){let j=Z[W];if(typeof j!=="function")continue;M2(Q,{kind:"hook",name:W,capabilityName:`${AN}${W}`},async({payload:f})=>({control:await j(f.context)}))}if($?.compaction?.compact){let W=$.compaction.compact;M2(Q,{kind:"compaction",capabilityName:VN,config:XB($.compaction)},async({payload:j})=>({result:await W(j.context)}))}if($?.checkpoint?.createCheckpoint){let W=$.checkpoint.createCheckpoint;M2(Q,{kind:"checkpoint",capabilityName:YN,config:XB($.checkpoint)},async({payload:j})=>({result:await W(j.context)}))}if($?.onConsecutiveMistakeLimitReached){let W=$.onConsecutiveMistakeLimitReached;M2(Q,{kind:"mistakeLimit",capabilityName:BN},async({payload:j})=>({result:await W(j.context)}))}if($?.userInstructionService){let W=$.userInstructionService;M2(Q,{kind:"userInstructionService",capabilityName:GN},async()=>{return await W.start().catch(()=>{}),{snapshot:{records:{skill:W.listRecords("skill"),rule:W.listRecords("rule"),workflow:W.listRecords("workflow")},runtimeCommands:W.listRuntimeCommands()}}})}return Q}function GB($){if(typeof $==="string"&&$.trim())return $.trim();if($ instanceof Error)return $.message.trim()||void 0;if($&&typeof $==="object"&&"message"in $){let J=$.message;if(typeof J==="string"&&J.trim())return J.trim()}return}function DN($){return GB($)??"Capability request was cancelled."}function RN($){if(typeof $!=="string")return $;try{return JSON.parse($)}catch{return $}}function LN($){return $==="completed"||$==="max_iterations"||$==="aborted"||$==="mistake_limit"||$==="error"}function ON($){if(!$||typeof $!=="object"||Array.isArray($))return;let J=$,Q=typeof J.inputTokens==="number"?J.inputTokens:void 0,Z=typeof J.outputTokens==="number"?J.outputTokens:void 0;if(Q===void 0||Z===void 0)return;return{inputTokens:Q,outputTokens:Z,cacheReadTokens:typeof J.cacheReadTokens==="number"?J.cacheReadTokens:0,cacheWriteTokens:typeof J.cacheWriteTokens==="number"?J.cacheWriteTokens:0,totalCost:typeof J.totalCost==="number"?J.totalCost:0}}function AB($){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 s3($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function P1($,J){return s3($?.[J])??0}function TN($){let J=$?.delta&&typeof $.delta==="object"?$.delta:void 0,Q=$?.totals&&typeof $.totals==="object"?$.totals:void 0,Z=$?.agent&&typeof $.agent==="object"?$.agent:void 0,W=Z?.teamRole==="teammate"||Z?.teamRole==="lead"?Z.teamRole:void 0;return{event:{type:"usage",agentId:typeof Z?.agentId==="string"?Z.agentId:void 0,conversationId:typeof Z?.conversationId==="string"?Z.conversationId:void 0,parentAgentId:typeof Z?.parentAgentId==="string"?Z.parentAgentId:void 0,inputTokens:P1(J,"inputTokens"),outputTokens:P1(J,"outputTokens"),cacheReadTokens:P1(J,"cacheReadTokens"),cacheWriteTokens:P1(J,"cacheWriteTokens"),cost:s3(J?.totalCost),totalInputTokens:P1(Q,"inputTokens"),totalOutputTokens:P1(Q,"outputTokens"),totalCacheReadTokens:P1(Q,"cacheReadTokens"),totalCacheWriteTokens:P1(Q,"cacheWriteTokens"),totalCost:s3(Q?.totalCost)},teamAgentId:typeof Z?.teamAgentId==="string"?Z.teamAgentId:void 0,teamRole:W}}function _N($){let J=$?.result&&typeof $.result==="object"&&!Array.isArray($.result)?$.result:void 0,Q=$?.reason??J?.finishReason,Z=LN(Q)?Q:Q==="failed"?"error":"completed",W=ON($?.usage??J?.usage);return{type:"done",reason:Z,text:typeof $?.text==="string"?$.text:typeof J?.text==="string"?J.text:"",iterations:typeof $?.iterations==="number"?$.iterations:typeof J?.iterations==="number"?J.iterations:0,usage:W}}function f9($,J){return $.error?.message??`hub command failed: ${J}`}function AJ($){switch($){case"idle":case"completed":return"completed";case"failed":return"failed";case"aborted":return"cancelled";default:return"running"}}function FB($){let J=$.metadata&&typeof $.metadata==="object"?JSON.parse(JSON.stringify($.metadata)):void 0;return{sessionId:$.sessionId,parentSessionId:typeof J?.parentSessionId==="string"?J.parentSessionId:void 0,agentId:$.runtimeSession?.agentId||(typeof J?.agentId==="string"?J.agentId:void 0),parentAgentId:typeof J?.parentAgentId==="string"?J.parentAgentId:void 0,conversationId:typeof J?.conversationId==="string"?J.conversationId:void 0,isSubagent:typeof J?.isSubagent==="boolean"?J.isSubagent:!1,source:typeof J?.source==="string"?J.source:U0.CORE,pid:typeof J?.pid==="number"?J.pid:void 0,startedAt:new Date($.createdAt).toISOString(),endedAt:AJ($.status)==="running"?void 0:new Date($.updatedAt).toISOString(),exitCode:AJ($.status)==="completed"?0:AJ($.status)==="failed"?1:void 0,status:AJ($.status),interactive:J?.interactive===!0,provider:typeof J?.provider==="string"?J.provider:"hub",model:typeof J?.model==="string"?J.model:"hub",cwd:$.cwd?.trim()||$.workspaceRoot,workspaceRoot:$.workspaceRoot,teamName:typeof J?.teamName==="string"?J.teamName:void 0,enableTools:$.runtimeOptions?.enableTools??J?.enableTools===!0,enableSpawn:$.runtimeOptions?.enableSpawn??J?.enableSpawn===!0,enableTeams:$.runtimeOptions?.enableTeams??J?.enableTeams===!0,prompt:typeof J?.prompt==="string"?J.prompt:void 0,metadata:J,updatedAt:new Date($.updatedAt).toISOString(),messagesPath:typeof J?.messagesPath==="string"?J.messagesPath:void 0,hookPath:typeof J?.hookPath==="string"?J.hookPath:void 0}}function N1($){if(!$||typeof $!=="object"||Array.isArray($))return;let J=$;return J.version===1&&typeof J.sessionId==="string"?JSON.parse(JSON.stringify(J)):void 0}function MN($){let J=N1($?.snapshot);if(J)return j9(J);let Q=$?.session;return Q?FB(Q):void 0}function BB($,J,Q){let Z=Q?.workspaceRoot?.trim()||J.config.workspaceRoot||J.config.cwd;return S0.parse({version:1,session_id:$,source:J.source??U0.CORE,pid:process.pid,started_at:new Date(Q?.createdAt??Date.now()).toISOString(),status:AJ(Q?.status),interactive:J.interactive===!0,provider:J.config.providerId,model:J.config.modelId,cwd:Q?.cwd?.trim()||J.config.cwd,workspace_root:Z,team_name:J.config.teamName,enable_tools:J.config.enableTools,enable_spawn:J.config.enableSpawnAgent,enable_teams:J.config.enableAgentTeams,prompt:J.prompt?.trim()||void 0,metadata:J.sessionMetadata&&Object.keys(J.sessionMetadata).length>0?J.sessionMetadata:void 0})}function KB($,J){return S0.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??J.prompt?.trim())||void 0,metadata:$.metadata,messages_path:$.artifacts?.messagesPath})}class p${runtimeAddress;pendingPrompts;client;clientOptions;clientContext;events=new jJ;sessionCapabilities=new Map;sessionClientContributionHandlers=new Map;sessionSubscriptions=new Map;pendingApprovalToolCallIds=new Set;agentDoneEmittedForCurrentRunBySession=new Set;activeCapabilityAbortControllers=new Map;defaultCapabilities;telemetry;constructor($,J){this.clientContext=J,this.clientOptions={authToken:$.authToken,clientType:$.clientType??"core-hub-runtime",displayName:$.displayName??"core hub runtime",workspaceRoot:J?.workspaceRoot,cwd:J?.cwd},this.defaultCapabilities=L0($.capabilities)??{},this.telemetry=$.telemetry,this.runtimeAddress=$.url,this.pendingPrompts={list:(Q)=>this.requestPendingPromptsList(Q),update:(Q)=>this.requestPendingPromptUpdate(Q),delete:(Q)=>this.requestPendingPromptDelete(Q)},this.client=this.createClient($.url)}createClient($){return new B$({...this.clientOptions,url:$})}async replaceClient($){let J=this.client;this.client=this.createClient($),this.runtimeAddress=$,await Promise.resolve(J.dispose()).catch(()=>{return})}async recoverLocalHubStartupDeadlock($){if(!Z9($,"session.create"))return!1;let J=await W9({url:this.client.getUrl(),workspaceRoot:this.clientContext?.workspaceRoot,cwd:this.clientContext?.cwd}).catch(()=>{return});if(!J)return!1;return await this.replaceClient(J),!0}registerPlannedSession($,J,Q){if(this.sessionCapabilities.set($,J),Q.size>0)this.sessionClientContributionHandlers.set($,Q);this.ensureSessionSubscription($)}cleanupPlannedSession($){this.sessionCapabilities.delete($),this.sessionClientContributionHandlers.delete($),this.disposeSessionSubscription($)}async connect(){await this.client.connect()}async startSession($){let J=this.resolveCapabilities($),Q=HB($.localRuntime,J),Z=$.config.sessionId?.trim()||fB(),W=()=>this.client.command("session.create",{workspaceRoot:$.config.workspaceRoot?.trim()||$.config.cwd,cwd:$.config.cwd,sessionConfig:x8({...$.config,sessionId:Z}),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:{...Q.manifest.length>0?{clientContributions:Q.manifest}:{},...$.localRuntime?.configExtensions?{configExtensions:$.localRuntime.configExtensions}:{}},toolPolicies:x8($.toolPolicies),initialMessages:$.initialMessages});this.registerPlannedSession(Z,J,Q.handlers);let j;try{j=await W()}catch(V){if(this.cleanupPlannedSession(Z),await this.recoverLocalHubStartupDeadlock(V)){this.registerPlannedSession(Z,J,Q.handlers);try{j=await W()}catch(H){throw this.cleanupPlannedSession(Z),H}}else throw V}let f=N1(j.payload?.snapshot),X=j.payload?.session,Y=(f?.sessionId??X?.sessionId)?.trim();if(!Y)throw this.cleanupPlannedSession(Z),Error("Hub runtime did not return a session id.");if(Y!==Z)this.cleanupPlannedSession(Z),this.registerPlannedSession(Y,J,Q.handlers);return{sessionId:Y,manifest:f?KB(f,$):BB(Y,$,X),manifestPath:"",messagesPath:"",result:void 0}}async restoreSession($){let J=$.sessionId.trim();if(!J)throw Error("sessionId is required");let Q=$.restore?.messages!==!1;if(Q&&!$.start)throw Error("start is required when restore.messages is true");let Z=$.start,W=Z?this.resolveCapabilities(Z):void 0,j=Z?HB(Z.localRuntime,W??{}):{manifest:[],handlers:new Map},f=Z?Z.config.sessionId?.trim()||fB():void 0;if(f&&W)this.sessionCapabilities.set(f,W);if(f&&j.handlers.size>0)this.sessionClientContributionHandlers.set(f,j.handlers),this.ensureSessionSubscription(f);let X;try{X=await this.client.command("session.restore",{sessionId:J,checkpointRunCount:$.checkpointRunCount,restore:$.restore,...Z?{workspaceRoot:Z.config.workspaceRoot?.trim()||Z.config.cwd,cwd:Z.config.cwd??$.cwd,sessionConfig:x8({...Z.config,sessionId:f}),metadata:{...Z.sessionMetadata??{},source:Z.source??U0.CORE,provider:Z.config.providerId,model:Z.config.modelId,enableTools:Z.config.enableTools,enableSpawn:Z.config.enableSpawnAgent,enableTeams:Z.config.enableAgentTeams,teamName:Z.config.teamName,prompt:Z.prompt,interactive:Z.interactive===!0},runtimeOptions:{...j.manifest.length>0?{clientContributions:j.manifest}:{},...Z.localRuntime?.configExtensions?{configExtensions:Z.localRuntime.configExtensions}:{}},toolPolicies:x8(Z.toolPolicies)}:{}},J)}catch(K){if(f)this.sessionCapabilities.delete(f),this.sessionClientContributionHandlers.delete(f),this.disposeSessionSubscription(f);throw K}if(!X.ok){let K=typeof X.payload?.error==="string"?X.payload.error:"session.restore failed";if(f)this.sessionCapabilities.delete(f),this.sessionClientContributionHandlers.delete(f),this.disposeSessionSubscription(f);throw Error(K)}let Y=N1(X.payload?.snapshot),V=X.payload?.session,H=(Y?.sessionId??V?.sessionId)?.trim();if(Q&&!H){if(f)this.sessionCapabilities.delete(f),this.sessionClientContributionHandlers.delete(f),this.disposeSessionSubscription(f);throw Error("Hub checkpoint restore returned no session id")}if(H&&f&&H!==f)this.sessionCapabilities.delete(f),this.sessionClientContributionHandlers.delete(f),this.disposeSessionSubscription(f);if(H&&W)this.sessionCapabilities.set(H,W);if(H&&j.handlers.size>0)this.sessionClientContributionHandlers.set(H,j.handlers);if(H)this.ensureSessionSubscription(H);let A=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:H,startResult:H?{sessionId:H,manifest:Y?KB(Y,Z??{}):BB(H,Z??{},V),manifestPath:"",messagesPath:"",result:void 0}:void 0,messages:A,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 J=await this.client.command("session.pending_prompts",{sessionId:$.sessionId},$.sessionId);return Array.isArray(J.payload?.prompts)?J.payload.prompts:[]}async requestPendingPromptUpdate($){this.ensureSessionSubscription($.sessionId);let J=await this.client.command("session.update_pending_prompt",{...$},$.sessionId);return{sessionId:$.sessionId,prompts:Array.isArray(J.payload?.prompts)?J.payload.prompts:[],prompt:J.payload?.prompt,updated:J.payload?.updated===!0}}async requestPendingPromptDelete($){this.ensureSessionSubscription($.sessionId);let J=await this.client.command("session.remove_pending_prompt",{...$},$.sessionId);return{sessionId:$.sessionId,prompts:Array.isArray(J.payload?.prompts)?J.payload.prompts:[],prompt:J.payload?.prompt,removed:J.payload?.removed===!0}}async getAccumulatedUsage($){let J=await this.client.command("session.get",{includeSnapshot:!0},$),Q=N1(J.payload?.snapshot);if(Q){let f=Q.usage?{...Q.usage}:void 0,X=Q.aggregateUsage?{...Q.aggregateUsage}:void 0;return f||X?{usage:f,aggregateUsage:X}:void 0}let Z=J.payload?.session,W=AB(Z?.usage),j=AB(Z?.aggregateUsage);return W||j?{usage:W,aggregateUsage:j}:void 0}async abort($,J){await this.client.command("run.abort",{sessionId:$,reason:GB(J)},$)}async stopSession($){this.sessionCapabilities.delete($),this.disposeSessionSubscription($),await this.client.command("session.detach",{sessionId:$},$)}async dispose(){for(let[$,J]of this.sessionSubscriptions){J();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 J;try{J=await this.client.command("session.get",void 0,$)}catch(Q){if(u$(Q))return;throw Q}return MN(J.payload)}async listSessions($=100){let J=await this.client.command("session.list",{limit:$}),Q=Array.isArray(J.payload?.snapshots)?J.payload.snapshots.flatMap((W)=>{let j=N1(W);return j?[j9(j)]:[]}):[];if(Q.length>0)return Q;return(J.payload?.sessions??[]).map(FB)}async listSettings($){let J=await this.client.command("settings.list",YB($));if(!J.ok)throw Error(f9(J,"settings.list"));return J.payload?.snapshot}async toggleSetting($){let J=await this.client.command("settings.toggle",YB($));if(!J.ok)throw Error(f9(J,"settings.toggle"));return{snapshot:J.payload?.snapshot,changedTypes:Array.isArray(J.payload?.changedTypes)?J.payload.changedTypes:[]}}async deleteSession($){return this.sessionCapabilities.delete($),this.disposeSessionSubscription($),(await this.client.command("session.delete",{sessionId:$})).payload?.deleted===!0}async updateSession($,J){let Q={...J.metadata??{}};if(typeof J.prompt==="string")Q.prompt=J.prompt;if(typeof J.title==="string")Q.title=J.title;return{updated:(await this.client.command("session.update",{sessionId:$,metadata:Q})).ok}}async readSessionMessages($){let J=$.trim();if(!J)return[];let Q=await this.client.command("session.messages",{sessionId:J},J);if(!Q.ok)throw jB(this.telemetry,{component:"core",operation:"hub.runtime_host.read_session_messages",error:Error(f9(Q,"session.messages")),severity:Q.error?.code==="session_not_found"?"warn":"error",handled:!0,context:{command:"session.messages",sessionId:J,errorCode:Q.error?.code,runtimeAddress:this.runtimeAddress}}),Error(f9(Q,"session.messages"));let Z=Q.payload?.messages;return Array.isArray(Z)?Z:[]}async dispatchHookEvent($){await this.client.command("session.hook",{payload:$})}subscribe($,J){return this.events.subscribe($,J)}ensureSessionSubscription($){let J=$.trim();if(!J||this.sessionSubscriptions.has(J))return;let Q=this.client.subscribe((Z)=>{this.handleHubEvent(Z)},{sessionId:J});this.sessionSubscriptions.set(J,typeof Q==="function"?Q:()=>{})}disposeSessionSubscription($){let J=$.trim();if(!J)return;this.sessionSubscriptions.get(J)?.(),this.sessionSubscriptions.delete(J),this.agentDoneEmittedForCurrentRunBySession.delete(J)}resolveCapabilities($){return L0(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:_N($.payload)}})}handleHubEvent($){let J=$.sessionId?.trim();if($.event==="capability.requested"){this.handleCapabilityRequest($).catch((Q)=>{this.captureDetachedHubEventError("hub.runtime_host.capability_request",Q,$)});return}if($.event==="capability.resolved"){this.handleCapabilityResolved($);return}if($.event==="approval.requested"){this.handleApprovalRequested($).catch((Q)=>{this.captureDetachedHubEventError("hub.runtime_host.approval_request",Q,$)});return}if(!J)return;switch($.event){case"run.started":{this.agentDoneEmittedForCurrentRunBySession.delete(J);let Q=N1($.payload?.snapshot),Z=$.payload?.session;if(Q)this.events.emit({type:"session_snapshot",payload:{sessionId:J,snapshot:Q}});this.events.emit({type:"status",payload:{sessionId:J,status:Z?.status??"running"}});return}case"iteration.started":{this.events.emit({type:"agent_event",payload:{sessionId:J,event:{type:"iteration_start",iteration:typeof $.payload?.iteration==="number"?$.payload.iteration:0}}});return}case"iteration.finished":{this.events.emit({type:"agent_event",payload:{sessionId:J,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 Q=typeof $.payload?.text==="string"?$.payload.text:"";if(!Q)return;this.events.emit({type:"agent_event",payload:{sessionId:J,event:{type:"content_start",contentType:"text",text:Q}}});return}case"assistant.finished":{this.events.emit({type:"agent_event",payload:{sessionId:J,event:{type:"content_end",contentType:"text",text:typeof $.payload?.text==="string"?$.payload.text:void 0}}});return}case"reasoning.delta":{let Q=typeof $.payload?.text==="string"?$.payload.text:"",Z=$.payload?.redacted===!0;if(!Q&&!Z)return;this.events.emit({type:"agent_event",payload:{sessionId:J,event:{type:"content_start",contentType:"reasoning",reasoning:Q,redacted:Z}}});return}case"reasoning.finished":{this.events.emit({type:"agent_event",payload:{sessionId:J,event:{type:"content_end",contentType:"reasoning",reasoning:typeof $.payload?.reasoning==="string"?$.payload.reasoning:void 0}}});return}case"agent.done":{this.emitAgentDoneIfNeeded({sessionId:J,payload:$.payload});return}case"usage.updated":{let Q=TN($.payload);this.events.emit({type:"agent_event",payload:{sessionId:J,event:Q.event,teamAgentId:Q.teamAgentId,teamRole:Q.teamRole}});return}case"tool.started":{let Q=typeof $.payload?.toolCallId==="string"?$.payload.toolCallId:void 0;if(Q&&this.pendingApprovalToolCallIds.delete(Q))return;this.emitToolCallContentStart({sessionId:J,toolCallId:Q,toolName:typeof $.payload?.toolName==="string"?$.payload.toolName:void 0,toolInput:$.payload?.input});return}case"tool.finished":{let Q=typeof $.payload?.toolCallId==="string"?$.payload.toolCallId:void 0;if(Q)this.pendingApprovalToolCallIds.delete(Q);this.events.emit({type:"agent_event",payload:{sessionId:J,event:{type:"content_end",contentType:"tool",toolCallId:Q,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 Q=N1($.payload?.snapshot),Z=$.payload?.session;if(Q)this.events.emit({type:"session_snapshot",payload:{sessionId:J,snapshot:Q}});this.events.emit({type:"status",payload:{sessionId:J,status:Z?.status??"running"}});return}case"session.pending_prompts":{this.events.emit({type:"pending_prompts",payload:{sessionId:J,prompts:Array.isArray($.payload?.prompts)?$.payload.prompts:[]}});return}case"session.pending_prompt_submitted":{let Q=$.payload?.prompt;if(!Q)return;this.events.emit({type:"pending_prompt_submitted",payload:{sessionId:J,id:Q.id,prompt:Q.prompt,delivery:Q.delivery,attachmentCount:Q.attachmentCount}});return}case"run.completed":case"run.failed":case"run.aborted":{let Q=N1($.payload?.snapshot),Z=typeof $.payload?.reason==="string"?$.payload.reason:$.event==="run.aborted"?"aborted":$.event==="run.failed"?"error":"completed";if(this.emitAgentDoneIfNeeded({sessionId:J,payload:{...$.payload,reason:Z}}),Q?.interactive===!0&&j0(Q.status))return;this.events.emit({type:"ended",payload:{sessionId:J,reason:Z,ts:$.timestamp??Date.now()}});return}default:return}}captureDetachedHubEventError($,J,Q){try{jB(this.telemetry,{component:"core",operation:$,error:J,severity:"warn",handled:!0,context:{event:Q.event,sessionId:Q.sessionId,runtimeAddress:this.runtimeAddress}})}catch{}}async handleCapabilityRequest($){let J=$.sessionId?.trim();if(!J)return;let Q=typeof $.payload?.targetClientId==="string"?$.payload.targetClientId:void 0;if(Q&&Q!==this.client.getClientId())return;let Z=typeof $.payload?.requestId==="string"?$.payload.requestId:"",W=typeof $.payload?.capabilityName==="string"?$.payload.capabilityName:"";if(!Z)return;let j=this.sessionClientContributionHandlers.get(J)?.get(W);if(!j){await this.client.command("capability.respond",{requestId:Z,ok:!1,error:`No client contribution handler registered for capability ${W} in session ${J}.`},J).catch(()=>{});return}let f=$.payload?.payload&&typeof $.payload.payload==="object"&&!Array.isArray($.payload.payload)?$.payload.payload:{},X=new AbortController;this.activeCapabilityAbortControllers.set(Z,X);let Y=(V)=>{this.client.command("capability.progress",{requestId:Z,payload:V},J).catch((H)=>{this.captureDetachedHubEventError("hub.runtime_host.capability_progress",H,$)})};try{let V=await j({payload:f,abortSignal:X.signal,progress:Y});if(X.signal.aborted)return;await this.client.command("capability.respond",{requestId:Z,ok:!0,payload:V},J)}catch(V){if(X.signal.aborted)return;await this.client.command("capability.respond",{requestId:Z,ok:!1,error:V instanceof Error?V.message:String(V)},J)}finally{this.activeCapabilityAbortControllers.delete(Z)}}handleCapabilityResolved($){if($.payload?.cancelled!==!0)return;let J=typeof $.payload.requestId==="string"?$.payload.requestId.trim():"";if(!J)return;let Q=this.activeCapabilityAbortControllers.get(J);if(!Q)return;Q.abort(DN($.payload.error))}async handleApprovalRequested($){let J=$.sessionId?.trim();if(!J)return;let Q=this.sessionCapabilities.get(J)?.requestToolApproval??this.defaultCapabilities.requestToolApproval;if(!Q)return;let Z=typeof $.payload?.approvalId==="string"?$.payload.approvalId.trim():"",W=typeof $.payload?.toolCallId==="string"?$.payload.toolCallId:"",j=typeof $.payload?.toolName==="string"?$.payload.toolName:"";if(!Z||!W||!j)return;let f=$.payload?.policy&&typeof $.payload.policy==="object"&&!Array.isArray($.payload.policy)?$.payload.policy:{autoApprove:!1},X=RN($.payload?.inputJson);this.pendingApprovalToolCallIds.add(W),this.emitToolCallContentStart({sessionId:J,toolCallId:W,toolName:j,toolInput:X});let Y=await Promise.resolve(Q({sessionId:J,agentId:typeof $.payload?.agentId==="string"?$.payload.agentId:"",conversationId:typeof $.payload?.conversationId==="string"?$.payload.conversationId:J,iteration:typeof $.payload?.iteration==="number"?$.payload.iteration:0,toolCallId:W,toolName:j,input:X,policy:f})).catch((V)=>({approved:!1,reason:V instanceof Error?V.message:`Tool approval request failed: ${String(V)}`}));await this.client.command("approval.respond",{approvalId:Z,approved:Y.approved,reason:Y.reason},J).catch(()=>{})}}var DB={};w(DB,{RemoteRuntimeHost:()=>g8});class g8 extends p${constructor($){super({url:q1($.endpoint),authToken:$.authToken,clientType:$.clientType??"core-remote-runtime",displayName:$.displayName??"core remote runtime",capabilities:$.capabilities},{workspaceRoot:$.workspaceRoot,cwd:$.cwd})}}var RB={};w(RB,{SqliteSessionStore:()=>T$});import{existsSync as zN,mkdirSync as qN}from"node:fs";import{join as PN}from"node:path";import{asBool as BJ,asOptionalString as O$,asString as r$,ensureSessionSchema as NN,loadSqliteDb as wN,nowIso as X9,toBoolInt as KJ}from"@sctg/cline-shared/db";import{resolveDbDataDir as CN}from"@sctg/cline-shared/storage";class T${sessionsDirPath;db;constructor($={}){this.sessionsDirPath=$.sessionsDir??CN()}init(){this.getRawDb()}ensureSessionsDir(){if(!zN(this.sessionsDirPath))qN(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}sessionDbPath(){return PN(this.ensureSessionsDir(),"sessions.db")}getRawDb(){if(this.db)return this.db;let $=wN(this.sessionDbPath());return NN($,{includeLegacyMigrations:!0}),this.db=$,$}close(){this.db?.close?.(),this.db=void 0}run($,J=[]){return this.getRawDb().prepare($).run(...J)}queryOne($,J=[]){return this.getRawDb().prepare($).get(...J)??void 0}queryAll($,J=[]){return this.getRawDb().prepare($).all(...J)}create($){let J=X9();this.run(`INSERT OR REPLACE INTO sessions (
|
|
500
500
|
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(Z,null,2)}`}startClaimLeaseHeartbeat($){let J=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,J,$.runId,$.claimToken).changes??0)>0}attachSessionIdToRun($,J){this.db.prepare("UPDATE cron_runs SET session_id = ?, updated_at = ? WHERE run_id = ?").run(J,F0(),$)}attachReportPathToRun($,J){this.db.prepare("UPDATE cron_runs SET report_path = ?, updated_at = ? WHERE run_id = ?").run(J,F0(),$)}}function lJ($){return $?new Date($).getTime():void 0}function KU($){let J=$.metadata?{...$.metadata}:void 0;if(J)delete J.__hubScheduleCreatedBy,delete J.__hubScheduleCwd,delete J.__hubRuntimeOptions;return J}function dJ($){let J=$.metadata;return{scheduleId:$.externalId,name:$.title,cronPattern:$.scheduleExpr??"",prompt:$.prompt??"",workspaceRoot:$.workspaceRoot??"",cwd:typeof J?.__hubScheduleCwd==="string"?J.__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:lJ($.nextRunAt),lastRunAt:lJ($.lastRunAt),createdBy:typeof J?.__hubScheduleCreatedBy==="string"?J.__hubScheduleCreatedBy:void 0,tags:$.tags,runtimeOptions:J?.__hubRuntimeOptions&&typeof J.__hubRuntimeOptions==="object"&&!Array.isArray(J.__hubRuntimeOptions)?J.__hubRuntimeOptions:void 0,metadata:KU($)}}function GU($){switch($){case"done":return"success";case"cancelled":return"aborted";case"running":return"running";case"queued":return"pending";default:return"failed"}}function UZ($,J){return{executionId:$.runId,scheduleId:J,sessionId:$.sessionId,triggeredAt:new Date($.scheduledFor??$.createdAt).getTime(),startedAt:lJ($.startedAt),endedAt:lJ($.completedAt),status:GU($.status),errorMessage:$.error}}class u2{store;materializer;runner;started=!1;disposed=!1;constructor($){this.store=new T6({dbPath:$.dbPath}),this.materializer=new G6({store:this.store}),this.runner=new D6({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(BZ($.cronPattern),!$.workspaceRoot?.trim())throw Error("workspaceRoot is required for schedules");return dJ(this.store.createHubSchedule($))}getSchedule($){let J=this.store.getHubSchedule($);return J?dJ(J):void 0}listSchedules($={}){return this.store.listHubSchedules($).map((J)=>dJ(J))}updateSchedule($,J){if(J.cronPattern!==void 0)BZ(J.cronPattern);let Q=this.store.getHubSchedule($);if(!Q)return;let Z=J.workspaceRoot!==void 0?J.workspaceRoot.trim():Q.workspaceRoot;if((J.enabled??Q.enabled)&&!Z)throw Error("workspaceRoot is required for enabled schedules");let j=this.store.updateHubSchedule($,{...J,scheduleId:$});return j?dJ(j):void 0}deleteSchedule($){return this.store.deleteHubSchedule($)}pauseSchedule($){return this.updateSchedule($,{scheduleId:$,enabled:!1})}resumeSchedule($){return this.updateSchedule($,{scheduleId:$,enabled:!0})}async triggerScheduleNow($){let J=this.store.enqueueHubScheduleRun($,"manual");if(!J)return;await this.runner.tick();let Q=this.store.getRun(J.runId)??J;return UZ(Q,$)}triggerScheduleNowDetached($){let J=this.store.enqueueHubScheduleRun($,"manual");if(!J)return;return this.runner.tick().catch(()=>{return}),UZ(J,$)}listScheduleExecutions($){let J=$.scheduleId?this.store.getHubSchedule($.scheduleId):void 0,Q={specId:J?.specId,limit:$.limit};return this.store.listRuns(Q).map((W)=>{let j=J??this.store.getSpec(W.specId);if(!j||j.source!=="hub-schedule")return;return UZ(W,j.externalId)}).filter((W)=>{if(!W)return!1;return!$.status||W.status===$.status})}getScheduleStats($){let J=this.listScheduleExecutions({scheduleId:$,limit:1e4});if(J.length===0)return{totalRuns:0,successRate:0,avgDurationSeconds:0};let Q=0,Z=0,W=0,j;for(let f of J){if(f.status==="success"||f.status==="completed")Q+=1;if(!j&&f.status!=="success"&&f.status!=="completed")j=f;if(f.startedAt&&f.endedAt)W+=f.endedAt-f.startedAt,Z+=1}return{totalRuns:J.length,successRate:Q/J.length,avgDurationSeconds:Z>0?W/Z/1000:0,lastFailure:j}}getActiveExecutions(){return this.runner.getActiveRuns().flatMap(($)=>{let J=this.store.getSpec($.specId);if(!J||J.source!=="hub-schedule"||!$.sessionId)return[];return[{executionId:$.runId,scheduleId:J.externalId,sessionId:$.sessionId,startedAt:$.startedAt??new Date().toISOString(),timeoutAt:J.timeoutSeconds&&$.startedAt?new Date(new Date($.startedAt).getTime()+J.timeoutSeconds*1000).toISOString():void 0}]})}getUpcomingRuns($=20){let J={triggerKind:"schedule",enabled:!0,limit:$};return this.store.listSpecs(J).flatMap((Q)=>Q.source==="hub-schedule"&&Q.nextRunAt?[{spec:Q,nextRunAt:Q.nextRunAt}]:[]).sort((Q,Z)=>String(Q.nextRunAt).localeCompare(String(Z.nextRunAt))).slice(0,$).map(({spec:Q,nextRunAt:Z})=>({scheduleId:Q.externalId,name:Q.title,nextRunAt:Z}))}}G5();import{createSessionId as QR,isHubProtocolCompatible as ZR,resolveClineBuildEnv as WR,resolveHubCommandTimeoutMs as jR}from"@sctg/cline-shared";var hf={};w(hf,{splitCoreSessionConfig:()=>y6,isSessionNotFoundError:()=>I$,SessionNotFoundError:()=>k$,SESSION_NOT_FOUND_ERROR_CODE:()=>g1});var g1="session_not_found";class k$ extends Error{sessionId;code="session_not_found";constructor($,J){super(J??($?`session not found: ${$}`:"session not found"));this.sessionId=$;this.name="SessionNotFoundError"}}function I$($){return $ instanceof k$||typeof $==="object"&&$!==null&&"code"in $&&$.code==="session_not_found"}function y6($){let{hooks:J,logger:Q,telemetry:Z,extensionContext:W,extraTools:j,extensions:f,onTeamEvent:X,onConsecutiveMistakeLimitReached:Y,checkpoint:V,compaction:H,...A}=$,B={};if(J)B.hooks=J;if(Q)B.logger=Q;if(Z)B.telemetry=Z;if(W)B.extensionContext=W;if(j)B.extraTools=j;if(f)B.extensions=f;if(X)B.onTeamEvent=X;if(Y)B.onConsecutiveMistakeLimitReached=Y;if(V?.createCheckpoint)B.checkpoint=V;if(H?.compact)B.compaction=H;let K=Object.keys(B).length>0?B:void 0;return{config:{...A,...V?{checkpoint:{enabled:V.enabled}}:{},...H?{compaction:{enabled:H.enabled,strategy:H.strategy,thresholdRatio:H.thresholdRatio,reserveTokens:H.reserveTokens,preserveRecentTokens:H.preserveRecentTokens,maxInputTokens:H.maxInputTokens,summarizer:H.summarizer}}:{}},...K?{localRuntime:K}:{}}}import{spawn as bD}from"node:child_process";import{closeSync as hD,mkdirSync as kD,openSync as ID}from"node:fs";import{basename as xD,dirname as gD,join as mD}from"node:path";import{fileURLToPath as vD}from"node:url";import{CLINE_RUN_AS_HUB_DAEMON_ENV as cD,isHubDaemonProcess as af,isHubProtocolCompatible as uD,resolveClineBuildEnv as sf,withResolvedClineBuildEnv as dD}from"@sctg/cline-shared";import{createHash as VD,randomBytes as HD}from"node:crypto";import{existsSync as AD}from"node:fs";import{chmod as BD,mkdir as TZ,readFile as mf,rm as _Z,writeFile as vf}from"node:fs/promises";import{dirname as cf,join as MZ}from"node:path";import{resolveClineDataDir as m1,resolveClineDir as uf}from"@sctg/cline-shared/storage";var If="3.89.2-beta.20260619073136";var E6={name:"@sctg/cline-core",description:"Cline Core SDK for Node Runtime",version:If,repository:{type:"git",url:"https://github.com/TEA-ching/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"},"./services/feature-flags/posthog":{types:"./dist/services/feature-flags/posthog.d.ts",import:"./dist/services/feature-flags/posthog.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:{"@sctg/cline-agents":"workspace:*","@sctg/cline-shared":"workspace:*","@sctg/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","markdown-docx":"^1.6.0",nanoid:"^5.1.7","simple-git":"3.36.0",ws:"^8.20.0",yaml:"^2.8.2",zod:"^4.3.6"},peerDependencies:{"posthog-node":"^5.8.0"},peerDependenciesMeta:{"posthog-node":{optional:!0}},devDependencies:{"@types/ws":"^8.18.1","posthog-node":"^5.8.0"},engines:{node:">=22"},files:["dist","!dist/**/*.d.ts.map"]};var KD="CLINE_HUB_DISCOVERY_PATH",GD="CLINE_HUB_BUILD_ID",xf=30000,FD=15000,UD=100;function DD($){return $.replace(/[^a-zA-Z0-9_.-]+/g,"_")}function RD($){return VD("sha256").update($).digest("hex").slice(0,12)}function LD($){if(!Number.isInteger($)||!$||$<=0)return!1;try{return process.kill($,0),!0}catch(J){return J instanceof Error&&"code"in J?String(J.code)==="EPERM":!1}}function F5(){return HD(32).toString("hex")}function OD($){return new Promise((J)=>setTimeout(J,$))}function TD($){return`${$}.lock`}async function _D($){try{let J=JSON.parse(await mf(MZ($,"owner.json"),"utf8"));if(typeof J.pid!=="number"||typeof J.acquiredAt!=="string")return;return{pid:J.pid,acquiredAt:J.acquiredAt}}catch{return}}async function gf($){await _Z($,{recursive:!0,force:!0}).catch(()=>{return})}function U5(){return process.env[GD]?.trim()||String(E6.version)}function x$($=process.argv[1]?.trim()||process.cwd()){let J=`hub-${RD($)}`,Q=process.env[KD]?.trim()||MZ(m1(),"locks","hub","owners",`${DD(J)}.json`);return{ownerId:J,discoveryPath:Q}}function df($=`hub-${Date.now().toString(36)}`){return x$($)}async function Y0($){try{let J=JSON.parse(await mf($,"utf8"));if(typeof J.hubId!=="string"||typeof J.protocolVersion!=="string"||typeof J.authToken!=="string"||typeof J.host!=="string"||typeof J.port!=="number"||typeof J.url!=="string"||typeof J.startedAt!=="string"||typeof J.updatedAt!=="string")return;return{hubId:J.hubId,protocolVersion:J.protocolVersion,minClientProtocolVersion:typeof J.minClientProtocolVersion==="string"?J.minClientProtocolVersion:void 0,maxClientProtocolVersion:typeof J.maxClientProtocolVersion==="string"?J.maxClientProtocolVersion:void 0,capabilities:Array.isArray(J.capabilities)?J.capabilities.filter((Q)=>typeof Q==="string"):void 0,coreVersion:typeof J.coreVersion==="string"?J.coreVersion:void 0,buildId:typeof J.buildId==="string"?J.buildId:void 0,authToken:J.authToken,host:J.host,port:J.port,url:J.url,pid:typeof J.pid==="number"?J.pid:void 0,startedAt:J.startedAt,updatedAt:J.updatedAt}}catch{return}}async function D5($,J){await TZ(cf($),{recursive:!0}),await _Z($,{force:!0}).catch(()=>{return}),await vf($,`${JSON.stringify(J,null,2)}
|
|
277
|
+
WHERE run_id = ? AND claim_token = ?`).run($.error??null,$.scheduledFor??null,J,$.runId,$.claimToken).changes??0)>0}attachSessionIdToRun($,J){this.db.prepare("UPDATE cron_runs SET session_id = ?, updated_at = ? WHERE run_id = ?").run(J,F0(),$)}attachReportPathToRun($,J){this.db.prepare("UPDATE cron_runs SET report_path = ?, updated_at = ? WHERE run_id = ?").run(J,F0(),$)}}function lJ($){return $?new Date($).getTime():void 0}function KU($){let J=$.metadata?{...$.metadata}:void 0;if(J)delete J.__hubScheduleCreatedBy,delete J.__hubScheduleCwd,delete J.__hubRuntimeOptions;return J}function dJ($){let J=$.metadata;return{scheduleId:$.externalId,name:$.title,cronPattern:$.scheduleExpr??"",prompt:$.prompt??"",workspaceRoot:$.workspaceRoot??"",cwd:typeof J?.__hubScheduleCwd==="string"?J.__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:lJ($.nextRunAt),lastRunAt:lJ($.lastRunAt),createdBy:typeof J?.__hubScheduleCreatedBy==="string"?J.__hubScheduleCreatedBy:void 0,tags:$.tags,runtimeOptions:J?.__hubRuntimeOptions&&typeof J.__hubRuntimeOptions==="object"&&!Array.isArray(J.__hubRuntimeOptions)?J.__hubRuntimeOptions:void 0,metadata:KU($)}}function GU($){switch($){case"done":return"success";case"cancelled":return"aborted";case"running":return"running";case"queued":return"pending";default:return"failed"}}function UZ($,J){return{executionId:$.runId,scheduleId:J,sessionId:$.sessionId,triggeredAt:new Date($.scheduledFor??$.createdAt).getTime(),startedAt:lJ($.startedAt),endedAt:lJ($.completedAt),status:GU($.status),errorMessage:$.error}}class u2{store;materializer;runner;started=!1;disposed=!1;constructor($){this.store=new T6({dbPath:$.dbPath}),this.materializer=new G6({store:this.store}),this.runner=new D6({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(BZ($.cronPattern),!$.workspaceRoot?.trim())throw Error("workspaceRoot is required for schedules");return dJ(this.store.createHubSchedule($))}getSchedule($){let J=this.store.getHubSchedule($);return J?dJ(J):void 0}listSchedules($={}){return this.store.listHubSchedules($).map((J)=>dJ(J))}updateSchedule($,J){if(J.cronPattern!==void 0)BZ(J.cronPattern);let Q=this.store.getHubSchedule($);if(!Q)return;let Z=J.workspaceRoot!==void 0?J.workspaceRoot.trim():Q.workspaceRoot;if((J.enabled??Q.enabled)&&!Z)throw Error("workspaceRoot is required for enabled schedules");let j=this.store.updateHubSchedule($,{...J,scheduleId:$});return j?dJ(j):void 0}deleteSchedule($){return this.store.deleteHubSchedule($)}pauseSchedule($){return this.updateSchedule($,{scheduleId:$,enabled:!1})}resumeSchedule($){return this.updateSchedule($,{scheduleId:$,enabled:!0})}async triggerScheduleNow($){let J=this.store.enqueueHubScheduleRun($,"manual");if(!J)return;await this.runner.tick();let Q=this.store.getRun(J.runId)??J;return UZ(Q,$)}triggerScheduleNowDetached($){let J=this.store.enqueueHubScheduleRun($,"manual");if(!J)return;return this.runner.tick().catch(()=>{return}),UZ(J,$)}listScheduleExecutions($){let J=$.scheduleId?this.store.getHubSchedule($.scheduleId):void 0,Q={specId:J?.specId,limit:$.limit};return this.store.listRuns(Q).map((W)=>{let j=J??this.store.getSpec(W.specId);if(!j||j.source!=="hub-schedule")return;return UZ(W,j.externalId)}).filter((W)=>{if(!W)return!1;return!$.status||W.status===$.status})}getScheduleStats($){let J=this.listScheduleExecutions({scheduleId:$,limit:1e4});if(J.length===0)return{totalRuns:0,successRate:0,avgDurationSeconds:0};let Q=0,Z=0,W=0,j;for(let f of J){if(f.status==="success"||f.status==="completed")Q+=1;if(!j&&f.status!=="success"&&f.status!=="completed")j=f;if(f.startedAt&&f.endedAt)W+=f.endedAt-f.startedAt,Z+=1}return{totalRuns:J.length,successRate:Q/J.length,avgDurationSeconds:Z>0?W/Z/1000:0,lastFailure:j}}getActiveExecutions(){return this.runner.getActiveRuns().flatMap(($)=>{let J=this.store.getSpec($.specId);if(!J||J.source!=="hub-schedule"||!$.sessionId)return[];return[{executionId:$.runId,scheduleId:J.externalId,sessionId:$.sessionId,startedAt:$.startedAt??new Date().toISOString(),timeoutAt:J.timeoutSeconds&&$.startedAt?new Date(new Date($.startedAt).getTime()+J.timeoutSeconds*1000).toISOString():void 0}]})}getUpcomingRuns($=20){let J={triggerKind:"schedule",enabled:!0,limit:$};return this.store.listSpecs(J).flatMap((Q)=>Q.source==="hub-schedule"&&Q.nextRunAt?[{spec:Q,nextRunAt:Q.nextRunAt}]:[]).sort((Q,Z)=>String(Q.nextRunAt).localeCompare(String(Z.nextRunAt))).slice(0,$).map(({spec:Q,nextRunAt:Z})=>({scheduleId:Q.externalId,name:Q.title,nextRunAt:Z}))}}G5();import{createSessionId as QR,isHubProtocolCompatible as ZR,resolveClineBuildEnv as WR,resolveHubCommandTimeoutMs as jR}from"@sctg/cline-shared";var hf={};w(hf,{splitCoreSessionConfig:()=>y6,isSessionNotFoundError:()=>I$,SessionNotFoundError:()=>k$,SESSION_NOT_FOUND_ERROR_CODE:()=>g1});var g1="session_not_found";class k$ extends Error{sessionId;code="session_not_found";constructor($,J){super(J??($?`session not found: ${$}`:"session not found"));this.sessionId=$;this.name="SessionNotFoundError"}}function I$($){return $ instanceof k$||typeof $==="object"&&$!==null&&"code"in $&&$.code==="session_not_found"}function y6($){let{hooks:J,logger:Q,telemetry:Z,extensionContext:W,extraTools:j,extensions:f,onTeamEvent:X,onConsecutiveMistakeLimitReached:Y,checkpoint:V,compaction:H,...A}=$,B={};if(J)B.hooks=J;if(Q)B.logger=Q;if(Z)B.telemetry=Z;if(W)B.extensionContext=W;if(j)B.extraTools=j;if(f)B.extensions=f;if(X)B.onTeamEvent=X;if(Y)B.onConsecutiveMistakeLimitReached=Y;if(V?.createCheckpoint)B.checkpoint=V;if(H?.compact)B.compaction=H;let K=Object.keys(B).length>0?B:void 0;return{config:{...A,...V?{checkpoint:{enabled:V.enabled}}:{},...H?{compaction:{enabled:H.enabled,strategy:H.strategy,thresholdRatio:H.thresholdRatio,reserveTokens:H.reserveTokens,preserveRecentTokens:H.preserveRecentTokens,maxInputTokens:H.maxInputTokens,summarizer:H.summarizer}}:{}},...K?{localRuntime:K}:{}}}import{spawn as bD}from"node:child_process";import{closeSync as hD,mkdirSync as kD,openSync as ID}from"node:fs";import{basename as xD,dirname as gD,join as mD}from"node:path";import{fileURLToPath as vD}from"node:url";import{CLINE_RUN_AS_HUB_DAEMON_ENV as cD,isHubDaemonProcess as af,isHubProtocolCompatible as uD,resolveClineBuildEnv as sf,withResolvedClineBuildEnv as dD}from"@sctg/cline-shared";import{createHash as VD,randomBytes as HD}from"node:crypto";import{existsSync as AD}from"node:fs";import{chmod as BD,mkdir as TZ,readFile as mf,rm as _Z,writeFile as vf}from"node:fs/promises";import{dirname as cf,join as MZ}from"node:path";import{resolveClineDataDir as m1,resolveClineDir as uf}from"@sctg/cline-shared/storage";var If="3.89.2-beta.20260619085118";var E6={name:"@sctg/cline-core",description:"Cline Core SDK for Node Runtime",version:If,repository:{type:"git",url:"https://github.com/TEA-ching/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"},"./services/feature-flags/posthog":{types:"./dist/services/feature-flags/posthog.d.ts",import:"./dist/services/feature-flags/posthog.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:{"@sctg/cline-agents":"workspace:*","@sctg/cline-shared":"workspace:*","@sctg/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","markdown-docx":"^1.6.0",nanoid:"^5.1.7","simple-git":"3.36.0",ws:"^8.20.0",yaml:"^2.8.2",zod:"^4.3.6"},peerDependencies:{"posthog-node":"^5.8.0"},peerDependenciesMeta:{"posthog-node":{optional:!0}},devDependencies:{"@types/ws":"^8.18.1","posthog-node":"^5.8.0"},engines:{node:">=22"},files:["dist","!dist/**/*.d.ts.map"]};var KD="CLINE_HUB_DISCOVERY_PATH",GD="CLINE_HUB_BUILD_ID",xf=30000,FD=15000,UD=100;function DD($){return $.replace(/[^a-zA-Z0-9_.-]+/g,"_")}function RD($){return VD("sha256").update($).digest("hex").slice(0,12)}function LD($){if(!Number.isInteger($)||!$||$<=0)return!1;try{return process.kill($,0),!0}catch(J){return J instanceof Error&&"code"in J?String(J.code)==="EPERM":!1}}function F5(){return HD(32).toString("hex")}function OD($){return new Promise((J)=>setTimeout(J,$))}function TD($){return`${$}.lock`}async function _D($){try{let J=JSON.parse(await mf(MZ($,"owner.json"),"utf8"));if(typeof J.pid!=="number"||typeof J.acquiredAt!=="string")return;return{pid:J.pid,acquiredAt:J.acquiredAt}}catch{return}}async function gf($){await _Z($,{recursive:!0,force:!0}).catch(()=>{return})}function U5(){return process.env[GD]?.trim()||String(E6.version)}function x$($=process.argv[1]?.trim()||process.cwd()){let J=`hub-${RD($)}`,Q=process.env[KD]?.trim()||MZ(m1(),"locks","hub","owners",`${DD(J)}.json`);return{ownerId:J,discoveryPath:Q}}function df($=`hub-${Date.now().toString(36)}`){return x$($)}async function Y0($){try{let J=JSON.parse(await mf($,"utf8"));if(typeof J.hubId!=="string"||typeof J.protocolVersion!=="string"||typeof J.authToken!=="string"||typeof J.host!=="string"||typeof J.port!=="number"||typeof J.url!=="string"||typeof J.startedAt!=="string"||typeof J.updatedAt!=="string")return;return{hubId:J.hubId,protocolVersion:J.protocolVersion,minClientProtocolVersion:typeof J.minClientProtocolVersion==="string"?J.minClientProtocolVersion:void 0,maxClientProtocolVersion:typeof J.maxClientProtocolVersion==="string"?J.maxClientProtocolVersion:void 0,capabilities:Array.isArray(J.capabilities)?J.capabilities.filter((Q)=>typeof Q==="string"):void 0,coreVersion:typeof J.coreVersion==="string"?J.coreVersion:void 0,buildId:typeof J.buildId==="string"?J.buildId:void 0,authToken:J.authToken,host:J.host,port:J.port,url:J.url,pid:typeof J.pid==="number"?J.pid:void 0,startedAt:J.startedAt,updatedAt:J.updatedAt}}catch{return}}async function D5($,J){await TZ(cf($),{recursive:!0}),await _Z($,{force:!0}).catch(()=>{return}),await vf($,`${JSON.stringify(J,null,2)}
|
|
278
278
|
`,{encoding:"utf8",mode:384}),await BD($,384)}async function y0($){await _Z($,{force:!0}).catch(()=>{return})}async function R5($,J){let Q=TD($);await TZ(cf(Q),{recursive:!0});let Z=Date.now()+FD;while(!0)try{await TZ(Q,{recursive:!1}),await vf(MZ(Q,"owner.json"),`${JSON.stringify({pid:process.pid,acquiredAt:new Date().toISOString()},null,2)}
|
|
279
279
|
`,"utf8");try{return await J()}finally{await gf(Q)}}catch(W){if((W instanceof Error&&"code"in W?String(W.code):"")!=="EEXIST")throw W;let f=await _D(Q),X=f?Date.now()-Date.parse(f.acquiredAt):xf+1;if(!f||!LD(f.pid)||X>xf){await gf(Q);continue}if(Date.now()>=Z)throw Error(`Timed out waiting for hub startup lock ${Q}`);await OD(UD)}}async function g$($,J){try{let Q=await fetch(J?.authToken?zZ($):L5($),{headers:J?.authToken?{authorization:`Bearer ${J.authToken}`}:void 0});if(!Q.ok)return;let Z=await Q.json();if(typeof Z.protocolVersion!=="string"||typeof Z.host!=="string"||typeof Z.port!=="number"||typeof Z.url!=="string")return;return{protocolVersion:Z.protocolVersion,minClientProtocolVersion:typeof Z.minClientProtocolVersion==="string"?Z.minClientProtocolVersion:void 0,maxClientProtocolVersion:typeof Z.maxClientProtocolVersion==="string"?Z.maxClientProtocolVersion:void 0,capabilities:Array.isArray(Z.capabilities)?Z.capabilities.filter((W)=>typeof W==="string"):void 0,coreVersion:typeof Z.coreVersion==="string"?Z.coreVersion:void 0,buildId:typeof Z.buildId==="string"?Z.buildId:void 0,host:Z.host,port:Z.port,url:Z.url,hubId:typeof Z.hubId==="string"?Z.hubId:void 0,authToken:typeof Z.authToken==="string"?Z.authToken:void 0,pid:typeof Z.pid==="number"?Z.pid:void 0,startedAt:typeof Z.startedAt==="string"?Z.startedAt:void 0,updatedAt:typeof Z.updatedAt==="string"?Z.updatedAt:void 0}}catch{return}}function Z$($,J,Q="/hub"){return new URL(`ws://${$}:${J}${Q}`).toString()}function L5($){let J=new URL($);return J.protocol=J.protocol==="wss:"?"https:":"http:",J.pathname="/health",J.search="",J.toString()}function zZ($){let J=new URL(L5($));return J.pathname="/status",J.toString()}function lf($){return AD($)}import{CLINE_HUB_DEV_PORT as MD,CLINE_HUB_PORT as zD,resolveClineBuildEnv as qD}from"@sctg/cline-shared";var PD="CLINE_HUB_HOST",ND="CLINE_HUB_PORT",wD="CLINE_HUB_PATHNAME",qZ="127.0.0.1",PZ=zD,NZ="/hub";function pf($){return qD($)==="development"?MD:PZ}function wZ($={}){return($.env??process.env)[PD]?.trim()||qZ}function a2($={}){let Q=($.env??process.env)[ND]?.trim();if(!Q)return pf($);let Z=Number.parseInt(Q,10);if(!Number.isInteger(Z)||Z<1||Z>65535)return pf($);return Z}function CZ($={}){return($.env??process.env)[wD]?.trim()||NZ}function K$($={},J={}){return{host:$.host??wZ(J),port:$.port??a2(J),pathname:$.pathname??CZ(J)}}import{join as CD}from"node:path";var SD="shared:cline",yD="CLINE_HUB_DISCOVERY_PATH",ED="hub-production";function rf($){let J=N$($.trim());return x$(`workspace:${J||$.trim()}`)}function W$($=SD){return x$($)}function G$(){return{ownerId:ED,discoveryPath:process.env[yD]?.trim()||CD(m1(),"locks","hub","production.json")}}var lD=8000,pD=200,rD=3000,iD=100,nD=[100,250,500,1000,2000],aD="--cline-hub-daemon";function sD($){return[...$.host?["--host",$.host]:[],...typeof $.port==="number"?["--port",String($.port)]:[],...$.pathname?["--pathname",$.pathname]:[]]}function oD(){try{let $=mD(m1(),"logs","hub-daemon.log");return kD(gD($),{recursive:!0}),{fd:ID($,"a"),logPath:$}}catch{return}}function of(){return sf()==="production"?G$():W$()}function v1($){return uD($).compatible}function nf($,J,Q){if(!J||J.url!==Q)return $;return{...$,authToken:$.authToken??J.authToken,pid:$.pid??J.pid}}async function c1($,J){try{return await g$($,{authToken:J})}catch{return}}async function tD($,J){let Q=Date.now()+J;while(Date.now()<Q){if(!(await c1($))?.url)return!0;await new Promise((W)=>setTimeout(W,iD))}return!1}async function O5($,J){if(await h6($.url,$.authToken).catch(()=>!1),$.pid)try{process.kill($.pid,"SIGTERM")}catch{}let Q=await tD($.url,rD);return await y0(J).catch(()=>{return}),Q}async function b6($,J){if(v1($))return!0;return O5($,J)}async function tf($){if(sf()!=="production")return;let J=W$();if(J.discoveryPath===$.discoveryPath)return;let Q=await Y0(J.discoveryPath);if(Q?.url)await O5(Q,J.discoveryPath);else await y0(J.discoveryPath).catch(()=>{return})}function eD(){let $=import.meta.url.endsWith(".ts")?"ts":"js";return vD(new URL(`./entry.${$}`,import.meta.url))}function $R($,J){let Q=eD(),Z=process.execPath?.trim();if(!Z)throw Error("unable to resolve runtime executable for hub daemon");let W=xD(Z).toLowerCase().includes("bun"),j=Q.startsWith("/$bunfs/"),f=W&&Q.toLowerCase().endsWith(".ts"),X=j?[aD]:[...f?["--conditions=development"]:[],Q];return{launcher:Z,args:[...X,"--cwd",$,...sD(J)],cwd:$,env:{...dD(process.env),CLINE_NO_INTERACTIVE:"1",[cD]:"1"}}}function JR($){if(!$||typeof $!=="object")return!1;if(("code"in $?$.code:void 0)==="ETXTBSY")return!0;let Q="message"in $?$.message:void 0;return typeof Q==="string"&&Q.includes("ETXTBSY")}function SZ($,J={}){if(af())return;let Q=$R($,J),Z=oD();try{bD(Q.launcher,Q.args,{detached:!0,stdio:Z?["ignore",Z.fd,Z.fd]:"ignore",env:Q.env,cwd:Q.cwd,windowsHide:!0}).unref()}finally{if(Z)hD(Z.fd)}}async function s2($,J={}){for(let Q=0;;Q++)try{SZ($,J);return}catch(Z){let W=nD[Q];if(!JR(Z)||W===void 0)throw Z;await new Promise((j)=>setTimeout(j,W))}}function T5($,J={}){if(af())return;let Q=of(),Z=K$(J),W=Z$(Z.host,Z.port,Z.pathname),j=J.allowPortFallback===!0&&Z.port!==0;tf(Q).catch(()=>{return}).then(()=>Y0(Q.discoveryPath)).then(async(f)=>{let X=!1;if(f?.url)if(!f.authToken){if(X=!0,!await O5(f,Q.discoveryPath)&&!j)return}else{let H=await c1(f.url,f.authToken);if(H?.url&&v1(H)&&await F$(H.url,{authToken:f.authToken}))return;if(H?.url)await b6({...H,authToken:f.authToken},Q.discoveryPath);else await y0(Q.discoveryPath).catch(()=>{return})}let Y=await c1(W);if(Y?.url){if(v1(Y)){if(!j||!X)return}else if(!await b6({...Y,authToken:void 0},Q.discoveryPath)&&!j)return}let V=j?{...Z,port:0}:Z;await s2($,V)}).catch(()=>{})}async function ef($,J={}){let Q=of(),Z=J.host!==void 0||J.port!==void 0||J.pathname!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),W=K$(J),j=Z$(W.host,W.port,W.pathname),f=(K)=>{if(!Z)Z1(K.url,K.authToken);return K};await tf(Q).catch(()=>{return});let X=await Y0(Q.discoveryPath),Y=!1;if(X?.url){let K=X.authToken;if(!K)Y=!0,await O5(X,Q.discoveryPath);else{let G=await c1(X.url,K);if(G?.url&&v1(G)&&await F$(G.url,{authToken:K}))return f({url:G.url,authToken:K});if(G?.url)await b6({...G,authToken:K},Q.discoveryPath);else await y0(Q.discoveryPath).catch(()=>{return})}}let V=await c1(j);if(V?.url){let K=nf(V,X,j);if(v1(V))throw Error(`A compatible Cline Hub is already running at ${j}, but its discovery record is missing or unreadable. Run 'cline doctor fix' to repair local hub discovery.${Y?" This can happen immediately after upgrading from a build that wrote an empty hub auth token; run 'cline doctor fix' to stop the old daemon and repair local hub discovery.":""}`);if(!await b6(K,Q.discoveryPath)&&J.allowPortFallback!==!0&&W.port!==0)throw Error(`An incompatible Cline Hub is already running at ${j} and could not be retired automatically. Run 'cline doctor fix' to stop stale hub daemons before starting a new hub.`)}let A=J.allowPortFallback===!0&&W.port!==0?{...W,port:0}:W;await s2($,A);let B=Date.now()+lD;while(Date.now()<B){let K=await Y0(Q.discoveryPath);if(K?.url&&K.authToken){let R=await c1(K.url,K.authToken);if(R?.url&&v1(R)&&await F$(R.url,{authToken:K.authToken}))return f({url:R.url,authToken:K.authToken})}let G=await c1(j);if(G?.url&&!v1(G)){let R=nf(G,K,j);if(!await b6(R,Q.discoveryPath)&&J.allowPortFallback!==!0&&W.port!==0)throw Error(`An incompatible Cline Hub is still running at ${j} and could not be retired automatically. Run 'cline doctor fix' to stop stale hub daemons before starting a new hub.`)}await new Promise((R)=>setTimeout(R,pD))}throw Error("Timed out waiting for detached hub startup.")}function _5(){return WR()==="production"?G$():W$()}function fR(){let $=globalThis.WebSocket;if(!$)throw Error("Global WebSocket is not available in this runtime. Node 22+ is required for hub mode.");return $}function WX($){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((J)=>Buffer.from(J))).toString();if($&&typeof $==="object"&&"data"in $&&typeof $.data<"u")return WX($.data);return String($)}function XR($){if(typeof $==="string")return $;if($ instanceof Uint8Array)return Buffer.from($).toString("utf8");if($ instanceof ArrayBuffer)return Buffer.from($).toString("utf8");return""}function $X($){let J=$,Q=XR(J.reason);return new q0("hub_connection_closed",J.code||Q?`Hub connection closed (code=${J.code??0}${Q?`, reason=${Q}`:""})`:yZ,{closeCode:J.code,closeReason:Q||void 0})}function YR($,J){if($ instanceof q0)return $;if($ instanceof Error)return new q0("hub_connect_failed",$.message);if($&&typeof $==="object"&&"error"in $&&$.error instanceof Error)return new q0("hub_connect_failed",$.error.message);let Q=$&&typeof $==="object"&&"message"in $&&typeof $.message==="string"?$.message.trim():"";if(Q)return new q0("hub_connect_failed",Q);let Z=$&&typeof $==="object"&&"type"in $&&typeof $.type==="string"?$.type.trim():"";return new q0("hub_connect_failed",Z?`Failed to connect to hub at ${J.toString()} (${Z} event before socket open).`:`Failed to connect to hub at ${J.toString()}.`)}var VR=8000,HR=200,JX="*",QX=8000,AR="cline-hub-auth.",jX=new Map,fX=new Set,BR=3000,KR=3000,GR=100,yZ="Hub connection closed",FR=250,UR=5000,ZX=0.5;class q0 extends Error{code;details;constructor($,J,Q){super(J);this.code=$;this.details=Q;this.name="HubTransportError"}}function hZ($){return $ instanceof q0}class o2 extends Error{command;code;constructor($,J,Q){super(Q);this.command=$;this.code=J;this.name="HubCommandError"}}function M5($,J){return $ instanceof o2&&$.code==="hub_command_timeout"&&(J===void 0||$.command===J)}function XX($){let J=$.searchParams.get("authToken")?.trim();if($.searchParams.delete("authToken"),J)return J;let Q=kZ($.toString());return Q?jX.get(Q):void 0}function DR($){try{let Q=new URL($).hostname.toLowerCase().replace(/^\[|\]$/g,"");return Q==="localhost"||Q==="127.0.0.1"||Q==="::1"}catch{return!1}}function kZ($){if(!DR($))return;let J=new URL(W1($));return J.search="",J.hash="",J.toString()}function EZ($){let J=kZ($);return!!J&&fX.has(J)}function Z1($,J){let Q=kZ($);if(Q){if(fX.add(Q),J?.trim())jX.set(Q,J)}return $}class j${options;socket;connectPromise;clientId;currentUrl;recoveryPromise;pendingReplies=new Map;listeners=new Set;subscriptionCounts=new Map;reconnectTimer;reconnectAttempt=0;closedByClient=!1;lastCloseError=new q0("hub_connection_closed",yZ);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),J=this.options.authToken?.trim()||XX($);$.hash="";let Z=new(fR())($.toString(),J?[`${AR}${J}`]:void 0);this.socket=Z;let W=!1;this.connectPromise=new Promise((j,f)=>{let X=!1,Y=setTimeout(()=>{if(X)return;X=!0,W=!0,this.lastCloseError=new q0("hub_connect_timeout",`Timed out connecting to hub after ${QX}ms`),this.sawSocketClose=!1,this.connectPromise=void 0,this.socket=void 0;try{Z.close()}catch{}f(this.lastCloseError)},QX);Z.addEventListener("open",()=>{if(X)return;X=!0,clearTimeout(Y),j()}),Z.addEventListener("error",(V)=>{if(X)return;X=!0,clearTimeout(Y),this.lastCloseError=YR(V,$),this.sawSocketClose=!1,this.connectPromise=void 0,this.socket=void 0,f(this.lastCloseError)}),Z.addEventListener("close",(V)=>{if(X)return;if(X=!0,clearTimeout(Y),!W)this.lastCloseError=$X(V),this.sawSocketClose=!0;this.connectPromise=void 0,this.socket=void 0,f(this.lastCloseError)})}),Z.addEventListener("message",(j)=>{this.handleFrame(JSON.parse(WX(j)))}),Z.addEventListener("close",(j)=>{if(this.socket!==Z)return;if(!W)this.lastCloseError=$X(j),this.sawSocketClose=!0;this.registered=!1;for(let f of this.pendingReplies.values())f.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 j of this.subscriptionCounts.keys())this.sendSubscriptionFrame("stream.subscribe",this.subscriptionSessionIdFromKey(j));this.reconnectAttempt=0}subscribe($,J){let Q=J?.sessionId?.trim()||void 0,Z={listener:$,sessionId:Q};return this.listeners.add(Z),this.adjustSubscriptionCount(Q,1),()=>{if(!this.listeners.delete(Z))return;this.adjustSubscriptionCount(Q,-1)}}async command($,J,Q,Z){let W=0,j=$!=="client.register"&&$!=="client.unregister";while(!0)try{return await this.commandOnce($,J,Q,Z)}catch(f){if(!j||W>=1||!await this.recoverLocalHubTransport(f))throw f;W+=1}}async commandOnce($,J,Q,Z){await this.connect();let W=QR("hubreq_"),j=jR($,Z?.timeoutMs),f=new Promise((Y,V)=>{let H=j===null?void 0:setTimeout(()=>{if(!this.pendingReplies.delete(W))return;V(new o2($,"hub_command_timeout",`Hub command ${$} timed out after ${j}ms (hub=${this.currentUrl}, requestId=${W}, clientId=${this.clientId}). Check hub-daemon.log for matching command.start/command.slow entries, or run 'cline doctor fix' to restart the hub.`))},j);this.pendingReplies.set(W,{resolve:(A)=>{if(H)clearTimeout(H);Y(A)},reject:(A)=>{if(H)clearTimeout(H);V(A)}})});try{this.sendFrame({kind:"command",envelope:{version:"v1",command:$,requestId:W,clientId:this.clientId,sessionId:Q,timeoutMs:j,payload:J}})}catch(Y){throw this.pendingReplies.delete(W),Y}let X=await f;if(!X.ok){if(X.error?.code===g1){let Y=Q??(typeof J?.sessionId==="string"?J.sessionId:void 0);throw new k$(Y,X.error.message)}throw new o2($,X.error?.code,X.error?.message??`Hub command ${$} failed`)}return X}async recoverLocalHubTransport($){if(!EZ(this.currentUrl)||!hZ($))return!1;if(this.recoveryPromise)return await this.recoveryPromise;return this.recoveryPromise=(async()=>{let J=await u1({workspaceRoot:this.options.workspaceRoot,cwd:this.options.cwd}).catch(()=>{return});if(!J)return!1;return this.currentUrl=J,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(FR*2**this.reconnectAttempt,UR),J=Math.round($*(1-ZX)+Math.random()*$*ZX);this.reconnectTimer=setTimeout(()=>{this.reconnectTimer=void 0,this.reconnectSubscribedTransport()},J)}async reconnectSubscribedTransport(){if(this.closedByClient||!this.hasActiveSubscriptions())return;try{await this.connect(),this.reconnectAttempt=0}catch{if(!EZ(this.currentUrl)){this.reconnectAttempt+=1,this.scheduleReconnect();return}try{let $=await u1({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 q0("hub_connection_closed",yZ),this.sawSocketClose=!1;for(let J of this.pendingReplies.values())J.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 q0("hub_connection_not_open","Hub connection is not open.");throw this.lastCloseError}this.socket.send(JSON.stringify($))}sendSubscriptionFrame($,J){this.sendFrame({kind:$,clientId:this.clientId,...J?{sessionId:J}:{}})}adjustSubscriptionCount($,J){let Q=this.subscriptionKeyForSessionId($),Z=(this.subscriptionCounts.get(Q)??0)+J;if(Z<=0){if(this.subscriptionCounts.delete(Q),!this.hasActiveSubscriptions())this.clearReconnectTimer();if(J<0&&this.socket?.readyState===1)this.sendSubscriptionFrame("stream.unsubscribe",$);return}if(this.subscriptionCounts.set(Q,Z),J>0&&Z===1&&this.socket?.readyState===1)this.sendSubscriptionFrame("stream.subscribe",$)}subscriptionKeyForSessionId($){return $??JX}subscriptionSessionIdFromKey($){return $===JX?void 0:$}handleFrame($){switch($.kind){case"reply":{let J=$.envelope.requestId;if(!J)return;let Q=this.pendingReplies.get(J);if(!Q)return;this.pendingReplies.delete(J),Q.resolve($.envelope);return}case"event":for(let J of this.listeners){if(J.sessionId&&J.sessionId!==$.envelope.sessionId?.trim())continue;J.listener($.envelope)}return;case"command":case"stream.subscribe":case"stream.unsubscribe":return}}}function W1($){let J=new URL($);if(J.protocol==="http:")J.protocol="ws:";else if(J.protocol==="https:")J.protocol="wss:";return J.toString()}async function F$($,J){let Q=new j$({url:$,authToken:J?.authToken,clientType:"hub-healthcheck",displayName:"hub healthcheck",workspaceRoot:J?.workspaceRoot,cwd:J?.cwd});try{return await Q.connect(),!0}catch{return!1}finally{Q.close()}}async function bZ($,J){let Q=W1($),Z=await g$(Q,{authToken:J?.authToken});if(!Z)return{status:"unreachable",url:Q};if(!ZR(Z).compatible)return{status:"protocol_mismatch",url:Q};if(J?.verifyConnection===!0&&!await F$(Q,{workspaceRoot:J.workspaceRoot,cwd:J.cwd,authToken:J.authToken}))return{status:"unreachable",url:Q};return{status:"compatible",url:Q}}async function RR($){let J=Date.now()+VR;while(Date.now()<J){let Q=await Y0($.discoveryPath);if(Q?.url){let Z=await bZ(Q.url,{verifyConnection:!0,authToken:Q.authToken});if(Z.status==="compatible")return Z1(Z.url,Q.authToken)}await new Promise((Z)=>setTimeout(Z,HR))}return}async function LR($){let J=Date.now()+KR;while(Date.now()<J){if(!(await g$($).catch(()=>{return}))?.url)return!0;await new Promise((Z)=>setTimeout(Z,GR))}return!1}function OR($,J){try{return W1($)===W1(J)}catch{return!1}}function TR($){return($&&typeof $==="object"&&Array.isArray($.sessions)?$.sessions:[]).some((Q)=>{if(!Q||typeof Q!=="object")return!1;let Z=Q;if(Z.status==="running"||Z.status==="idle"||Z.status==="pending")return!0;return Array.isArray(Z.participants)&&Z.participants.length>0})}async function _R($,J,Q){let Z=new j$({url:$,authToken:J,clientType:"hub-recovery-check",displayName:"hub recovery check",workspaceRoot:Q?.workspaceRoot,cwd:Q?.cwd});try{let W=await Z.command("session.list",{limit:500},void 0,{timeoutMs:BR});return!TR(W.payload)}catch{return!1}finally{await Z.dispose().catch(()=>{return})}}async function k6($={}){if($.endpoint?.trim()){let W=await bZ($.endpoint);return W.status==="compatible"?W.url:void 0}let J=_5(),Q=await Y0(J.discoveryPath);if(!Q?.url)return;let Z=await bZ(Q.url,{authToken:Q.authToken});if(Z.status==="compatible")return Z1(Z.url,Q.authToken);if(Z.status==="protocol_mismatch")await y0(J.discoveryPath).catch(()=>{return});return}async function u1($={}){let J=await k6($);if(J&&await F$(J,{workspaceRoot:$.workspaceRoot,cwd:$.cwd}))return J;if($.endpoint?.trim())return;let Q=_5();return await s2($.workspaceRoot??process.cwd()),await RR(Q)}async function h6($,J){let Q=new URL($),Z=J?.trim()||XX(Q);if(Q.protocol==="ws:")Q.protocol="http:";else if(Q.protocol==="wss:")Q.protocol="https:";return Q.pathname="/shutdown",Q.hash="",(await fetch(Q,{method:"POST",headers:Z?{authorization:`Bearer ${Z}`}:void 0})).ok}async function IZ($=_5()){let J=await Y0($.discoveryPath);if(!J?.url)return!1;try{if(await h6(J.url,J.authToken))return!0}catch{}return!1}async function z5($){if(!EZ($.url))return;let J=_5(),Q=await Y0(J.discoveryPath);if(!Q?.url||!OR(Q.url,$.url))return;if(!await _R(Q.url,Q.authToken,{workspaceRoot:$.workspaceRoot,cwd:$.cwd}))return;if(!await IZ())return;if(!await LR(Q.url))return;return await y0(J.discoveryPath).catch(()=>{return}),await u1({workspaceRoot:$.workspaceRoot,cwd:$.cwd})}import{resolveClineBuildEnv as MR}from"@sctg/cline-shared";function zR($,J){if($ instanceof Error)return $;if($&&typeof $==="object"&&"message"in $&&typeof $.message==="string"&&$.message.trim())return Error($.message.trim());let Q=$&&typeof $==="object"&&"type"in $&&typeof $.type==="string"?$.type.trim():"";return Error(Q?`Failed to connect to hub at ${J} (${Q} event before socket open).`:`Failed to connect to hub at ${J}.`)}var qR="cline-hub-auth.";function PR($){return $.host!==void 0||$.port!==void 0||$.pathname!==void 0}function NR($,J){let Q=new URL($),Z=new URL(J);return Q.search="",Q.hash="",Z.search="",Z.hash="",Q.toString()===Z.toString()}function YX(){return MR()==="production"?G$():W$()}async function wR($){let J=$.searchParams.get("authToken")?.trim();if($.searchParams.delete("authToken"),J)return J;let Q=YX(),Z=await Y0(Q.discoveryPath);if(Z?.url&&NR($.toString(),Z.url))return Z.authToken;return}async function xZ($={}){let J=K$($);if(!PR($)){let Q=YX(),Z=await Y0(Q.discoveryPath);if(Z?.url)return Z.url}return Z$(J.host,J.port,J.pathname)}async function q5($){return await new Promise((J,Q)=>{(async()=>{let Z=new URL($),W=await wR(Z);Z.hash="";let j=new WebSocket(Z.toString(),W?[`${qR}${W}`]:void 0),f=new Map,X=0;j.addEventListener("open",()=>{J({send(Y){let V=Y.requestId??`hub-client-${++X}`;return new Promise((H,A)=>{f.set(V,{resolve:H,reject:A});let B={kind:"command",envelope:{...Y,requestId:V}};j.send(JSON.stringify(B))})},close(){j.close()}})}),j.addEventListener("message",(Y)=>{let V=JSON.parse(String(Y.data));if(V.kind==="reply"&&V.envelope.requestId){let H=f.get(V.envelope.requestId);if(H)f.delete(V.envelope.requestId),H.resolve(V.envelope)}}),j.addEventListener("close",()=>{for(let Y of f.values())Y.reject(Error("Hub connection closed"));f.clear()}),j.addEventListener("error",(Y)=>{Q(zR(Y,$))})})().catch(Q)})}async function VX($){try{return(await q5($)).close(),!0}catch{return!1}}async function HX($,J){let Q=await xZ($),Z=await q5(Q);try{return await Z.send({version:J.version??"v1",clientId:J.clientId??"hub-client",...J})}finally{Z.close()}}function gZ($){return $?JSON.parse(JSON.stringify($)):{}}function P5($){let J=$?.session&&typeof $.session==="object"?$.session:void 0;if(!J)return;let Q=J.metadata&&typeof J.metadata==="object"?gZ(J.metadata):void 0;return{sessionId:typeof J.sessionId==="string"?J.sessionId:"",parentSessionId:typeof Q?.parentSessionId==="string"?Q.parentSessionId:void 0,messagesPath:typeof Q?.messagesPath==="string"?Q.messagesPath:void 0,metadata:Q}}function AX($,J){return $.error?.message??`hub command failed: ${J}`}function CR($){let J=gZ($);if(typeof J.error==="string"&&J.error.trim())return{...J,error:J.error.trim()};let Q=J.result&&typeof J.result==="object"?J.result:void 0;if(typeof Q?.text==="string"&&Q.text.trim())return{...J,error:Q.text.trim()};let Z=Q?.error&&typeof Q.error==="object"?Q.error:void 0;if(typeof Z?.message==="string"&&Z.message.trim())return{...J,error:Z.message.trim()};return J}function BX($){let J=$?.sessionId;return typeof J==="string"&&J.trim()?J.trim():void 0}function SR($){let J=$?.checkpoint;if(!J||typeof J!=="object"||Array.isArray(J))throw Error("hub checkpoint restore returned no checkpoint");let Q=J;if(typeof Q.ref!=="string"||typeof Q.createdAt!=="number"||typeof Q.runCount!=="number")throw Error("hub checkpoint restore returned an invalid checkpoint");return Q}function yR($){let J=gZ($.payload);if($.event==="schedule.execution_completed")return{sessionId:$.sessionId?.trim()||BX(J)||"",eventType:"schedule.execution.completed",payload:J};if($.event==="schedule.execution_failed")return{sessionId:$.sessionId?.trim()||BX(J)||"",eventType:"schedule.execution.failed",payload:J};let Q=$.sessionId?.trim();if(!Q)return;switch($.event){case"iteration.started":return{sessionId:Q,eventType:"runtime.chat.iteration_start",payload:J};case"iteration.finished":return{sessionId:Q,eventType:"runtime.chat.iteration_end",payload:J};case"assistant.delta":return{sessionId:Q,eventType:"runtime.chat.text_delta",payload:J};case"usage.updated":return{sessionId:Q,eventType:"runtime.chat.usage",payload:J};case"tool.started":return{sessionId:Q,eventType:"runtime.chat.tool_call_start",payload:J};case"tool.finished":return{sessionId:Q,eventType:"runtime.chat.tool_call_end",payload:J};case"approval.requested":return{sessionId:Q,eventType:"approval.requested",payload:J};case"run.aborted":return{sessionId:Q,eventType:"runtime.chat.aborted",payload:J};case"run.failed":return{sessionId:Q,eventType:"runtime.chat.failed",payload:CR($.payload)};case"run.completed":return{sessionId:Q,eventType:"runtime.chat.completed",payload:J};default:return}}class mZ{options;client;metadataApplied=!1;constructor($){this.options=$;this.client=new j$({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 J=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}),Q=P5(J.payload);if(!Q?.sessionId)throw Error("hub session create returned no session id");return{sessionId:Q.sessionId,startResult:{sessionId:Q.sessionId,manifestPath:"",messagesPath:Q.messagesPath??""}}}async sendRuntimeSession($,J,Q){return await this.ensureMetadataApplied(),{result:(await this.client.command("session.send_input",{prompt:J.prompt,mode:J.config.mode,attachments:J.attachments,delivery:J.delivery,timeoutSeconds:J.config.timeoutSeconds},$,Q)).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 J;try{J=await this.client.command("session.get",void 0,$)}catch(Q){if(I$(Q))return;throw Q}return P5(J.payload)}async readMessages($){let J=$.trim();if(!J)return[];await this.ensureMetadataApplied();let Q=await this.client.command("session.messages",{sessionId:J},J);if(!Q.ok)throw Error(AX(Q,"session.messages"));let Z=Q.payload?.messages;return Array.isArray(Z)?Z:[]}async restore($){let J=$.sessionId.trim();if(!J)throw Error("sessionId is required");let Q=$.restore?.messages!==!1;if(Q&&!$.config)throw Error("config is required when restore.messages is true");await this.ensureMetadataApplied();let Z=$.config,W=await this.client.command("session.restore",{sessionId:J,checkpointRunCount:$.checkpointRunCount,restore:$.restore,...Z?{workspaceRoot:Z.workspaceRoot,cwd:Z.cwd,sessionConfig:{providerId:Z.provider,modelId:Z.model,apiKey:Z.apiKey,cwd:Z.cwd??Z.workspaceRoot,workspaceRoot:Z.workspaceRoot,systemPrompt:Z.systemPrompt??"",mode:Z.mode??"act",rules:Z.rules,maxIterations:Z.maxIterations,enableTools:Z.enableTools,enableSpawnAgent:Z.enableSpawn!==!1,enableAgentTeams:Z.enableTeams!==!1,disableMcpSettingsTools:Z.disableMcpSettingsTools,missionLogIntervalSteps:Z.missionStepInterval,missionLogIntervalMs:Z.missionTimeIntervalMs},metadata:{source:Z.source??"cli",provider:Z.provider,model:Z.model,enableTools:Z.enableTools,enableSpawn:Z.enableSpawn,enableTeams:Z.enableTeams,prompt:void 0,interactive:Z.interactive!==!1},runtimeOptions:{mode:Z.mode,systemPrompt:Z.systemPrompt,maxIterations:Z.maxIterations,enableTools:Z.enableTools,enableSpawn:Z.enableSpawn,enableTeams:Z.enableTeams,autoApproveTools:Z.autoApproveTools,configExtensions:Z.configExtensions},modelSelection:{provider:Z.provider,model:Z.model,apiKey:Z.apiKey},toolPolicies:Z.toolPolicies}:{}},J);if(!W.ok)throw Error(AX(W,"session.restore"));let j=P5(W.payload);if(Q&&!j?.sessionId)throw Error("hub checkpoint restore returned no session id");let f=Array.isArray(W.payload?.messages)?W.payload.messages:void 0,X=SR(W.payload);return{sessionId:j?.sessionId,startResult:j?.sessionId?{sessionId:j.sessionId,manifestPath:"",messagesPath:j.messagesPath??""}:void 0,...f?{messages:f}:{},checkpoint:X}}async listSessions($){await this.ensureMetadataApplied();let J=await this.client.command("session.list",{limit:$?.limit??200});return(Array.isArray(J.payload?.sessions)?J.payload?.sessions:[]).map((Z)=>P5({session:Z})).filter((Z)=>Boolean(Z?.sessionId))}async deleteSession($,J=!0){return await this.ensureMetadataApplied(),(await this.client.command("session.delete",{sessionId:$,deleteCheckpointRefs:J})).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($,J){let Q=new Set(($.sessionIds??[]).map((W)=>W.trim()).filter(Boolean)),Z=this.client.subscribe((W)=>{let j=yR(W);if(!j)return;if(Q.size>0&&!Q.has(j.sessionId))return;J.onEvent?.(j)});return this.ensureMetadataApplied().catch((W)=>{J.onError?.(W instanceof Error?W:Error(String(W)))}),Z}streamTeamProgress($,J){let Q=this.client.subscribe((Z)=>{if(Z.event!=="team.progress"||!Z.payload)return;J.onProjection?.(Z.payload)});return this.ensureMetadataApplied().catch((Z)=>{J.onError?.(Z instanceof Error?Z:Error(String(Z)))}),Q}async createSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.create",$)).payload?.schedule}async listSchedules($){await this.ensureMetadataApplied();let J=await this.client.command("schedule.list");return Array.isArray(J.payload?.schedules)?J.payload?.schedules:[]}async getSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.get",{scheduleId:$})).payload?.schedule}async updateSchedule($,J){return await this.ensureMetadataApplied(),(await this.client.command("schedule.update",{scheduleId:$,...J})).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($,J){await this.ensureMetadataApplied();let Q=await this.client.command("schedule.list_executions",{scheduleId:$,limit:J});return Array.isArray(Q.payload?.executions)?Q.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 J=await this.client.command("schedule.upcoming",{limit:$});return Array.isArray(J.payload?.upcoming)?J.payload?.upcoming:[]}}class vZ{client;constructor($){this.client=new j$({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 J=await this.client.command("session.list",{limit:$});return Array.isArray(J.payload?.sessions)?J.payload.sessions:[]}subscribeUI($){return this.client.subscribe((J)=>{switch(J.event){case"ui.notify":$.onNotify?.(J.payload);break;case"ui.show_window":$.onShowWindow?.(J.payload);break;case"hub.client.registered":$.onClientRegistered?.(J.payload??{});break;case"hub.client.disconnected":$.onClientDisconnected?.(J.payload??{});break;case"session.created":$.onSessionCreated?.(J.payload??{});break;case"session.updated":$.onSessionUpdated?.(J.payload??{});break;case"session.detached":$.onSessionDetached?.(J.payload??{});break}})}}import{normalizeProviderId as Gb}from"@sctg/cline-llms";var OG={};w(OG,{LocalRuntimeHost:()=>z$});import{readdirSync as jb}from"node:fs";import{homedir as fb}from"node:os";import{isAbsolute as Xb,join as kj,resolve as Ij}from"node:path";import{captureSdkError as E2,createSessionId as Yb,isLikelyAuthError as Vb,normalizeUserInput as Hb}from"@sctg/cline-shared";import{setHomeDirIfUnset as Ab}from"@sctg/cline-shared/storage";var cX={};w(cX,{saveProviderOAuthCredentials:()=>p1,resolveProviderApiKeyFromSettings:()=>tZ,loginAndSaveProviderOAuthCredentials:()=>d6,isOAuthProvider:()=>l1,getProviderOAuthCredentialsFromSettings:()=>l6,getProviderAuthStorageId:()=>oZ,getProviderAuthHandler:()=>Z0,getPersistedProviderApiKey:()=>Z8,formatProviderOAuthApiKey:()=>eZ});import{getClineEnvironmentConfig as mX}from"@sctg/cline-shared";M0();var _X={};w(_X,{startClineDeviceAuth:()=>rZ,refreshClineToken:()=>S5,loginClineOAuth:()=>I6,getValidClineCredentials:()=>x6,completeClineDeviceAuth:()=>iZ});import{getClineEnvironmentConfig as cZ}from"@sctg/cline-shared";var KX={};w(KX,{startLocalOAuthServer:()=>f$});function ER(){let $;return{promise:new Promise((Q)=>{$=Q}),resolve:$}}async function f$($){let J=await import("node:http"),Q=$.host??"127.0.0.1",Z=$.timeoutMs??300000,W=$.successHtml??bR,j=ER(),f=!1,X=null,Y=null,V=null,H=(K)=>{if(f)return;f=!0,j.resolve(K)},A=()=>{if(X)clearTimeout(X),X=null;let K=V;if(V=null,Y)Y.close(),Y=null;if(K!==null&&$.onClose)Promise.resolve($.onClose({host:Q,port:K})).catch(()=>{})},B=async()=>{return X=setTimeout(()=>{A(),H(null)},Z),j.promise};for(let K of $.ports){let G=J.createServer((D,L)=>{try{let U=new URL(D.url||"",`http://${Q}:${K}`);if(U.pathname!==$.callbackPath){L.statusCode=404,L.end("Not found");return}let T={url:U,code:U.searchParams.get("code")??void 0,state:U.searchParams.get("state")??void 0,provider:U.searchParams.get("provider")??void 0,error:U.searchParams.get("error")??void 0};if(T.error){L.statusCode=400,L.end(`Authentication failed: ${T.error}`),A(),H(T);return}if(!T.code){L.statusCode=400,L.end("Missing authorization code");return}if($.expectedState&&T.state!==$.expectedState){L.statusCode=400,L.end("State mismatch");return}L.statusCode=200,L.setHeader("Content-Type","text/html; charset=utf-8"),L.end(W),A(),H(T)}catch{L.statusCode=500,L.end("Internal error")}}),R=await new Promise((D)=>{let L=(U)=>{G.off("error",L),D({bound:!1,error:U})};G.once("error",L),G.listen(K,Q,()=>{G.off("error",L),Y=G,D({bound:!0})})});if(R.error){if(R.error.code==="EADDRINUSE")continue;throw A(),R.error}if(R.bound){V=K;let D=`http://${Q}:${K}${$.callbackPath}`;if($.onListening)await Promise.resolve($.onListening({host:Q,port:K,callbackUrl:D})).catch(()=>{});return{callbackUrl:D,waitForCallback:B,cancelWait:()=>{A(),H(null)},close:()=>{A(),H(null)}}}}return{callbackUrl:"",waitForCallback:async()=>null,cancelWait:()=>{},close:()=>{}}}var bR=`<!DOCTYPE html>
|
|
280
280
|
<html lang="en">
|
package/dist/index.js
CHANGED
|
@@ -451,7 +451,7 @@ ${JSON.stringify(Z,null,2)}`}startClaimLeaseHeartbeat($){let J=Math.max(1000,Mat
|
|
|
451
451
|
`)[0]?.trim())}function v$($){if(!$)return;let J={...$},Q=N1(typeof J.title==="string"?J.title:void 0);if(Q)J.title=Q;else delete J.title;return Object.keys(J).length>0?J:void 0}function g8($){let J=v$($.metadata)??{},Q=$.title!==void 0?N1($.title):QZ($.prompt);if(Q)J.title=Q;return Object.keys(J).length>0?J:void 0}function ZZ($){let J=I8($);if(J)return{agent:"teammate",sessionId:J.rootSessionId,taskType:"team"};let Q=s4($);if(Q)return{agent:"subagent",sessionId:Q.rootSessionId,taskType:"subagent_task"};return{agent:"lead",sessionId:$}}function WZ($){return{version:1,updated_at:$.updatedAt,agent:$.context.agent,sessionId:$.context.sessionId,...$.context.taskType?{taskType:$.context.taskType}:{},messages:o4($.messages),...$.systemPrompt?{system_prompt:$.systemPrompt}:{}}}function eX($,J,Q){yT(bT($),{recursive:!0}),ET($,`${JSON.stringify(WZ({updatedAt:J,context:Q,messages:[]}),null,2)}
|
|
452
452
|
`,"utf8")}function $Y($,J){return N0.parse({version:1,session_id:$.sessionId,source:$.source,pid:$.pid,started_at:$.startedAt,ended_at:J?.endedAt??$.endedAt??void 0,exit_code:J?.exitCode??$.exitCode??void 0,status:J?.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:J?.metadata??$.metadata??void 0,messages_path:$.messagesPath??void 0})}async function JY($,J,Q){let Z=0;while(!0){let W=await $();if(W===void 0)return{updated:!1};let j=await J(W);if(typeof j==="object"&&j!==null&&"updated"in j&&j.updated===!1){if(Z+=1,Z>=Q)return j;continue}return j}}import{existsSync as xT}from"node:fs";import{readFile as gT}from"node:fs/promises";import{formatDisplayUserInput as QY}from"@sctg/cline-shared";class m8{listeners=new Set;subscribe($,J){let Q={listener:$,sessionId:J?.sessionId?.trim()||void 0};return this.listeners.add(Q),()=>{this.listeners.delete(Q)}}emit($){let J=$.payload.sessionId?.trim();for(let Q of this.listeners){if(Q.sessionId&&Q.sessionId!==J)continue;Q.listener($)}}get size(){return this.listeners.size}}async function c$($){let J=$?.trim();if(!J||!xT(J))return[];try{let Q=(await gT(J,"utf8")).trim();if(!Q)return[];let Z=JSON.parse(Q);if(Array.isArray(Z))return ZY(Z);if(Z&&typeof Z==="object"&&!Array.isArray(Z)){let W=Z.messages;if(Array.isArray(W))return ZY(W)}return[]}catch{return[]}}function mT($){if($.role!=="user")return $;if(typeof $.content==="string")return{...$,content:QY($.content)};return{...$,content:$.content.map((J)=>{if(J.type!=="text"||typeof J.text!=="string")return J;return{...J,text:QY(J.text)}})}}function ZY($){return $.map(mT)}function jZ($){return $?{...$}:void 0}async function WY($,J){if(!($.hookName==="tool_call"||!!$.parent_agent_id))return;await J.queueSpawnRequest($);let Z=await J.upsertSubagentSessionFromHook($);if(!Z)return;await J.appendSubagentHookAudit(Z,$),await J.applySubagentStatus(Z,$)}function v8($){if(typeof $!=="string")return;let J=$.trim();return J.length>0?J:void 0}function v0($){let J=v8($);if(!J)return;return J.toLowerCase()==="unknown"?void 0:J}function e4($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function dT($){if(!$||typeof $!=="object"||Array.isArray($))return;return{...$}}function XZ($){let J=$??200;return Number.isFinite(J)?Math.max(0,Math.floor(J)):200}function lT($){if($===0)return 0;return Math.min(Math.max($*2,20),2000)}function pT($){return $.isSubagent!==!0&&!v8($.parentSessionId)}function rT($){let J=$.match(/\d{13,}/g);if(!J||J.length===0)return 0;let Q=0;for(let Z of J){let W=Number.parseInt(Z,10);if(Number.isFinite(W)&&W>Q)Q=W}return Q}function YZ($){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 iT($){let J=XZ($);if(J===0)return[];let Q=YY(),W=(await vT(Q,{withFileTypes:!0}).catch(()=>[])).filter((f)=>f.isDirectory()).map((f)=>({entry:f,recency:rT(f.name.trim())})).sort((f,X)=>X.recency-f.recency||X.entry.name.localeCompare(f.entry.name));return(await Promise.all(W.map(async({entry:f})=>{let X=f.name.trim();if(!X)return;let Y=XY(Q,X,`${X}.json`),V=await fY(Y,"utf8").catch(()=>{return});if(!V)return;let H;try{H=JSON.parse(V)}catch{return}let A=N0.safeParse(H);if(!A.success)return;return YZ(A.data)}))).filter((f)=>Boolean(f)).sort((f,X)=>X.startedAt.localeCompare(f.startedAt)).slice(0,J)}async function nT($,J,Q){let Z=XZ(J);if(Z===0)return await $.listSessions(0),[];let W=Q.includeSubagents?Z:lT(Z),j=await $.listSessions(W);return(Q.includeSubagents?j:j.filter(pT)).slice(0,Z)}function aT($){if(typeof $==="string")return $.trim();let J=[];for(let Q of $){if(!Q||typeof Q!=="object")continue;let Z=Q;if(Z.type!=="text")continue;let W=Z.text?.trim();if(W)J.push(W)}return J.join(`
|
|
453
453
|
`).trim()}function jY($){return $.replace(/\s+/g," ").trim()}function sT($,J){if($.length<=J)return $;return`${$.slice(0,Math.max(0,J-3)).trimEnd()}...`}function oT($){for(let J of["user","assistant"])for(let Q of $){if(Q.role!==J)continue;let Z=jY(aT(Q.content));if(!Z)continue;let W=J==="user"?jY(cT(Z)):Z,j=uT(W.split(`
|
|
454
|
-
`)[0]??W);return sT(j,50)}return}function tT($){let J=0;for(let Q of $)J+=e4(Q.metrics?.cost)??0;return J}function eT($){let J,Q;for(let Z=$.length-1;Z>=0;Z-=1){let W=$[Z];if(!J)J=v0(W.modelInfo?.provider);if(!Q)Q=v0(W.modelInfo?.id);if(J&&Q)break}return{provider:J,model:Q}}function $_($){return v0($?.provider)??v0($?.provider&&typeof $.provider==="object"&&!Array.isArray($.provider)?$.provider.id:void 0)}function J_($){return v0($?.model)??v0($?.model&&typeof $.model==="object"&&!Array.isArray($.model)?$.model.id:void 0)}function fZ($,J){let Q=dT($.metadata),Z=v8(J?.title)??v8(Q?.title),W=e4(J?.totalCost)??e4(Q?.totalCost),j=Q||Z!==void 0||W!==void 0?{...Q??{},...Z!==void 0?{title:Z}:{},...W!==void 0?{totalCost:W}:{}}:void 0;return{...$,provider:v0(J?.provider)??v0($.provider)??$_(Q)??"",model:v0(J?.model)??v0($.model)??J_(Q)??"",metadata:j}}function Q_($){let J=$.content;if(!Array.isArray(J))return!1;return J.some((Q)=>!!Q&&typeof Q==="object"&&Q.type==="tool-call")}function Z_($,J){if($.status!=="running"||$.interactive!==!0)return!1;let Q=J.at(-1);return Q?.role==="assistant"&&!Q_(Q)}async function W_($,J){return await Promise.all(J.map(async(Q)=>{if(Q.status!=="running"||Q.interactive!==!0)return Q;let Z=await $.readSessionMessages(Q.sessionId);return Z_(Q,Z)?{...Q,status:"idle"}:Q}))}async function j_($,J){return await Promise.all(J.map(async(Q)=>{let Z=fZ(Q),W=Boolean(v8(Z.metadata?.title)),j=Boolean(v0(Z.provider)),f=Boolean(v0(Z.model)),X=e4(Z.metadata?.totalCost),Y=X!==void 0&&X>0;if(W&&j&&f&&Y)return Z;let V=await $.readSessionMessages(Q.sessionId);if(V.length===0)return Z;let H=eT(V),A=tT(V);return fZ(Q,{title:W?void 0:oT(V),provider:j?void 0:H.provider,model:f?void 0:H.model,totalCost:Y||A<=0?void 0:A})}))}async function VZ($,J={}){let Q=XZ(J.limit),Z=J.includeSubagents===!0,W=await nT($,Q,{includeSubagents:Z}),j=J.includeManifestFallback===!0&&W.length<Q?await iT(Math.min(Math.max(Q*2,100),500)):[],f=new Map;for(let V of[...W,...j]){if(f.has(V.sessionId))continue;f.set(V.sessionId,V)}let X=j.length===0?W:Array.from(f.values()).sort((V,H)=>H.startedAt.localeCompare(V.startedAt)).slice(0,Q),Y=await W_($,X);if(J.hydrate===!1)return Y.map((V)=>fZ(V));return await j_($,Y)}async function f_($){let J=$.trim();if(!J)return;let Q=XY(YY(),J,`${J}.json`),Z=await fY(Q,"utf8").catch(()=>{return});if(!Z)return;try{let W=N0.safeParse(JSON.parse(Z));return W.success?W.data.messages_path:void 0}catch{return}}async function X_($,J={}){let Q=new Map;return await VZ({listSessions:async(W)=>{let j=await $.listSessions(W);Q.clear();for(let f of j)Q.set(f.sessionId,f);return j.map(x8)},readSessionMessages:async(W)=>{let j=Q.get(W)?.messagesPath??await f_(W);return await c$(j)}},J)}import{captureSdkError as dH}from"@sctg/cline-shared";import{createSessionId as YM,isHubProtocolCompatible as VM,resolveClineBuildEnv as HM,resolveHubCommandTimeoutMs as AM}from"@sctg/cline-shared";import{spawn as g_}from"node:child_process";import{closeSync as m_,mkdirSync as v_,openSync as c_}from"node:fs";import{basename as u_,dirname as d_,join as l_}from"node:path";import{fileURLToPath as p_}from"node:url";import{CLINE_RUN_AS_HUB_DAEMON_ENV as r_,isHubDaemonProcess as MY,isHubProtocolCompatible as i_,resolveClineBuildEnv as zY,withResolvedClineBuildEnv as n_}from"@sctg/cline-shared";import{createHash as Y_,randomBytes as V_}from"node:crypto";import{existsSync as H_}from"node:fs";import{chmod as A_,mkdir as HZ,readFile as KY,rm as AZ,writeFile as GY}from"node:fs/promises";import{dirname as FY,join as BZ}from"node:path";import{resolveClineDataDir as u8,resolveClineDir as Sm}from"@sctg/cline-shared/storage";var HY="3.89.2-beta.
|
|
454
|
+
`)[0]??W);return sT(j,50)}return}function tT($){let J=0;for(let Q of $)J+=e4(Q.metrics?.cost)??0;return J}function eT($){let J,Q;for(let Z=$.length-1;Z>=0;Z-=1){let W=$[Z];if(!J)J=v0(W.modelInfo?.provider);if(!Q)Q=v0(W.modelInfo?.id);if(J&&Q)break}return{provider:J,model:Q}}function $_($){return v0($?.provider)??v0($?.provider&&typeof $.provider==="object"&&!Array.isArray($.provider)?$.provider.id:void 0)}function J_($){return v0($?.model)??v0($?.model&&typeof $.model==="object"&&!Array.isArray($.model)?$.model.id:void 0)}function fZ($,J){let Q=dT($.metadata),Z=v8(J?.title)??v8(Q?.title),W=e4(J?.totalCost)??e4(Q?.totalCost),j=Q||Z!==void 0||W!==void 0?{...Q??{},...Z!==void 0?{title:Z}:{},...W!==void 0?{totalCost:W}:{}}:void 0;return{...$,provider:v0(J?.provider)??v0($.provider)??$_(Q)??"",model:v0(J?.model)??v0($.model)??J_(Q)??"",metadata:j}}function Q_($){let J=$.content;if(!Array.isArray(J))return!1;return J.some((Q)=>!!Q&&typeof Q==="object"&&Q.type==="tool-call")}function Z_($,J){if($.status!=="running"||$.interactive!==!0)return!1;let Q=J.at(-1);return Q?.role==="assistant"&&!Q_(Q)}async function W_($,J){return await Promise.all(J.map(async(Q)=>{if(Q.status!=="running"||Q.interactive!==!0)return Q;let Z=await $.readSessionMessages(Q.sessionId);return Z_(Q,Z)?{...Q,status:"idle"}:Q}))}async function j_($,J){return await Promise.all(J.map(async(Q)=>{let Z=fZ(Q),W=Boolean(v8(Z.metadata?.title)),j=Boolean(v0(Z.provider)),f=Boolean(v0(Z.model)),X=e4(Z.metadata?.totalCost),Y=X!==void 0&&X>0;if(W&&j&&f&&Y)return Z;let V=await $.readSessionMessages(Q.sessionId);if(V.length===0)return Z;let H=eT(V),A=tT(V);return fZ(Q,{title:W?void 0:oT(V),provider:j?void 0:H.provider,model:f?void 0:H.model,totalCost:Y||A<=0?void 0:A})}))}async function VZ($,J={}){let Q=XZ(J.limit),Z=J.includeSubagents===!0,W=await nT($,Q,{includeSubagents:Z}),j=J.includeManifestFallback===!0&&W.length<Q?await iT(Math.min(Math.max(Q*2,100),500)):[],f=new Map;for(let V of[...W,...j]){if(f.has(V.sessionId))continue;f.set(V.sessionId,V)}let X=j.length===0?W:Array.from(f.values()).sort((V,H)=>H.startedAt.localeCompare(V.startedAt)).slice(0,Q),Y=await W_($,X);if(J.hydrate===!1)return Y.map((V)=>fZ(V));return await j_($,Y)}async function f_($){let J=$.trim();if(!J)return;let Q=XY(YY(),J,`${J}.json`),Z=await fY(Q,"utf8").catch(()=>{return});if(!Z)return;try{let W=N0.safeParse(JSON.parse(Z));return W.success?W.data.messages_path:void 0}catch{return}}async function X_($,J={}){let Q=new Map;return await VZ({listSessions:async(W)=>{let j=await $.listSessions(W);Q.clear();for(let f of j)Q.set(f.sessionId,f);return j.map(x8)},readSessionMessages:async(W)=>{let j=Q.get(W)?.messagesPath??await f_(W);return await c$(j)}},J)}import{captureSdkError as dH}from"@sctg/cline-shared";import{createSessionId as YM,isHubProtocolCompatible as VM,resolveClineBuildEnv as HM,resolveHubCommandTimeoutMs as AM}from"@sctg/cline-shared";import{spawn as g_}from"node:child_process";import{closeSync as m_,mkdirSync as v_,openSync as c_}from"node:fs";import{basename as u_,dirname as d_,join as l_}from"node:path";import{fileURLToPath as p_}from"node:url";import{CLINE_RUN_AS_HUB_DAEMON_ENV as r_,isHubDaemonProcess as MY,isHubProtocolCompatible as i_,resolveClineBuildEnv as zY,withResolvedClineBuildEnv as n_}from"@sctg/cline-shared";import{createHash as Y_,randomBytes as V_}from"node:crypto";import{existsSync as H_}from"node:fs";import{chmod as A_,mkdir as HZ,readFile as KY,rm as AZ,writeFile as GY}from"node:fs/promises";import{dirname as FY,join as BZ}from"node:path";import{resolveClineDataDir as u8,resolveClineDir as Sm}from"@sctg/cline-shared/storage";var HY="3.89.2-beta.20260619085118";var c8={name:"@sctg/cline-core",description:"Cline Core SDK for Node Runtime",version:HY,repository:{type:"git",url:"https://github.com/TEA-ching/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"},"./services/feature-flags/posthog":{types:"./dist/services/feature-flags/posthog.d.ts",import:"./dist/services/feature-flags/posthog.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:{"@sctg/cline-agents":"workspace:*","@sctg/cline-shared":"workspace:*","@sctg/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","markdown-docx":"^1.6.0",nanoid:"^5.1.7","simple-git":"3.36.0",ws:"^8.20.0",yaml:"^2.8.2",zod:"^4.3.6"},peerDependencies:{"posthog-node":"^5.8.0"},peerDependenciesMeta:{"posthog-node":{optional:!0}},devDependencies:{"@types/ws":"^8.18.1","posthog-node":"^5.8.0"},engines:{node:">=22"},files:["dist","!dist/**/*.d.ts.map"]};var B_="CLINE_HUB_DISCOVERY_PATH",K_="CLINE_HUB_BUILD_ID",AY=30000,G_=15000,F_=100;function U_($){return $.replace(/[^a-zA-Z0-9_.-]+/g,"_")}function D_($){return Y_("sha256").update($).digest("hex").slice(0,12)}function R_($){if(!Number.isInteger($)||!$||$<=0)return!1;try{return process.kill($,0),!0}catch(J){return J instanceof Error&&"code"in J?String(J.code)==="EPERM":!1}}function UY(){return V_(32).toString("hex")}function L_($){return new Promise((J)=>setTimeout(J,$))}function O_($){return`${$}.lock`}async function T_($){try{let J=JSON.parse(await KY(BZ($,"owner.json"),"utf8"));if(typeof J.pid!=="number"||typeof J.acquiredAt!=="string")return;return{pid:J.pid,acquiredAt:J.acquiredAt}}catch{return}}async function BY($){await AZ($,{recursive:!0,force:!0}).catch(()=>{return})}function DY(){return process.env[K_]?.trim()||String(c8.version)}function w1($=process.argv[1]?.trim()||process.cwd()){let J=`hub-${D_($)}`,Q=process.env[B_]?.trim()||BZ(u8(),"locks","hub","owners",`${U_(J)}.json`);return{ownerId:J,discoveryPath:Q}}function Em($=`hub-${Date.now().toString(36)}`){return w1($)}async function B0($){try{let J=JSON.parse(await KY($,"utf8"));if(typeof J.hubId!=="string"||typeof J.protocolVersion!=="string"||typeof J.authToken!=="string"||typeof J.host!=="string"||typeof J.port!=="number"||typeof J.url!=="string"||typeof J.startedAt!=="string"||typeof J.updatedAt!=="string")return;return{hubId:J.hubId,protocolVersion:J.protocolVersion,minClientProtocolVersion:typeof J.minClientProtocolVersion==="string"?J.minClientProtocolVersion:void 0,maxClientProtocolVersion:typeof J.maxClientProtocolVersion==="string"?J.maxClientProtocolVersion:void 0,capabilities:Array.isArray(J.capabilities)?J.capabilities.filter((Q)=>typeof Q==="string"):void 0,coreVersion:typeof J.coreVersion==="string"?J.coreVersion:void 0,buildId:typeof J.buildId==="string"?J.buildId:void 0,authToken:J.authToken,host:J.host,port:J.port,url:J.url,pid:typeof J.pid==="number"?J.pid:void 0,startedAt:J.startedAt,updatedAt:J.updatedAt}}catch{return}}async function RY($,J){await HZ(FY($),{recursive:!0}),await AZ($,{force:!0}).catch(()=>{return}),await GY($,`${JSON.stringify(J,null,2)}
|
|
455
455
|
`,{encoding:"utf8",mode:384}),await A_($,384)}async function $$($){await AZ($,{force:!0}).catch(()=>{return})}async function LY($,J){let Q=O_($);await HZ(FY(Q),{recursive:!0});let Z=Date.now()+G_;while(!0)try{await HZ(Q,{recursive:!1}),await GY(BZ(Q,"owner.json"),`${JSON.stringify({pid:process.pid,acquiredAt:new Date().toISOString()},null,2)}
|
|
456
456
|
`,"utf8");try{return await J()}finally{await BY(Q)}}catch(W){if((W instanceof Error&&"code"in W?String(W.code):"")!=="EEXIST")throw W;let f=await T_(Q),X=f?Date.now()-Date.parse(f.acquiredAt):AY+1;if(!f||!R_(f.pid)||X>AY){await BY(Q);continue}if(Date.now()>=Z)throw Error(`Timed out waiting for hub startup lock ${Q}`);await L_(F_)}}async function C1($,J){try{let Q=await fetch(J?.authToken?__($):OY($),{headers:J?.authToken?{authorization:`Bearer ${J.authToken}`}:void 0});if(!Q.ok)return;let Z=await Q.json();if(typeof Z.protocolVersion!=="string"||typeof Z.host!=="string"||typeof Z.port!=="number"||typeof Z.url!=="string")return;return{protocolVersion:Z.protocolVersion,minClientProtocolVersion:typeof Z.minClientProtocolVersion==="string"?Z.minClientProtocolVersion:void 0,maxClientProtocolVersion:typeof Z.maxClientProtocolVersion==="string"?Z.maxClientProtocolVersion:void 0,capabilities:Array.isArray(Z.capabilities)?Z.capabilities.filter((W)=>typeof W==="string"):void 0,coreVersion:typeof Z.coreVersion==="string"?Z.coreVersion:void 0,buildId:typeof Z.buildId==="string"?Z.buildId:void 0,host:Z.host,port:Z.port,url:Z.url,hubId:typeof Z.hubId==="string"?Z.hubId:void 0,authToken:typeof Z.authToken==="string"?Z.authToken:void 0,pid:typeof Z.pid==="number"?Z.pid:void 0,startedAt:typeof Z.startedAt==="string"?Z.startedAt:void 0,updatedAt:typeof Z.updatedAt==="string"?Z.updatedAt:void 0}}catch{return}}function G$($,J,Q="/hub"){return new URL(`ws://${$}:${J}${Q}`).toString()}function OY($){let J=new URL($);return J.protocol=J.protocol==="wss:"?"https:":"http:",J.pathname="/health",J.search="",J.toString()}function __($){let J=new URL(OY($));return J.pathname="/status",J.toString()}function bm($){return H_($)}import{CLINE_HUB_DEV_PORT as M_,CLINE_HUB_PORT as z_,resolveClineBuildEnv as q_}from"@sctg/cline-shared";var P_="CLINE_HUB_HOST",N_="CLINE_HUB_PORT",w_="CLINE_HUB_PATHNAME",C_="127.0.0.1",S_=z_,y_="/hub";function TY($){return q_($)==="development"?M_:S_}function E_($={}){return($.env??process.env)[P_]?.trim()||C_}function $J($={}){let Q=($.env??process.env)[N_]?.trim();if(!Q)return TY($);let Z=Number.parseInt(Q,10);if(!Number.isInteger(Z)||Z<1||Z>65535)return TY($);return Z}function b_($={}){return($.env??process.env)[w_]?.trim()||y_}function u$($={},J={}){return{host:$.host??E_(J),port:$.port??$J(J),pathname:$.pathname??b_(J)}}import{join as h_}from"node:path";var k_="shared:cline",I_="CLINE_HUB_DISCOVERY_PATH",x_="hub-production";function vm($){let J=M1($.trim());return w1(`workspace:${J||$.trim()}`)}function F$($=k_){return w1($)}function d$(){return{ownerId:x_,discoveryPath:process.env[I_]?.trim()||h_(u8(),"locks","hub","production.json")}}var a_=8000,s_=200,o_=3000,t_=100,e_=[100,250,500,1000,2000],$M="--cline-hub-daemon";function JM($){return[...$.host?["--host",$.host]:[],...typeof $.port==="number"?["--port",String($.port)]:[],...$.pathname?["--pathname",$.pathname]:[]]}function QM(){try{let $=l_(u8(),"logs","hub-daemon.log");return v_(d_($),{recursive:!0}),{fd:c_($,"a"),logPath:$}}catch{return}}function qY(){return zY()==="production"?d$():F$()}function S1($){return i_($).compatible}function _Y($,J,Q){if(!J||J.url!==Q)return $;return{...$,authToken:$.authToken??J.authToken,pid:$.pid??J.pid}}async function y1($,J){try{return await C1($,{authToken:J})}catch{return}}async function ZM($,J){let Q=Date.now()+J;while(Date.now()<Q){if(!(await y1($))?.url)return!0;await new Promise((W)=>setTimeout(W,t_))}return!1}async function JJ($,J){if(await KZ($.url,$.authToken).catch(()=>!1),$.pid)try{process.kill($.pid,"SIGTERM")}catch{}let Q=await ZM($.url,o_);return await $$(J).catch(()=>{return}),Q}async function d8($,J){if(S1($))return!0;return JJ($,J)}async function PY($){if(zY()!=="production")return;let J=F$();if(J.discoveryPath===$.discoveryPath)return;let Q=await B0(J.discoveryPath);if(Q?.url)await JJ(Q,J.discoveryPath);else await $$(J.discoveryPath).catch(()=>{return})}function WM(){let $=import.meta.url.endsWith(".ts")?"ts":"js";return p_(new URL(`./entry.${$}`,import.meta.url))}function jM($,J){let Q=WM(),Z=process.execPath?.trim();if(!Z)throw Error("unable to resolve runtime executable for hub daemon");let W=u_(Z).toLowerCase().includes("bun"),j=Q.startsWith("/$bunfs/"),f=W&&Q.toLowerCase().endsWith(".ts"),X=j?[$M]:[...f?["--conditions=development"]:[],Q];return{launcher:Z,args:[...X,"--cwd",$,...JM(J)],cwd:$,env:{...n_(process.env),CLINE_NO_INTERACTIVE:"1",[r_]:"1"}}}function fM($){if(!$||typeof $!=="object")return!1;if(("code"in $?$.code:void 0)==="ETXTBSY")return!0;let Q="message"in $?$.message:void 0;return typeof Q==="string"&&Q.includes("ETXTBSY")}function XM($,J={}){if(MY())return;let Q=jM($,J),Z=QM();try{g_(Q.launcher,Q.args,{detached:!0,stdio:Z?["ignore",Z.fd,Z.fd]:"ignore",env:Q.env,cwd:Q.cwd,windowsHide:!0}).unref()}finally{if(Z)m_(Z.fd)}}async function QJ($,J={}){for(let Q=0;;Q++)try{XM($,J);return}catch(Z){let W=e_[Q];if(!fM(Z)||W===void 0)throw Z;await new Promise((j)=>setTimeout(j,W))}}function NY($,J={}){if(MY())return;let Q=qY(),Z=u$(J),W=G$(Z.host,Z.port,Z.pathname),j=J.allowPortFallback===!0&&Z.port!==0;PY(Q).catch(()=>{return}).then(()=>B0(Q.discoveryPath)).then(async(f)=>{let X=!1;if(f?.url)if(!f.authToken){if(X=!0,!await JJ(f,Q.discoveryPath)&&!j)return}else{let H=await y1(f.url,f.authToken);if(H?.url&&S1(H)&&await l$(H.url,{authToken:f.authToken}))return;if(H?.url)await d8({...H,authToken:f.authToken},Q.discoveryPath);else await $$(Q.discoveryPath).catch(()=>{return})}let Y=await y1(W);if(Y?.url){if(S1(Y)){if(!j||!X)return}else if(!await d8({...Y,authToken:void 0},Q.discoveryPath)&&!j)return}let V=j?{...Z,port:0}:Z;await QJ($,V)}).catch(()=>{})}async function om($,J={}){let Q=qY(),Z=J.host!==void 0||J.port!==void 0||J.pathname!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),W=u$(J),j=G$(W.host,W.port,W.pathname),f=(K)=>{if(!Z)M2(K.url,K.authToken);return K};await PY(Q).catch(()=>{return});let X=await B0(Q.discoveryPath),Y=!1;if(X?.url){let K=X.authToken;if(!K)Y=!0,await JJ(X,Q.discoveryPath);else{let G=await y1(X.url,K);if(G?.url&&S1(G)&&await l$(G.url,{authToken:K}))return f({url:G.url,authToken:K});if(G?.url)await d8({...G,authToken:K},Q.discoveryPath);else await $$(Q.discoveryPath).catch(()=>{return})}}let V=await y1(j);if(V?.url){let K=_Y(V,X,j);if(S1(V))throw Error(`A compatible Cline Hub is already running at ${j}, but its discovery record is missing or unreadable. Run 'cline doctor fix' to repair local hub discovery.${Y?" This can happen immediately after upgrading from a build that wrote an empty hub auth token; run 'cline doctor fix' to stop the old daemon and repair local hub discovery.":""}`);if(!await d8(K,Q.discoveryPath)&&J.allowPortFallback!==!0&&W.port!==0)throw Error(`An incompatible Cline Hub is already running at ${j} and could not be retired automatically. Run 'cline doctor fix' to stop stale hub daemons before starting a new hub.`)}let A=J.allowPortFallback===!0&&W.port!==0?{...W,port:0}:W;await QJ($,A);let B=Date.now()+a_;while(Date.now()<B){let K=await B0(Q.discoveryPath);if(K?.url&&K.authToken){let R=await y1(K.url,K.authToken);if(R?.url&&S1(R)&&await l$(R.url,{authToken:K.authToken}))return f({url:R.url,authToken:K.authToken})}let G=await y1(j);if(G?.url&&!S1(G)){let R=_Y(G,K,j);if(!await d8(R,Q.discoveryPath)&&J.allowPortFallback!==!0&&W.port!==0)throw Error(`An incompatible Cline Hub is still running at ${j} and could not be retired automatically. Run 'cline doctor fix' to stop stale hub daemons before starting a new hub.`)}await new Promise((R)=>setTimeout(R,s_))}throw Error("Timed out waiting for detached hub startup.")}function WJ(){return HM()==="production"?d$():F$()}function BM(){let $=globalThis.WebSocket;if(!$)throw Error("Global WebSocket is not available in this runtime. Node 22+ is required for hub mode.");return $}function EY($){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((J)=>Buffer.from(J))).toString();if($&&typeof $==="object"&&"data"in $&&typeof $.data<"u")return EY($.data);return String($)}function KM($){if(typeof $==="string")return $;if($ instanceof Uint8Array)return Buffer.from($).toString("utf8");if($ instanceof ArrayBuffer)return Buffer.from($).toString("utf8");return""}function wY($){let J=$,Q=KM(J.reason);return new c0("hub_connection_closed",J.code||Q?`Hub connection closed (code=${J.code??0}${Q?`, reason=${Q}`:""})`:GZ,{closeCode:J.code,closeReason:Q||void 0})}function GM($,J){if($ instanceof c0)return $;if($ instanceof Error)return new c0("hub_connect_failed",$.message);if($&&typeof $==="object"&&"error"in $&&$.error instanceof Error)return new c0("hub_connect_failed",$.error.message);let Q=$&&typeof $==="object"&&"message"in $&&typeof $.message==="string"?$.message.trim():"";if(Q)return new c0("hub_connect_failed",Q);let Z=$&&typeof $==="object"&&"type"in $&&typeof $.type==="string"?$.type.trim():"";return new c0("hub_connect_failed",Z?`Failed to connect to hub at ${J.toString()} (${Z} event before socket open).`:`Failed to connect to hub at ${J.toString()}.`)}var FM=8000,UM=200,CY="*",SY=8000,DM="cline-hub-auth.",bY=new Map,hY=new Set,RM=3000,LM=3000,OM=100,GZ="Hub connection closed",TM=250,_M=5000,yY=0.5;class c0 extends Error{code;details;constructor($,J,Q){super(J);this.code=$;this.details=Q;this.name="HubTransportError"}}function MM($){return $ instanceof c0}class ZJ extends Error{command;code;constructor($,J,Q){super(Q);this.command=$;this.code=J;this.name="HubCommandError"}}function kY($,J){return $ instanceof ZJ&&$.code==="hub_command_timeout"&&(J===void 0||$.command===J)}function IY($){let J=$.searchParams.get("authToken")?.trim();if($.searchParams.delete("authToken"),J)return J;let Q=DZ($.toString());return Q?bY.get(Q):void 0}function zM($){try{let Q=new URL($).hostname.toLowerCase().replace(/^\[|\]$/g,"");return Q==="localhost"||Q==="127.0.0.1"||Q==="::1"}catch{return!1}}function DZ($){if(!zM($))return;let J=new URL(z2($));return J.search="",J.hash="",J.toString()}function FZ($){let J=DZ($);return!!J&&hY.has(J)}function M2($,J){let Q=DZ($);if(Q){if(hY.add(Q),J?.trim())bY.set(Q,J)}return $}class U${options;socket;connectPromise;clientId;currentUrl;recoveryPromise;pendingReplies=new Map;listeners=new Set;subscriptionCounts=new Map;reconnectTimer;reconnectAttempt=0;closedByClient=!1;lastCloseError=new c0("hub_connection_closed",GZ);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),J=this.options.authToken?.trim()||IY($);$.hash="";let Z=new(BM())($.toString(),J?[`${DM}${J}`]:void 0);this.socket=Z;let W=!1;this.connectPromise=new Promise((j,f)=>{let X=!1,Y=setTimeout(()=>{if(X)return;X=!0,W=!0,this.lastCloseError=new c0("hub_connect_timeout",`Timed out connecting to hub after ${SY}ms`),this.sawSocketClose=!1,this.connectPromise=void 0,this.socket=void 0;try{Z.close()}catch{}f(this.lastCloseError)},SY);Z.addEventListener("open",()=>{if(X)return;X=!0,clearTimeout(Y),j()}),Z.addEventListener("error",(V)=>{if(X)return;X=!0,clearTimeout(Y),this.lastCloseError=GM(V,$),this.sawSocketClose=!1,this.connectPromise=void 0,this.socket=void 0,f(this.lastCloseError)}),Z.addEventListener("close",(V)=>{if(X)return;if(X=!0,clearTimeout(Y),!W)this.lastCloseError=wY(V),this.sawSocketClose=!0;this.connectPromise=void 0,this.socket=void 0,f(this.lastCloseError)})}),Z.addEventListener("message",(j)=>{this.handleFrame(JSON.parse(EY(j)))}),Z.addEventListener("close",(j)=>{if(this.socket!==Z)return;if(!W)this.lastCloseError=wY(j),this.sawSocketClose=!0;this.registered=!1;for(let f of this.pendingReplies.values())f.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 j of this.subscriptionCounts.keys())this.sendSubscriptionFrame("stream.subscribe",this.subscriptionSessionIdFromKey(j));this.reconnectAttempt=0}subscribe($,J){let Q=J?.sessionId?.trim()||void 0,Z={listener:$,sessionId:Q};return this.listeners.add(Z),this.adjustSubscriptionCount(Q,1),()=>{if(!this.listeners.delete(Z))return;this.adjustSubscriptionCount(Q,-1)}}async command($,J,Q,Z){let W=0,j=$!=="client.register"&&$!=="client.unregister";while(!0)try{return await this.commandOnce($,J,Q,Z)}catch(f){if(!j||W>=1||!await this.recoverLocalHubTransport(f))throw f;W+=1}}async commandOnce($,J,Q,Z){await this.connect();let W=YM("hubreq_"),j=AM($,Z?.timeoutMs),f=new Promise((Y,V)=>{let H=j===null?void 0:setTimeout(()=>{if(!this.pendingReplies.delete(W))return;V(new ZJ($,"hub_command_timeout",`Hub command ${$} timed out after ${j}ms (hub=${this.currentUrl}, requestId=${W}, clientId=${this.clientId}). Check hub-daemon.log for matching command.start/command.slow entries, or run 'cline doctor fix' to restart the hub.`))},j);this.pendingReplies.set(W,{resolve:(A)=>{if(H)clearTimeout(H);Y(A)},reject:(A)=>{if(H)clearTimeout(H);V(A)}})});try{this.sendFrame({kind:"command",envelope:{version:"v1",command:$,requestId:W,clientId:this.clientId,sessionId:Q,timeoutMs:j,payload:J}})}catch(Y){throw this.pendingReplies.delete(W),Y}let X=await f;if(!X.ok){if(X.error?.code===P8){let Y=Q??(typeof J?.sessionId==="string"?J.sessionId:void 0);throw new T1(Y,X.error.message)}throw new ZJ($,X.error?.code,X.error?.message??`Hub command ${$} failed`)}return X}async recoverLocalHubTransport($){if(!FZ(this.currentUrl)||!MM($))return!1;if(this.recoveryPromise)return await this.recoveryPromise;return this.recoveryPromise=(async()=>{let J=await l8({workspaceRoot:this.options.workspaceRoot,cwd:this.options.cwd}).catch(()=>{return});if(!J)return!1;return this.currentUrl=J,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(TM*2**this.reconnectAttempt,_M),J=Math.round($*(1-yY)+Math.random()*$*yY);this.reconnectTimer=setTimeout(()=>{this.reconnectTimer=void 0,this.reconnectSubscribedTransport()},J)}async reconnectSubscribedTransport(){if(this.closedByClient||!this.hasActiveSubscriptions())return;try{await this.connect(),this.reconnectAttempt=0}catch{if(!FZ(this.currentUrl)){this.reconnectAttempt+=1,this.scheduleReconnect();return}try{let $=await l8({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 c0("hub_connection_closed",GZ),this.sawSocketClose=!1;for(let J of this.pendingReplies.values())J.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 c0("hub_connection_not_open","Hub connection is not open.");throw this.lastCloseError}this.socket.send(JSON.stringify($))}sendSubscriptionFrame($,J){this.sendFrame({kind:$,clientId:this.clientId,...J?{sessionId:J}:{}})}adjustSubscriptionCount($,J){let Q=this.subscriptionKeyForSessionId($),Z=(this.subscriptionCounts.get(Q)??0)+J;if(Z<=0){if(this.subscriptionCounts.delete(Q),!this.hasActiveSubscriptions())this.clearReconnectTimer();if(J<0&&this.socket?.readyState===1)this.sendSubscriptionFrame("stream.unsubscribe",$);return}if(this.subscriptionCounts.set(Q,Z),J>0&&Z===1&&this.socket?.readyState===1)this.sendSubscriptionFrame("stream.subscribe",$)}subscriptionKeyForSessionId($){return $??CY}subscriptionSessionIdFromKey($){return $===CY?void 0:$}handleFrame($){switch($.kind){case"reply":{let J=$.envelope.requestId;if(!J)return;let Q=this.pendingReplies.get(J);if(!Q)return;this.pendingReplies.delete(J),Q.resolve($.envelope);return}case"event":for(let J of this.listeners){if(J.sessionId&&J.sessionId!==$.envelope.sessionId?.trim())continue;J.listener($.envelope)}return;case"command":case"stream.subscribe":case"stream.unsubscribe":return}}}function z2($){let J=new URL($);if(J.protocol==="http:")J.protocol="ws:";else if(J.protocol==="https:")J.protocol="wss:";return J.toString()}async function l$($,J){let Q=new U$({url:$,authToken:J?.authToken,clientType:"hub-healthcheck",displayName:"hub healthcheck",workspaceRoot:J?.workspaceRoot,cwd:J?.cwd});try{return await Q.connect(),!0}catch{return!1}finally{Q.close()}}async function UZ($,J){let Q=z2($),Z=await C1(Q,{authToken:J?.authToken});if(!Z)return{status:"unreachable",url:Q};if(!VM(Z).compatible)return{status:"protocol_mismatch",url:Q};if(J?.verifyConnection===!0&&!await l$(Q,{workspaceRoot:J.workspaceRoot,cwd:J.cwd,authToken:J.authToken}))return{status:"unreachable",url:Q};return{status:"compatible",url:Q}}async function qM($){let J=Date.now()+FM;while(Date.now()<J){let Q=await B0($.discoveryPath);if(Q?.url){let Z=await UZ(Q.url,{verifyConnection:!0,authToken:Q.authToken});if(Z.status==="compatible")return M2(Z.url,Q.authToken)}await new Promise((Z)=>setTimeout(Z,UM))}return}async function PM($){let J=Date.now()+LM;while(Date.now()<J){if(!(await C1($).catch(()=>{return}))?.url)return!0;await new Promise((Z)=>setTimeout(Z,OM))}return!1}function NM($,J){try{return z2($)===z2(J)}catch{return!1}}function wM($){return($&&typeof $==="object"&&Array.isArray($.sessions)?$.sessions:[]).some((Q)=>{if(!Q||typeof Q!=="object")return!1;let Z=Q;if(Z.status==="running"||Z.status==="idle"||Z.status==="pending")return!0;return Array.isArray(Z.participants)&&Z.participants.length>0})}async function CM($,J,Q){let Z=new U$({url:$,authToken:J,clientType:"hub-recovery-check",displayName:"hub recovery check",workspaceRoot:Q?.workspaceRoot,cwd:Q?.cwd});try{let W=await Z.command("session.list",{limit:500},void 0,{timeoutMs:RM});return!wM(W.payload)}catch{return!1}finally{await Z.dispose().catch(()=>{return})}}async function RZ($={}){if($.endpoint?.trim()){let W=await UZ($.endpoint);return W.status==="compatible"?W.url:void 0}let J=WJ(),Q=await B0(J.discoveryPath);if(!Q?.url)return;let Z=await UZ(Q.url,{authToken:Q.authToken});if(Z.status==="compatible")return M2(Z.url,Q.authToken);if(Z.status==="protocol_mismatch")await $$(J.discoveryPath).catch(()=>{return});return}async function l8($={}){let J=await RZ($);if(J&&await l$(J,{workspaceRoot:$.workspaceRoot,cwd:$.cwd}))return J;if($.endpoint?.trim())return;let Q=WJ();return await QJ($.workspaceRoot??process.cwd()),await qM(Q)}async function KZ($,J){let Q=new URL($),Z=J?.trim()||IY(Q);if(Q.protocol==="ws:")Q.protocol="http:";else if(Q.protocol==="wss:")Q.protocol="https:";return Q.pathname="/shutdown",Q.hash="",(await fetch(Q,{method:"POST",headers:Z?{authorization:`Bearer ${Z}`}:void 0})).ok}async function SM($=WJ()){let J=await B0($.discoveryPath);if(!J?.url)return!1;try{if(await KZ(J.url,J.authToken))return!0}catch{}return!1}async function xY($){if(!FZ($.url))return;let J=WJ(),Q=await B0(J.discoveryPath);if(!Q?.url||!NM(Q.url,$.url))return;if(!await CM(Q.url,Q.authToken,{workspaceRoot:$.workspaceRoot,cwd:$.cwd}))return;if(!await SM())return;if(!await PM(Q.url))return;return await $$(J.discoveryPath).catch(()=>{return}),await l8({workspaceRoot:$.workspaceRoot,cwd:$.cwd})}import{captureSdkError as gY,createSessionId as mY,HUB_CHECKPOINT_CAPABILITY as hM,HUB_COMPACTION_CAPABILITY as kM,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as IM,HUB_HOOK_CAPABILITY_PREFIX as xM,HUB_MISTAKE_LIMIT_CAPABILITY as gM,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as mM,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as vM,isHubToolExecutorName as cM}from"@sctg/cline-shared";function yM($){return $?JSON.parse(JSON.stringify($)):void 0}function EM($){return $?JSON.parse(JSON.stringify($)):void 0}function bM($){let J=$?.checkpoint&&typeof $.checkpoint==="object"&&!Array.isArray($.checkpoint)?$.checkpoint:void 0,Z=(Array.isArray(J?.history)?J.history:[]).filter((f)=>!!f&&typeof f==="object"&&!Array.isArray(f)).flatMap((f)=>{let X=typeof f.ref==="string"?f.ref.trim():"",Y=Number(f.createdAt),V=Number(f.runCount);if(!X||!Number.isFinite(Y)||!Number.isInteger(V))return[];return[{ref:X,createdAt:Y,runCount:V,...f.kind==="stash"||f.kind==="commit"?{kind:f.kind}:{}}]}),W=Z.at(-1),j=$?.checkpointEnabled===!0?!0:void 0;if(!j&&Z.length===0)return;return{...j?{enabled:j}:{},...W?{latest:W}:{},history:Z}}function p$($){let{session:J}=$,Q=yM(J.metadata);return{version:1,sessionId:J.sessionId,source:J.source,status:J.status,createdAt:J.startedAt,updatedAt:J.updatedAt,endedAt:J.endedAt??null,exitCode:J.exitCode??null,interactive:J.interactive,workspace:{cwd:J.cwd,root:J.workspaceRoot},model:{providerId:J.provider,modelId:J.model},capabilities:{enableTools:J.enableTools,enableSpawn:J.enableSpawn,enableTeams:J.enableTeams},lineage:{...J.parentSessionId?{parentSessionId:J.parentSessionId}:{},...J.parentAgentId?{parentAgentId:J.parentAgentId}:{},...J.agentId?{agentId:J.agentId}:{},...J.conversationId?{conversationId:J.conversationId}:{},isSubagent:J.isSubagent},...J.teamName?{team:{name:J.teamName}}:{},...J.prompt?{prompt:J.prompt}:{},...Q?{metadata:Q}:{},...J.messagesPath?{artifacts:{messagesPath:J.messagesPath}}:{},...$.messages?{messages:EM($.messages)}:{},...$.usage?{usage:{...$.usage}}:{},...$.aggregateUsage?{aggregateUsage:{...$.aggregateUsage}}:{},...(()=>{let Z=bM(Q);return Z?{checkpoint:Z}:{}})()}}function LZ($){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 q2($){if(!$)return;return JSON.parse(JSON.stringify($))}var uM=["beforeRun","afterRun","beforeModel","afterModel","beforeTool","afterTool","onEvent"];function vY($){if(!$||typeof $!=="object"||Array.isArray($))return;return JSON.parse(JSON.stringify($))}function cY($){if(!$)return;let{userInstructionService:J,...Q}=$;return JSON.parse(JSON.stringify(Q))}function uY($){let J=$&&typeof $==="object"&&!Array.isArray($)?$:{};return{agentId:typeof J.agentId==="string"?J.agentId:"",conversationId:typeof J.conversationId==="string"?J.conversationId:"",iteration:typeof J.iteration==="number"?J.iteration:0,metadata:J.metadata&&typeof J.metadata==="object"&&!Array.isArray(J.metadata)?J.metadata:void 0}}function E1($,J,Q){$.manifest.push(J),$.handlers.set(J.capabilityName,Q)}function dY($,J){let Q={manifest:[],handlers:new Map};for(let W of Object.keys(J.toolExecutors??{}).filter(cM)){let j=J.toolExecutors?.[W];if(typeof j!=="function")continue;E1(Q,{kind:"toolExecutor",executor:W,capabilityName:`${mM}${W}`},async({payload:f,abortSignal:X})=>{let Y=Array.isArray(f.args)?[...f.args]:[],V={...uY(f.context),signal:X};return{result:await j(...Y,V)}})}for(let W of $?.extraTools??[])E1(Q,{kind:"tool",name:W.name,description:W.description,inputSchema:q2(W.inputSchema)??{},...W.lifecycle?{lifecycle:q2(W.lifecycle)}:{},capabilityName:`${IM}${W.name}`},async({payload:j,abortSignal:f,progress:X})=>{let Y={...uY(j.context),signal:f};return{result:await W.execute(j.input,{...Y,emitUpdate:(H)=>{X({update:H})}})}});let Z=$?.hooks;if(Z)for(let W of uM){let j=Z[W];if(typeof j!=="function")continue;E1(Q,{kind:"hook",name:W,capabilityName:`${xM}${W}`},async({payload:f})=>({control:await j(f.context)}))}if($?.compaction?.compact){let W=$.compaction.compact;E1(Q,{kind:"compaction",capabilityName:kM,config:vY($.compaction)},async({payload:j})=>({result:await W(j.context)}))}if($?.checkpoint?.createCheckpoint){let W=$.checkpoint.createCheckpoint;E1(Q,{kind:"checkpoint",capabilityName:hM,config:vY($.checkpoint)},async({payload:j})=>({result:await W(j.context)}))}if($?.onConsecutiveMistakeLimitReached){let W=$.onConsecutiveMistakeLimitReached;E1(Q,{kind:"mistakeLimit",capabilityName:gM},async({payload:j})=>({result:await W(j.context)}))}if($?.userInstructionService){let W=$.userInstructionService;E1(Q,{kind:"userInstructionService",capabilityName:vM},async()=>{return await W.start().catch(()=>{}),{snapshot:{records:{skill:W.listRecords("skill"),rule:W.listRecords("rule"),workflow:W.listRecords("workflow")},runtimeCommands:W.listRuntimeCommands()}}})}return Q}function iY($){if(typeof $==="string"&&$.trim())return $.trim();if($ instanceof Error)return $.message.trim()||void 0;if($&&typeof $==="object"&&"message"in $){let J=$.message;if(typeof J==="string"&&J.trim())return J.trim()}return}function dM($){return iY($)??"Capability request was cancelled."}function lM($){if(typeof $!=="string")return $;try{return JSON.parse($)}catch{return $}}function pM($){return $==="completed"||$==="max_iterations"||$==="aborted"||$==="mistake_limit"||$==="error"}function rM($){if(!$||typeof $!=="object"||Array.isArray($))return;let J=$,Q=typeof J.inputTokens==="number"?J.inputTokens:void 0,Z=typeof J.outputTokens==="number"?J.outputTokens:void 0;if(Q===void 0||Z===void 0)return;return{inputTokens:Q,outputTokens:Z,cacheReadTokens:typeof J.cacheReadTokens==="number"?J.cacheReadTokens:0,cacheWriteTokens:typeof J.cacheWriteTokens==="number"?J.cacheWriteTokens:0,totalCost:typeof J.totalCost==="number"?J.totalCost:0}}function lY($){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 OZ($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function r$($,J){return OZ($?.[J])??0}function iM($){let J=$?.delta&&typeof $.delta==="object"?$.delta:void 0,Q=$?.totals&&typeof $.totals==="object"?$.totals:void 0,Z=$?.agent&&typeof $.agent==="object"?$.agent:void 0,W=Z?.teamRole==="teammate"||Z?.teamRole==="lead"?Z.teamRole:void 0;return{event:{type:"usage",agentId:typeof Z?.agentId==="string"?Z.agentId:void 0,conversationId:typeof Z?.conversationId==="string"?Z.conversationId:void 0,parentAgentId:typeof Z?.parentAgentId==="string"?Z.parentAgentId:void 0,inputTokens:r$(J,"inputTokens"),outputTokens:r$(J,"outputTokens"),cacheReadTokens:r$(J,"cacheReadTokens"),cacheWriteTokens:r$(J,"cacheWriteTokens"),cost:OZ(J?.totalCost),totalInputTokens:r$(Q,"inputTokens"),totalOutputTokens:r$(Q,"outputTokens"),totalCacheReadTokens:r$(Q,"cacheReadTokens"),totalCacheWriteTokens:r$(Q,"cacheWriteTokens"),totalCost:OZ(Q?.totalCost)},teamAgentId:typeof Z?.teamAgentId==="string"?Z.teamAgentId:void 0,teamRole:W}}function nM($){let J=$?.result&&typeof $.result==="object"&&!Array.isArray($.result)?$.result:void 0,Q=$?.reason??J?.finishReason,Z=pM(Q)?Q:Q==="failed"?"error":"completed",W=rM($?.usage??J?.usage);return{type:"done",reason:Z,text:typeof $?.text==="string"?$.text:typeof J?.text==="string"?J.text:"",iterations:typeof $?.iterations==="number"?$.iterations:typeof J?.iterations==="number"?J.iterations:0,usage:W}}function jJ($,J){return $.error?.message??`hub command failed: ${J}`}function p8($){switch($){case"idle":case"completed":return"completed";case"failed":return"failed";case"aborted":return"cancelled";default:return"running"}}function nY($){let J=$.metadata&&typeof $.metadata==="object"?JSON.parse(JSON.stringify($.metadata)):void 0;return{sessionId:$.sessionId,parentSessionId:typeof J?.parentSessionId==="string"?J.parentSessionId:void 0,agentId:$.runtimeSession?.agentId||(typeof J?.agentId==="string"?J.agentId:void 0),parentAgentId:typeof J?.parentAgentId==="string"?J.parentAgentId:void 0,conversationId:typeof J?.conversationId==="string"?J.conversationId:void 0,isSubagent:typeof J?.isSubagent==="boolean"?J.isSubagent:!1,source:typeof J?.source==="string"?J.source:O0.CORE,pid:typeof J?.pid==="number"?J.pid:void 0,startedAt:new Date($.createdAt).toISOString(),endedAt:p8($.status)==="running"?void 0:new Date($.updatedAt).toISOString(),exitCode:p8($.status)==="completed"?0:p8($.status)==="failed"?1:void 0,status:p8($.status),interactive:J?.interactive===!0,provider:typeof J?.provider==="string"?J.provider:"hub",model:typeof J?.model==="string"?J.model:"hub",cwd:$.cwd?.trim()||$.workspaceRoot,workspaceRoot:$.workspaceRoot,teamName:typeof J?.teamName==="string"?J.teamName:void 0,enableTools:$.runtimeOptions?.enableTools??J?.enableTools===!0,enableSpawn:$.runtimeOptions?.enableSpawn??J?.enableSpawn===!0,enableTeams:$.runtimeOptions?.enableTeams??J?.enableTeams===!0,prompt:typeof J?.prompt==="string"?J.prompt:void 0,metadata:J,updatedAt:new Date($.updatedAt).toISOString(),messagesPath:typeof J?.messagesPath==="string"?J.messagesPath:void 0,hookPath:typeof J?.hookPath==="string"?J.hookPath:void 0}}function i$($){if(!$||typeof $!=="object"||Array.isArray($))return;let J=$;return J.version===1&&typeof J.sessionId==="string"?JSON.parse(JSON.stringify(J)):void 0}function aM($){let J=i$($?.snapshot);if(J)return LZ(J);let Q=$?.session;return Q?nY(Q):void 0}function pY($,J,Q){let Z=Q?.workspaceRoot?.trim()||J.config.workspaceRoot||J.config.cwd;return N0.parse({version:1,session_id:$,source:J.source??O0.CORE,pid:process.pid,started_at:new Date(Q?.createdAt??Date.now()).toISOString(),status:p8(Q?.status),interactive:J.interactive===!0,provider:J.config.providerId,model:J.config.modelId,cwd:Q?.cwd?.trim()||J.config.cwd,workspace_root:Z,team_name:J.config.teamName,enable_tools:J.config.enableTools,enable_spawn:J.config.enableSpawnAgent,enable_teams:J.config.enableAgentTeams,prompt:J.prompt?.trim()||void 0,metadata:J.sessionMetadata&&Object.keys(J.sessionMetadata).length>0?J.sessionMetadata:void 0})}function rY($,J){return N0.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??J.prompt?.trim())||void 0,metadata:$.metadata,messages_path:$.artifacts?.messagesPath})}class b1{runtimeAddress;pendingPrompts;client;clientOptions;clientContext;events=new m8;sessionCapabilities=new Map;sessionClientContributionHandlers=new Map;sessionSubscriptions=new Map;pendingApprovalToolCallIds=new Set;agentDoneEmittedForCurrentRunBySession=new Set;activeCapabilityAbortControllers=new Map;defaultCapabilities;telemetry;constructor($,J){this.clientContext=J,this.clientOptions={authToken:$.authToken,clientType:$.clientType??"core-hub-runtime",displayName:$.displayName??"core hub runtime",workspaceRoot:J?.workspaceRoot,cwd:J?.cwd},this.defaultCapabilities=T0($.capabilities)??{},this.telemetry=$.telemetry,this.runtimeAddress=$.url,this.pendingPrompts={list:(Q)=>this.requestPendingPromptsList(Q),update:(Q)=>this.requestPendingPromptUpdate(Q),delete:(Q)=>this.requestPendingPromptDelete(Q)},this.client=this.createClient($.url)}createClient($){return new U$({...this.clientOptions,url:$})}async replaceClient($){let J=this.client;this.client=this.createClient($),this.runtimeAddress=$,await Promise.resolve(J.dispose()).catch(()=>{return})}async recoverLocalHubStartupDeadlock($){if(!kY($,"session.create"))return!1;let J=await xY({url:this.client.getUrl(),workspaceRoot:this.clientContext?.workspaceRoot,cwd:this.clientContext?.cwd}).catch(()=>{return});if(!J)return!1;return await this.replaceClient(J),!0}registerPlannedSession($,J,Q){if(this.sessionCapabilities.set($,J),Q.size>0)this.sessionClientContributionHandlers.set($,Q);this.ensureSessionSubscription($)}cleanupPlannedSession($){this.sessionCapabilities.delete($),this.sessionClientContributionHandlers.delete($),this.disposeSessionSubscription($)}async connect(){await this.client.connect()}async startSession($){let J=this.resolveCapabilities($),Q=dY($.localRuntime,J),Z=$.config.sessionId?.trim()||mY(),W=()=>this.client.command("session.create",{workspaceRoot:$.config.workspaceRoot?.trim()||$.config.cwd,cwd:$.config.cwd,sessionConfig:q2({...$.config,sessionId:Z}),metadata:{...$.sessionMetadata??{},source:$.source??O0.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:{...Q.manifest.length>0?{clientContributions:Q.manifest}:{},...$.localRuntime?.configExtensions?{configExtensions:$.localRuntime.configExtensions}:{}},toolPolicies:q2($.toolPolicies),initialMessages:$.initialMessages});this.registerPlannedSession(Z,J,Q.handlers);let j;try{j=await W()}catch(V){if(this.cleanupPlannedSession(Z),await this.recoverLocalHubStartupDeadlock(V)){this.registerPlannedSession(Z,J,Q.handlers);try{j=await W()}catch(H){throw this.cleanupPlannedSession(Z),H}}else throw V}let f=i$(j.payload?.snapshot),X=j.payload?.session,Y=(f?.sessionId??X?.sessionId)?.trim();if(!Y)throw this.cleanupPlannedSession(Z),Error("Hub runtime did not return a session id.");if(Y!==Z)this.cleanupPlannedSession(Z),this.registerPlannedSession(Y,J,Q.handlers);return{sessionId:Y,manifest:f?rY(f,$):pY(Y,$,X),manifestPath:"",messagesPath:"",result:void 0}}async restoreSession($){let J=$.sessionId.trim();if(!J)throw Error("sessionId is required");let Q=$.restore?.messages!==!1;if(Q&&!$.start)throw Error("start is required when restore.messages is true");let Z=$.start,W=Z?this.resolveCapabilities(Z):void 0,j=Z?dY(Z.localRuntime,W??{}):{manifest:[],handlers:new Map},f=Z?Z.config.sessionId?.trim()||mY():void 0;if(f&&W)this.sessionCapabilities.set(f,W);if(f&&j.handlers.size>0)this.sessionClientContributionHandlers.set(f,j.handlers),this.ensureSessionSubscription(f);let X;try{X=await this.client.command("session.restore",{sessionId:J,checkpointRunCount:$.checkpointRunCount,restore:$.restore,...Z?{workspaceRoot:Z.config.workspaceRoot?.trim()||Z.config.cwd,cwd:Z.config.cwd??$.cwd,sessionConfig:q2({...Z.config,sessionId:f}),metadata:{...Z.sessionMetadata??{},source:Z.source??O0.CORE,provider:Z.config.providerId,model:Z.config.modelId,enableTools:Z.config.enableTools,enableSpawn:Z.config.enableSpawnAgent,enableTeams:Z.config.enableAgentTeams,teamName:Z.config.teamName,prompt:Z.prompt,interactive:Z.interactive===!0},runtimeOptions:{...j.manifest.length>0?{clientContributions:j.manifest}:{},...Z.localRuntime?.configExtensions?{configExtensions:Z.localRuntime.configExtensions}:{}},toolPolicies:q2(Z.toolPolicies)}:{}},J)}catch(K){if(f)this.sessionCapabilities.delete(f),this.sessionClientContributionHandlers.delete(f),this.disposeSessionSubscription(f);throw K}if(!X.ok){let K=typeof X.payload?.error==="string"?X.payload.error:"session.restore failed";if(f)this.sessionCapabilities.delete(f),this.sessionClientContributionHandlers.delete(f),this.disposeSessionSubscription(f);throw Error(K)}let Y=i$(X.payload?.snapshot),V=X.payload?.session,H=(Y?.sessionId??V?.sessionId)?.trim();if(Q&&!H){if(f)this.sessionCapabilities.delete(f),this.sessionClientContributionHandlers.delete(f),this.disposeSessionSubscription(f);throw Error("Hub checkpoint restore returned no session id")}if(H&&f&&H!==f)this.sessionCapabilities.delete(f),this.sessionClientContributionHandlers.delete(f),this.disposeSessionSubscription(f);if(H&&W)this.sessionCapabilities.set(H,W);if(H&&j.handlers.size>0)this.sessionClientContributionHandlers.set(H,j.handlers);if(H)this.ensureSessionSubscription(H);let A=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:H,startResult:H?{sessionId:H,manifest:Y?rY(Y,Z??{}):pY(H,Z??{},V),manifestPath:"",messagesPath:"",result:void 0}:void 0,messages:A,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 J=await this.client.command("session.pending_prompts",{sessionId:$.sessionId},$.sessionId);return Array.isArray(J.payload?.prompts)?J.payload.prompts:[]}async requestPendingPromptUpdate($){this.ensureSessionSubscription($.sessionId);let J=await this.client.command("session.update_pending_prompt",{...$},$.sessionId);return{sessionId:$.sessionId,prompts:Array.isArray(J.payload?.prompts)?J.payload.prompts:[],prompt:J.payload?.prompt,updated:J.payload?.updated===!0}}async requestPendingPromptDelete($){this.ensureSessionSubscription($.sessionId);let J=await this.client.command("session.remove_pending_prompt",{...$},$.sessionId);return{sessionId:$.sessionId,prompts:Array.isArray(J.payload?.prompts)?J.payload.prompts:[],prompt:J.payload?.prompt,removed:J.payload?.removed===!0}}async getAccumulatedUsage($){let J=await this.client.command("session.get",{includeSnapshot:!0},$),Q=i$(J.payload?.snapshot);if(Q){let f=Q.usage?{...Q.usage}:void 0,X=Q.aggregateUsage?{...Q.aggregateUsage}:void 0;return f||X?{usage:f,aggregateUsage:X}:void 0}let Z=J.payload?.session,W=lY(Z?.usage),j=lY(Z?.aggregateUsage);return W||j?{usage:W,aggregateUsage:j}:void 0}async abort($,J){await this.client.command("run.abort",{sessionId:$,reason:iY(J)},$)}async stopSession($){this.sessionCapabilities.delete($),this.disposeSessionSubscription($),await this.client.command("session.detach",{sessionId:$},$)}async dispose(){for(let[$,J]of this.sessionSubscriptions){J();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 J;try{J=await this.client.command("session.get",void 0,$)}catch(Q){if(_1(Q))return;throw Q}return aM(J.payload)}async listSessions($=100){let J=await this.client.command("session.list",{limit:$}),Q=Array.isArray(J.payload?.snapshots)?J.payload.snapshots.flatMap((W)=>{let j=i$(W);return j?[LZ(j)]:[]}):[];if(Q.length>0)return Q;return(J.payload?.sessions??[]).map(nY)}async listSettings($){let J=await this.client.command("settings.list",cY($));if(!J.ok)throw Error(jJ(J,"settings.list"));return J.payload?.snapshot}async toggleSetting($){let J=await this.client.command("settings.toggle",cY($));if(!J.ok)throw Error(jJ(J,"settings.toggle"));return{snapshot:J.payload?.snapshot,changedTypes:Array.isArray(J.payload?.changedTypes)?J.payload.changedTypes:[]}}async deleteSession($){return this.sessionCapabilities.delete($),this.disposeSessionSubscription($),(await this.client.command("session.delete",{sessionId:$})).payload?.deleted===!0}async updateSession($,J){let Q={...J.metadata??{}};if(typeof J.prompt==="string")Q.prompt=J.prompt;if(typeof J.title==="string")Q.title=J.title;return{updated:(await this.client.command("session.update",{sessionId:$,metadata:Q})).ok}}async readSessionMessages($){let J=$.trim();if(!J)return[];let Q=await this.client.command("session.messages",{sessionId:J},J);if(!Q.ok)throw gY(this.telemetry,{component:"core",operation:"hub.runtime_host.read_session_messages",error:Error(jJ(Q,"session.messages")),severity:Q.error?.code==="session_not_found"?"warn":"error",handled:!0,context:{command:"session.messages",sessionId:J,errorCode:Q.error?.code,runtimeAddress:this.runtimeAddress}}),Error(jJ(Q,"session.messages"));let Z=Q.payload?.messages;return Array.isArray(Z)?Z:[]}async dispatchHookEvent($){await this.client.command("session.hook",{payload:$})}subscribe($,J){return this.events.subscribe($,J)}ensureSessionSubscription($){let J=$.trim();if(!J||this.sessionSubscriptions.has(J))return;let Q=this.client.subscribe((Z)=>{this.handleHubEvent(Z)},{sessionId:J});this.sessionSubscriptions.set(J,typeof Q==="function"?Q:()=>{})}disposeSessionSubscription($){let J=$.trim();if(!J)return;this.sessionSubscriptions.get(J)?.(),this.sessionSubscriptions.delete(J),this.agentDoneEmittedForCurrentRunBySession.delete(J)}resolveCapabilities($){return T0(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:nM($.payload)}})}handleHubEvent($){let J=$.sessionId?.trim();if($.event==="capability.requested"){this.handleCapabilityRequest($).catch((Q)=>{this.captureDetachedHubEventError("hub.runtime_host.capability_request",Q,$)});return}if($.event==="capability.resolved"){this.handleCapabilityResolved($);return}if($.event==="approval.requested"){this.handleApprovalRequested($).catch((Q)=>{this.captureDetachedHubEventError("hub.runtime_host.approval_request",Q,$)});return}if(!J)return;switch($.event){case"run.started":{this.agentDoneEmittedForCurrentRunBySession.delete(J);let Q=i$($.payload?.snapshot),Z=$.payload?.session;if(Q)this.events.emit({type:"session_snapshot",payload:{sessionId:J,snapshot:Q}});this.events.emit({type:"status",payload:{sessionId:J,status:Z?.status??"running"}});return}case"iteration.started":{this.events.emit({type:"agent_event",payload:{sessionId:J,event:{type:"iteration_start",iteration:typeof $.payload?.iteration==="number"?$.payload.iteration:0}}});return}case"iteration.finished":{this.events.emit({type:"agent_event",payload:{sessionId:J,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 Q=typeof $.payload?.text==="string"?$.payload.text:"";if(!Q)return;this.events.emit({type:"agent_event",payload:{sessionId:J,event:{type:"content_start",contentType:"text",text:Q}}});return}case"assistant.finished":{this.events.emit({type:"agent_event",payload:{sessionId:J,event:{type:"content_end",contentType:"text",text:typeof $.payload?.text==="string"?$.payload.text:void 0}}});return}case"reasoning.delta":{let Q=typeof $.payload?.text==="string"?$.payload.text:"",Z=$.payload?.redacted===!0;if(!Q&&!Z)return;this.events.emit({type:"agent_event",payload:{sessionId:J,event:{type:"content_start",contentType:"reasoning",reasoning:Q,redacted:Z}}});return}case"reasoning.finished":{this.events.emit({type:"agent_event",payload:{sessionId:J,event:{type:"content_end",contentType:"reasoning",reasoning:typeof $.payload?.reasoning==="string"?$.payload.reasoning:void 0}}});return}case"agent.done":{this.emitAgentDoneIfNeeded({sessionId:J,payload:$.payload});return}case"usage.updated":{let Q=iM($.payload);this.events.emit({type:"agent_event",payload:{sessionId:J,event:Q.event,teamAgentId:Q.teamAgentId,teamRole:Q.teamRole}});return}case"tool.started":{let Q=typeof $.payload?.toolCallId==="string"?$.payload.toolCallId:void 0;if(Q&&this.pendingApprovalToolCallIds.delete(Q))return;this.emitToolCallContentStart({sessionId:J,toolCallId:Q,toolName:typeof $.payload?.toolName==="string"?$.payload.toolName:void 0,toolInput:$.payload?.input});return}case"tool.finished":{let Q=typeof $.payload?.toolCallId==="string"?$.payload.toolCallId:void 0;if(Q)this.pendingApprovalToolCallIds.delete(Q);this.events.emit({type:"agent_event",payload:{sessionId:J,event:{type:"content_end",contentType:"tool",toolCallId:Q,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 Q=i$($.payload?.snapshot),Z=$.payload?.session;if(Q)this.events.emit({type:"session_snapshot",payload:{sessionId:J,snapshot:Q}});this.events.emit({type:"status",payload:{sessionId:J,status:Z?.status??"running"}});return}case"session.pending_prompts":{this.events.emit({type:"pending_prompts",payload:{sessionId:J,prompts:Array.isArray($.payload?.prompts)?$.payload.prompts:[]}});return}case"session.pending_prompt_submitted":{let Q=$.payload?.prompt;if(!Q)return;this.events.emit({type:"pending_prompt_submitted",payload:{sessionId:J,id:Q.id,prompt:Q.prompt,delivery:Q.delivery,attachmentCount:Q.attachmentCount}});return}case"run.completed":case"run.failed":case"run.aborted":{let Q=i$($.payload?.snapshot),Z=typeof $.payload?.reason==="string"?$.payload.reason:$.event==="run.aborted"?"aborted":$.event==="run.failed"?"error":"completed";if(this.emitAgentDoneIfNeeded({sessionId:J,payload:{...$.payload,reason:Z}}),Q?.interactive===!0&&Z0(Q.status))return;this.events.emit({type:"ended",payload:{sessionId:J,reason:Z,ts:$.timestamp??Date.now()}});return}default:return}}captureDetachedHubEventError($,J,Q){try{gY(this.telemetry,{component:"core",operation:$,error:J,severity:"warn",handled:!0,context:{event:Q.event,sessionId:Q.sessionId,runtimeAddress:this.runtimeAddress}})}catch{}}async handleCapabilityRequest($){let J=$.sessionId?.trim();if(!J)return;let Q=typeof $.payload?.targetClientId==="string"?$.payload.targetClientId:void 0;if(Q&&Q!==this.client.getClientId())return;let Z=typeof $.payload?.requestId==="string"?$.payload.requestId:"",W=typeof $.payload?.capabilityName==="string"?$.payload.capabilityName:"";if(!Z)return;let j=this.sessionClientContributionHandlers.get(J)?.get(W);if(!j){await this.client.command("capability.respond",{requestId:Z,ok:!1,error:`No client contribution handler registered for capability ${W} in session ${J}.`},J).catch(()=>{});return}let f=$.payload?.payload&&typeof $.payload.payload==="object"&&!Array.isArray($.payload.payload)?$.payload.payload:{},X=new AbortController;this.activeCapabilityAbortControllers.set(Z,X);let Y=(V)=>{this.client.command("capability.progress",{requestId:Z,payload:V},J).catch((H)=>{this.captureDetachedHubEventError("hub.runtime_host.capability_progress",H,$)})};try{let V=await j({payload:f,abortSignal:X.signal,progress:Y});if(X.signal.aborted)return;await this.client.command("capability.respond",{requestId:Z,ok:!0,payload:V},J)}catch(V){if(X.signal.aborted)return;await this.client.command("capability.respond",{requestId:Z,ok:!1,error:V instanceof Error?V.message:String(V)},J)}finally{this.activeCapabilityAbortControllers.delete(Z)}}handleCapabilityResolved($){if($.payload?.cancelled!==!0)return;let J=typeof $.payload.requestId==="string"?$.payload.requestId.trim():"";if(!J)return;let Q=this.activeCapabilityAbortControllers.get(J);if(!Q)return;Q.abort(dM($.payload.error))}async handleApprovalRequested($){let J=$.sessionId?.trim();if(!J)return;let Q=this.sessionCapabilities.get(J)?.requestToolApproval??this.defaultCapabilities.requestToolApproval;if(!Q)return;let Z=typeof $.payload?.approvalId==="string"?$.payload.approvalId.trim():"",W=typeof $.payload?.toolCallId==="string"?$.payload.toolCallId:"",j=typeof $.payload?.toolName==="string"?$.payload.toolName:"";if(!Z||!W||!j)return;let f=$.payload?.policy&&typeof $.payload.policy==="object"&&!Array.isArray($.payload.policy)?$.payload.policy:{autoApprove:!1},X=lM($.payload?.inputJson);this.pendingApprovalToolCallIds.add(W),this.emitToolCallContentStart({sessionId:J,toolCallId:W,toolName:j,toolInput:X});let Y=await Promise.resolve(Q({sessionId:J,agentId:typeof $.payload?.agentId==="string"?$.payload.agentId:"",conversationId:typeof $.payload?.conversationId==="string"?$.payload.conversationId:J,iteration:typeof $.payload?.iteration==="number"?$.payload.iteration:0,toolCallId:W,toolName:j,input:X,policy:f})).catch((V)=>({approved:!1,reason:V instanceof Error?V.message:`Tool approval request failed: ${String(V)}`}));await this.client.command("approval.respond",{approvalId:Z,approved:Y.approved,reason:Y.reason},J).catch(()=>{})}}class fJ extends b1{constructor($){super({url:z2($.endpoint),authToken:$.authToken,clientType:$.clientType??"core-remote-runtime",displayName:$.displayName??"core remote runtime",capabilities:$.capabilities},{workspaceRoot:$.workspaceRoot,cwd:$.cwd})}}import{existsSync as sM,mkdirSync as oM}from"node:fs";import{join as tM}from"node:path";import{asBool as r8,asOptionalString as f$,asString as D$,ensureSessionSchema as eM,loadSqliteDb as $z,nowIso as XJ,toBoolInt as i8}from"@sctg/cline-shared/db";import{resolveDbDataDir as Jz}from"@sctg/cline-shared/storage";class n${sessionsDirPath;db;constructor($={}){this.sessionsDirPath=$.sessionsDir??Jz()}init(){this.getRawDb()}ensureSessionsDir(){if(!sM(this.sessionsDirPath))oM(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}sessionDbPath(){return tM(this.ensureSessionsDir(),"sessions.db")}getRawDb(){if(this.db)return this.db;let $=$z(this.sessionDbPath());return eM($,{includeLegacyMigrations:!0}),this.db=$,$}close(){this.db?.close?.(),this.db=void 0}run($,J=[]){return this.getRawDb().prepare($).run(...J)}queryOne($,J=[]){return this.getRawDb().prepare($).get(...J)??void 0}queryAll($,J=[]){return this.getRawDb().prepare($).all(...J)}create($){let J=XJ();this.run(`INSERT OR REPLACE INTO sessions (
|
|
457
457
|
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": "@sctg/cline-core",
|
|
3
3
|
"description": "Cline Core SDK for Node Runtime",
|
|
4
|
-
"version": "3.89.2-beta.
|
|
4
|
+
"version": "3.89.2-beta.20260619085118",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
7
7
|
"url": "https://github.com/TEA-ching/cline",
|
|
@@ -48,9 +48,9 @@
|
|
|
48
48
|
"test:watch": "vitest --config vitest.config.ts"
|
|
49
49
|
},
|
|
50
50
|
"dependencies": {
|
|
51
|
-
"@sctg/cline-agents": "3.89.2-beta.
|
|
52
|
-
"@sctg/cline-shared": "3.89.2-beta.
|
|
53
|
-
"@sctg/cline-llms": "3.89.2-beta.
|
|
51
|
+
"@sctg/cline-agents": "3.89.2-beta.20260619085118",
|
|
52
|
+
"@sctg/cline-shared": "3.89.2-beta.20260619085118",
|
|
53
|
+
"@sctg/cline-llms": "3.89.2-beta.20260619085118",
|
|
54
54
|
"@modelcontextprotocol/sdk": "^1.29.0",
|
|
55
55
|
"@opentelemetry/api": "^1.9.0",
|
|
56
56
|
"@opentelemetry/api-logs": "^0.214.0",
|