@cline/core 0.0.91-nightly.1791426960 → 0.0.92
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/cloud/index.js
CHANGED
|
@@ -5,7 +5,7 @@ import{execFile as nn}from"node:child_process";import{basename as Ao,resolve as
|
|
|
5
5
|
...and ${p.length-5} more`:"";throw new _("dirty_worktree",`Commit and push local changes before handing off to cloud. Uncommitted files are not transferred.
|
|
6
6
|
|
|
7
7
|
${m}${y}`)}let i;try{i=await t.symbolicBranch()}catch(p){let m=Q(p)===1,y=K(p),w=m?"Cloud handoff requires a checked-out branch; detached HEAD is not supported.":"Could not inspect the current Git branch.";throw new _(m?"detached_head":"git_command_failed",y?`${w} (${y})`:w,{cause:p})}if(!i)throw new _("detached_head","Cloud handoff requires a checked-out branch; detached HEAD is not supported.");let[a,r,d]=await Promise.all([O(()=>t.branchRemote(i),"missing_upstream",`Branch ${i} has no upstream. Push it with -u before handing off.`),O(()=>t.branchMergeRef(i),"missing_upstream",`Branch ${i} has no upstream. Push it with -u before handing off.`),O(t.headSha,"git_command_failed","Could not resolve the current commit.")]);if(!a||a==="."||!r.startsWith("refs/heads/"))throw new _("missing_upstream",`Branch ${i} has no remote branch upstream. Push it with -u before handing off.`);let u=r.slice(11),f=a;if(!Xe(a))try{f=await t.remoteUrl(a)}catch{throw new _("missing_upstream","Could not resolve the upstream remote.")}let c=Xe(f);if(!c)throw new _("unsupported_remote","Cloud handoff currently requires a github.com upstream remote.");let h;try{h=await t.remoteRefs(a,r)}catch(p){let m=Q(p)===2,y=m?`The upstream branch ${u} was not found. Push it before handing off.`:"Could not verify the remote branch. Check your network and GitHub authentication, then try again.";throw new _(m?"remote_branch_missing":"git_command_failed",y)}let l=dn(h,u);if(!l)throw new _("remote_branch_missing",`The upstream branch ${u} was not found. Push it before handing off.`);if(l.toLowerCase()!==d.toLowerCase())throw new _("unpushed_commits",`Local HEAD does not match the upstream branch ${u}. Push the current commit before handing off.`);return{repoUrl:c,branch:u,headSha:d,...s?{workspaceRelativePath:s}:{}}}function pe(e){return e&&typeof e==="object"&&!Array.isArray(e)?e:void 0}function E(e){if(typeof e!=="string")return;return e.trim()||void 0}function un(e){return typeof e==="string"&&e.length>0?e:void 0}function ln(e){let t=E(e.repoUrl),n=E(e.branch),s=E(e.headSha),o=E(e.modelId);if(!t||!n||!s||!o)throw Error("Cloud handoff fingerprint fields cannot be empty.");let i=E(e.organizationId),a=un(e.workspaceRelativePath),r=e.mode;return{repoUrl:t,branch:n,headSha:s,modelId:o,...i?{organizationId:i}:{},...a?{workspaceRelativePath:a}:{},...r?{mode:r}:{}}}function Do(e,t){return e!==void 0&&t!==void 0&&e.repoUrl===t.repoUrl&&e.branch===t.branch&&e.headSha.toLowerCase()===t.headSha.toLowerCase()&&e.modelId===t.modelId&&e.organizationId===t.organizationId&&e.workspaceRelativePath===t.workspaceRelativePath&&e.mode===t.mode}function pn(e){let t=pe(e);if(!t||typeof t.repoUrl!=="string"||typeof t.branch!=="string"||typeof t.headSha!=="string"||typeof t.modelId!=="string")return;try{return ln({repoUrl:t.repoUrl,branch:t.branch,headSha:t.headSha,modelId:t.modelId,...typeof t.organizationId==="string"?{organizationId:t.organizationId}:{},...typeof t.workspaceRelativePath==="string"?{workspaceRelativePath:t.workspaceRelativePath}:{},...t.mode==="plan"||t.mode==="yolo"||t.mode==="zen"?{mode:t.mode}:{}})}catch{return}}function Lo(e){let t=pe(pe(e)?.handoff);if(!t)return;let n=E(t.toCloudSessionId),s=E(t.handedOffAt),o=t.status;if(!n||!s||o!=="pending"&&o!=="complete")return;let i=E(t.innerSessionId),a=E(t.dashboardUrl),r=pn(t.fingerprint);return{toCloudSessionId:n,handedOffAt:s,status:o,...i?{innerSessionId:i}:{},...a?{dashboardUrl:a}:{},...r?{fingerprint:r}:{}}}function Bo(e,t){return{...e??{},handoff:t}}function qo(e){let{handoff:t,cloudHandoffIntent:n,cloudHandoffSeedDispatched:s,...o}=e??{};return o}function No(e,t){let n=t.trim();if(!n)throw Error("Cloud session id cannot be empty.");let s=new URL("/agents",e);return s.searchParams.set("sessionId",n),s.toString()}function Ze(e){return e.map((t)=>{let n=t&&typeof t==="object"?t:{};return{role:n.role,content:n.content}})}function fe(e,t){return e.length===t.length&&JSON.stringify(Ze(e))===JSON.stringify(Ze(t))}class he extends Error{constructor(e,t){super(`Cloud transcript verification failed (local ${e} messages, cloud ${t}).`);this.name="CloudHandoffTranscriptMismatchError"}}import{randomUUID as fn}from"node:crypto";import{decodeJwtPayload as hn}from"@cline/shared";var mn=610000,gn=3000,B=15000,yn="CLOUD_SESSION_ERROR:",nt="__cline_create_request__:";function st(e){return(e.trim().split(`
|
|
8
|
-
`)[0]??"").trim().slice(0,72)}class g extends Error{code;detail;connectUrl;status;constructor(e,t,n,s){super(`${yn}${JSON.stringify({code:e,message:t,connectUrl:n})}`);this.code=e;this.detail=t;this.connectUrl=n;this.status=s;this.name="CloudSessionError"}}class ot extends Error{constructor(e){super(e instanceof Error?e.message:"Cloud handoff creation was rejected.",{cause:e});this.name="CloudHandoffCreationRejectedError"}}function ye(e){let t=e.length;while(t>0&&e[t-1]==="/")t--;return e.slice(0,t)}function bn(e){return`${nt}${e}`.slice(0,255)}function et(e){return e?.startsWith(nt)===!0}function be(e){switch(e){case"provisioning":case"cloning_repo":case"agent_starting":case"ready":case"failed":return e;default:return}}function me(e){let t=hn(e.replace(/^workos:/,""));return typeof t?.sub==="string"&&t.sub.trim()?t.sub.trim():void 0}function tt(e){return new Promise((t,n)=>{if(e.aborted){n(e.reason);return}let s=()=>{clearTimeout(o),n(e.reason)},o=setTimeout(()=>{e.removeEventListener("abort",s),t()},gn);e.addEventListener("abort",s,{once:!0})})}function wn(e,t){if(e&&typeof e==="object"){let n=e.error;if(typeof n==="string"&&n.trim())return n.trim()}return t}function ge(e,t,n,s){let o=wn(t,`Cloud session request failed (${e})`);if(e===401)return new g("authentication_required",o);if(e===404)return new g("session_not_found",o);if(e===410)return new g("session_expired",o);if(e===412)return new g("github_not_connected",o,s??`${ye(n)}/dashboard/integrations`);if(e===403&&o.trim().toLowerCase()==="forbidden")return new g("request_failed","Your active account or organization cannot create cloud sessions. Switch to Personal or another organization in Settings → Account, then try again.",void 0,e);return new g("request_failed",o,void 0,e)}class vn{options;apiBaseUrl;appBaseUrl;fetchImpl;createTimeoutMs;unconfirmedHandoffCreates=new Set;completedHandoffCreates=new Map;constructor(e){this.options=e;this.apiBaseUrl=ye(e.apiBaseUrl),this.appBaseUrl=ye(e.appBaseUrl),this.fetchImpl=e.fetch??fetch,this.createTimeoutMs=e.createTimeoutMs??mn}async request(e,t={},n,s,o){let i=!1,a;while(!0){let r;try{r=typeof s==="string"?s:await this.options.getAuthToken()}catch(f){if(a)throw ge(401,void 0,this.appBaseUrl,n);throw f}if(!r?.trim())throw new g("authentication_required","Sign in to Cline before starting a cloud session.");if(r.trim()===a)throw new g("authentication_required","The cloud session credential was rejected. Sign in again.");if(typeof s==="object"){if(s.subject?me(r.trim())!==s.subject:r.trim()!==s.token)throw new g("authentication_required","The signed-in account changed during cloud session creation.");s.token=r.trim()}o?.();let d=await this.fetchImpl(`${this.apiBaseUrl}${e}`,{...t,signal:t.signal??AbortSignal.timeout(B),headers:{Accept:"application/json",Authorization:`Bearer ${r.trim()}`,...t.body?{"Content-Type":"application/json"}:{},...t.headers}}),u=d.status===204?void 0:await d.json().catch(()=>{return});if(!d.ok){if(d.status===401&&typeof s==="object"&&!i&&s.subject){i=!0,a=r.trim();continue}throw ge(d.status,u,this.appBaseUrl,n)}return u?.data}}async list(e){return await this.listWithToken(e)}async listWithToken(e,t,n=!1){let s=e?.trim()?`?organizationId=${encodeURIComponent(e.trim())}`:"";return(await this.request(`/api/v1/session${s}`,{},void 0,t)??[]).flatMap((i)=>{if(!i||typeof i!=="object"||typeof i.id!=="string")return[];return[{...i,title:!n&&et(i.title)?void 0:i.title,repoContext:i.repoContext&&typeof i.repoContext==="object"?i.repoContext:{},metadata:{...i.metadata&&typeof i.metadata==="object"?i.metadata:{},...!n&&et(i.title)?{createRequestTitle:i.title}:{}}}]})}async listRepositories(e){let t=e?.trim(),n=t?`${this.appBaseUrl}/dashboard/organization/integrations`:`${this.appBaseUrl}/dashboard/integrations`,s=t?`/api/v1/organizations/${encodeURIComponent(t)}/integrations/github/repositories`:"/api/v1/integrations/github/repositories";try{let o=await this.request(s)??[];return{connected:!0,connectUrl:n,repositories:o.flatMap((i)=>{let a=Number(i.id),r=String(i.html_url??i.clone_url??"").trim();if(!Number.isSafeInteger(a)||a<=0||!r)return[];let d=String(i.name??"").trim();return[{id:a,name:d,fullName:String(i.full_name??(d||r)).trim(),url:r,defaultBranch:String(i.default_branch??"").trim()}]})}}catch(o){if(o instanceof g&&o.code==="session_not_found")return{connected:!1,connectUrl:n,repositories:[]};throw o}}async listBranches(e,t,n={}){if(!Number.isSafeInteger(e)||e<=0)throw new g("request_failed","Select a GitHub repository before loading branches.");let s=t?.trim(),o=s?`/api/v1/organizations/${encodeURIComponent(s)}/integrations/github/repositories/${e}/branches`:`/api/v1/integrations/github/repositories/${e}/branches`,i=new URLSearchParams,a=n.query?.trim(),r=n.cursor?.trim();if(a)i.set("query",a);if(r)i.set("cursor",r);let d=i.size>0?`${o}?${i}`:o;try{let u=await this.request(d),f=Array.isArray(u)?u:Array.isArray(u?.items)?u.items:[],c=a?.toLowerCase();return{available:!0,branches:f.flatMap((h)=>{let l=String(h.name??"").trim();return l&&(!Array.isArray(u)||!c||l.toLowerCase().includes(c))?[l]:[]}),nextToken:Array.isArray(u)?"":String(u?.nextToken??"").trim()}}catch(u){if(u instanceof g&&u.code==="session_not_found")return{available:!1,branches:[]};throw u}}async status(e,t={}){return await this.request(`/api/v1/session/${encodeURIComponent(e)}/status`,{signal:t.signal?AbortSignal.any([t.signal,AbortSignal.timeout(B)]):void 0},void 0,t.authToken)}async create(e){if(e.handoff&&typeof e.handoff.onCreating!=="function")throw new g("request_failed","Cloud handoff requires an onCreating callback to persist creation intent before dispatch.");let t=(await this.options.getAuthToken())?.trim();if(!t)throw new g("authentication_required","Sign in to Cline before starting a cloud session.");let n={token:t,subject:me(t)},s=bn(e.requestId?.trim()||fn()),o=e.handoff?`${n.subject??t}/${e.organizationId??""}/${e.requestId?.trim()??""}`:void 0;if(e.handoff&&!e.requestId?.trim())throw new g("request_failed","A stable request id is required for cloud handoff creation.");let i=async()=>(await this.listWithToken(e.organizationId??void 0,n,!0)).filter((c)=>c.title===s&&c.repoContext.repoUrl===e.repoUrl&&c.metadata.modelId===e.modelId&&(!e.branch?.trim()||c.repoContext.branch===e.branch.trim())),a=async(c)=>{if(c.status==="failed"||c.expiredAt&&Date.parse(c.expiredAt)<=Date.now()){let l=new g(c.status==="failed"?"session_failed":"session_expired","The recovered cloud handoff workspace is no longer usable.");try{await this.deleteWithAuth(c.id,n)}catch(p){if(!(p instanceof g&&(p.code==="session_not_found"||p.code==="session_expired")))throw AggregateError([l,p],"The unusable recovered cloud handoff workspace could not be removed.")}if(o)this.unconfirmedHandoffCreates.delete(o),this.completedHandoffCreates.delete(o);throw await e.handoff?.onOuterSessionRemoved?.(c.id),l}await e.handoff?.onOuterSessionCreated(c.id,{created:!1});let h={sessionId:c.id,status:c.status,sandboxUrl:c.sandboxUrl,cleanupAuthToken:n.token};if(o)this.unconfirmedHandoffCreates.delete(o),this.completedHandoffCreates.set(o,h);return h};if(o){let c=await i();if(c.length>1)throw new g("request_failed","Cloud handoff creation is ambiguous; inspect your cloud session list before continuing.");if(c[0])return await a(c[0]);let h=this.completedHandoffCreates.get(o);if(h){try{await this.request(`/api/v1/session/${encodeURIComponent(h.sessionId)}/status`,{},void 0,n)}catch(l){if(l instanceof g&&(l.code==="session_not_found"||l.code==="session_expired"))await e.handoff?.onOuterSessionRemoved?.(h.sessionId),this.completedHandoffCreates.delete(o),this.unconfirmedHandoffCreates.delete(o);throw l}return await e.handoff?.onOuterSessionCreated(h.sessionId,{created:!1}),{...h,cleanupAuthToken:n.token}}if(this.unconfirmedHandoffCreates.has(o))throw new g("request_failed","Cloud handoff creation is still unconfirmed. Recover the original request before creating another workspace.");this.unconfirmedHandoffCreates.add(o)}try{await e.handoff?.onCreating()}catch(c){if(o)this.unconfirmedHandoffCreates.delete(o);throw c}let r=new AbortController,d=setTimeout(()=>r.abort(),this.createTimeoutMs),u,f=!1;try{let c=await this.request("/api/v1/session",{method:"POST",body:JSON.stringify({modelId:e.modelId,repoUrl:e.repoUrl,...e.sandboxType?{sandboxType:e.sandboxType}:{},title:s,...e.branch?.trim()?{branch:e.branch.trim()}:{},...e.organizationId?.trim()?{organizationId:e.organizationId.trim()}:{}}),signal:r.signal},e.organizationId?.trim()?`${this.appBaseUrl}/dashboard/organization/integrations`:void 0,n,()=>{f=!0}),h=c?.sessionId?.trim();if(!h)throw new g("request_failed","The cloud session service returned no session id.");u=h,await this.persistHandoffOuterSession(e,h,n,o);let l={sessionId:h,status:c.status?.trim()||"provisioning",sandboxUrl:c.sandboxUrl?.trim()??"",cleanupAuthToken:n.token};if(o)this.unconfirmedHandoffCreates.delete(o),this.completedHandoffCreates.set(o,l);return l}catch(c){if(u)throw c;let h=!f||c instanceof g&&(c.status!==void 0&&c.status>=400&&c.status<500&&c.status!==408&&c.status!==409||["authentication_required","github_not_connected","session_not_found","session_expired"].includes(c.code));if(o&&h)throw this.unconfirmedHandoffCreates.delete(o),new ot(c);if(r.signal.aborted||!(c instanceof g)||c instanceof g&&c.code==="request_failed"&&(c.status===void 0||c.status>=500||c.status===408||c.status===409)){let p=[];try{p=await i()}catch(y){if(e.handoff)throw AggregateError([c,y],"Cloud handoff creation is unconfirmed and its session list could not be checked.")}if(p.length>1)throw new g("request_failed","Cloud session creation had an ambiguous result. Check your cloud session list before trying again.");let m=p[0];if(m){if(e.handoff)return await a(m);return{sessionId:m.id,status:m.status,sandboxUrl:m.sandboxUrl,cleanupAuthToken:n.token}}}else if(o)this.unconfirmedHandoffCreates.delete(o);throw c}finally{clearTimeout(d)}}async persistHandoffOuterSession(e,t,n,s){if(!e.handoff)return;try{await e.handoff.onOuterSessionCreated(t,{created:!0})}catch(o){try{await this.deleteWithAuth(t,n.token)}catch(i){if(!(i instanceof g&&(i.code==="session_not_found"||i.code==="session_expired")))throw AggregateError([o,i],`Cloud session ${t} was created but its recovery record could not be saved or its sandbox removed.`)}if(s)this.unconfirmedHandoffCreates.delete(s);throw await e.handoff.onOuterSessionRemoved?.(t),o}}async waitUntilReady(e,t,n){t=AbortSignal.any([t,AbortSignal.timeout(this.createTimeoutMs)]);let s=await this.options.getAuthToken(),o=s?{token:s,subject:me(s)}:void 0;while(!t.aborted){let i;try{i=await this.request(`/api/v1/session/${encodeURIComponent(e)}/status`,{signal:AbortSignal.any([t,AbortSignal.timeout(B)])},void 0,o)}catch(r){if(t.aborted)throw r;if(r instanceof g&&r.code!=="request_failed")throw r;await tt(t);continue}let a=i?.status?.trim().toLowerCase();if(n?.({phase:be(i?.phase)}),a==="ready"||a==="active")return;if(a==="failed")throw new g("session_failed",i?.statusReason?.trim()||"The cloud sandbox could not be prepared.");if(a!=="provisioning")throw new g("request_failed","The cloud session service returned an unexpected provisioning status.");await tt(t)}throw t.reason}async resume(e,t){return await this.request(`/api/v1/session/${encodeURIComponent(e)}/resume`,{method:"POST",signal:t?AbortSignal.any([t,AbortSignal.timeout(B)]):void 0})}async delete(e,t){await this.deleteWithAuth(e,t)}async deleteWithAuth(e,t){let n;try{await this.request(`/api/v1/session/${encodeURIComponent(e)}`,{method:"DELETE"},void 0,t)}catch(s){if(!(s instanceof g)||s.code!=="session_not_found"&&s.code!=="session_expired")throw s;n=s}for(let[s,o]of this.completedHandoffCreates)if(o.sessionId===e)this.completedHandoffCreates.delete(s),this.unconfirmedHandoffCreates.delete(s);if(n)throw n}async updateTitle(e,t){return await this.request(`/api/v1/session/${encodeURIComponent(e)}`,{method:"PATCH",body:JSON.stringify({title:t})})}async history(e){let t=await this.options.getAuthToken();if(!t?.trim())throw new g("authentication_required","Sign in to Cline to load this session's history.");let n=await this.fetchImpl(`${this.apiBaseUrl}/api/v1/session/${encodeURIComponent(e)}/history`,{headers:{Accept:"application/json",Authorization:`Bearer ${t.trim()}`},signal:AbortSignal.timeout(B)});if(n.status===404)return null;let s=await n.json().catch(()=>{return});if(!n.ok)throw ge(n.status,s,this.appBaseUrl);if(!s||typeof s!=="object"||!("version"in s)||s.version!==1||!("messages"in s)||!Array.isArray(s.messages))throw new g("request_failed","Invalid archived session history");return s.messages}}import{randomUUID as go}from"node:crypto";import{posix as ue}from"node:path";import{createSessionId as Bs,ensureLoopbackProxyBypass as Lt,isHubProtocolCompatible as qs,resolveClineBuildEnv as Ns,resolveHubCommandTimeoutMs as $s}from"@cline/shared";import Ws from"ws";var q={name:"@cline/core",description:"Cline Core SDK for Node Runtime",version:"0.0.91-nightly.1791426960",repository:{type:"git",url:"https://github.com/cline/cline",directory:"sdk/packages/core"},type:"module",types:"./dist/index.d.ts",main:"./dist/index.js",private:!1,publishConfig:{access:"public"},exports:{".":{types:"./dist/index.d.ts",import:"./dist/index.js"},"./hub":{types:"./dist/hub/index.d.ts",import:"./dist/hub/index.js"},"./hub/daemon-entry":{types:"./dist/hub/daemon/entry.d.ts",import:"./dist/hub/daemon/entry.js"},"./telemetry":{types:"./dist/services/telemetry/index.d.ts",import:"./dist/services/telemetry/index.js"},"./services/feature-flags/posthog":{types:"./dist/services/feature-flags/posthog.d.ts",import:"./dist/services/feature-flags/posthog.js"},"./remote/helper-entry":{types:"./dist/remote/remote-helper-entry.d.ts",import:"./dist/remote/remote-helper-entry.js"},"./cloud":{types:"./dist/cloud/index.d.ts",import:"./dist/cloud/index.js"},"./remote/helper":{types:"./dist/remote/remote-helper.d.ts",import:"./dist/remote/remote-helper.js"}},scripts:{build:"bun run ./bun.mts && bun tsc -p tsconfig.build.json && bun run ./scripts/verify-runtime-build-id.ts",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:compaction":"bun --conditions=development run scripts/compact-session.ts","test:unit":"vitest run --config vitest.config.ts","test:e2e":"vitest run --config vitest.e2e.config.ts","verify:routines":"zsh -lc 'bunx vitest run src/cron/schedule-service.test.ts --config vitest.config.ts'","test:watch":"vitest --config vitest.config.ts"},dependencies:{"@cline/agents":"workspace:*","@cline/shared":"workspace:*","@cline/llms":"workspace:*","@modelcontextprotocol/sdk":"^1.29.0","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.214.0","@opentelemetry/exporter-logs-otlp-http":"^0.214.0","@opentelemetry/exporter-metrics-otlp-http":"^0.214.0","@opentelemetry/exporter-trace-otlp-http":"^0.214.0","@opentelemetry/resources":"^2.6.1","@opentelemetry/sdk-logs":"^0.214.0","@opentelemetry/sdk-metrics":"^2.6.1","@opentelemetry/sdk-trace-base":"^2.6.1","@opentelemetry/sdk-trace-node":"^2.6.1","@opentelemetry/semantic-conventions":"^1.40.0",jiti:"^2.7.0","node-machine-id":"^1.1.12",nanoid:"^5.1.7","simple-git":"3.36.0",ws:"^8.20.0",yaml:"^2.8.2",zod:"^4.3.6"},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 it="session_not_found";class Y extends Error{sessionId;code="session_not_found";constructor(e,t){super(t??(e?`session not found: ${e}`:"session not found"));this.sessionId=e;this.name="SessionNotFoundError"}}function we(e){return e instanceof Y||typeof e==="object"&&e!==null&&"code"in e&&e.code==="session_not_found"}import{spawn as ss}from"node:child_process";import{closeSync as os,mkdirSync as is,openSync as rs,readFileSync as as,unlinkSync as ds}from"node:fs";import{basename as cs,dirname as us,join as ls}from"node:path";import{fileURLToPath as ps}from"node:url";import{CLINE_RUN_AS_HUB_DAEMON_ENV as fs,isBunEmbeddedModulePath as hs,isHubDaemonProcess as ms,resolveClineBuildEnv as Et,withResolvedClineBuildEnv as gs}from"@cline/shared";import{createHash as Sn,randomBytes as kn}from"node:crypto";import{mkdir as Ce,open as rt,readFile as lt,rename as Rn,rm as Se,writeFile as _n}from"node:fs/promises";import{dirname as pt,join as ke}from"node:path";import{ensureLoopbackProxyBypass as Pn,isHubProtocolCompatible as An}from"@cline/shared";import{resolveClineDataDir as N,resolveClineDir as oi}from"@cline/shared/storage";var Tn="CLINE_HUB_DISCOVERY_PATH",En="CLINE_HUB_BUILD_ID",xn="CLINE_HUB_BUILD_EPOCH_MS",Hn=30000,In=15000,at=100;function Mn(e){return e.replace(/[^a-zA-Z0-9_.-]+/g,"_")}function On(e){return Sn("sha256").update(e).digest("hex").slice(0,12)}function Un(e){if(!Number.isInteger(e)||!e||e<=0)return!1;try{return process.kill(e,0),!0}catch(t){return t instanceof Error&&"code"in t?String(t.code)==="EPERM":!1}}function dt(e){return new Promise((t)=>setTimeout(t,e))}function Dn(e){return`${e}.lock`}async function Ln(e){try{let t=JSON.parse(await lt(ke(e,"owner.json"),"utf8"));if(typeof t.pid!=="number"||typeof t.acquiredAt!=="string")return;return{pid:t.pid,acquiredAt:t.acquiredAt}}catch{return}}async function ve(e){await Se(e,{recursive:!0,force:!0}).catch(()=>{return})}function U(){let e=process.env[En]?.trim();if(e)return e;return"sdk-v1-77aa692eecd386bad1f2883eb786b1a2638d52c0e6d08eed4634219988f3c978".trim()||`source-${String(q.version)}`}function Bn(){let e=Number(process.env[xn]);if(Number.isFinite(e)&&e>0)return e;return Number.isFinite(1791426985997)?1791426985997:void 0}function X(e,t=U()){let n=An(e);if(!n.compatible)return n;let s=e.buildId?.trim();if(!s)return{compatible:!1,reason:"missing_build"};if(s!==t)return{compatible:!1,reason:"build_mismatch"};return{compatible:!0}}function ct(e){return typeof e==="number"&&Number.isFinite(e)&&e>0?e:void 0}function ut(e){let t=e?.trim().split(/[-+]/,1)[0];if(!t)return;let n=t.split(".").map((s)=>Number(s));if(n.length===0||n.some((s)=>!Number.isInteger(s)||s<0))return;return n}function qn(e,t){for(let n=0;n<Math.max(e.length,t.length);n++){let s=e[n]??0,o=t[n]??0;if(s!==o)return s<o?-1:1}return 0}function ft(e,t){let n=e.buildId?.trim(),s=t.buildId?.trim();if(n&&s&&n===s)return 0;let o=ct(e.buildEpochMs),i=ct(t.buildEpochMs);if(o!==void 0&&i!==void 0&&o!==i)return o<i?-1:1;let a=ut(e.coreVersion),r=ut(t.coreVersion);if(a&&r){let d=qn(a,r);if(d!==0)return d}if(n&&s&&n!==s)return n<s?-1:1;return 0}function ht(){return{buildId:U(),buildEpochMs:Bn(),coreVersion:String(q.version)}}function Z(e,t){let n=t?.self??ht(),s=X(e,n.buildId??"");if(s.compatible)return!0;if(s.reason!=="build_mismatch"&&s.reason!=="missing_build")return!1;return ft(n,e)<=0}function mt(e=process.argv[1]?.trim()||process.cwd()){let t=`hub-${On(e)}`,n=process.env[Tn]?.trim()||ke(N(),"locks","hub","owners",`${Mn(t)}.json`);return{ownerId:t,discoveryPath:n}}async function I(e){try{let t=JSON.parse(await lt(e,"utf8"));if(typeof t.hubId!=="string"||typeof t.protocolVersion!=="string"||typeof t.authToken!=="string"||typeof t.host!=="string"||typeof t.port!=="number"||typeof t.url!=="string"||typeof t.startedAt!=="string"||typeof t.updatedAt!=="string")return;return{hubId:t.hubId,protocolVersion:t.protocolVersion,minClientProtocolVersion:typeof t.minClientProtocolVersion==="string"?t.minClientProtocolVersion:void 0,maxClientProtocolVersion:typeof t.maxClientProtocolVersion==="string"?t.maxClientProtocolVersion:void 0,capabilities:Array.isArray(t.capabilities)?t.capabilities.filter((n)=>typeof n==="string"):void 0,coreVersion:typeof t.coreVersion==="string"?t.coreVersion:void 0,buildId:typeof t.buildId==="string"?t.buildId:void 0,buildEpochMs:typeof t.buildEpochMs==="number"?t.buildEpochMs:void 0,authToken:t.authToken,host:t.host,port:t.port,url:t.url,pid:typeof t.pid==="number"?t.pid:void 0,startedAt:t.startedAt,updatedAt:t.updatedAt}}catch{return}}async function gt(e,t){await bt(e,async()=>{let n=pt(e);await Ce(n,{recursive:!0});let s=`${e}.${process.pid}.${kn(6).toString("hex")}.tmp`,o;try{o=await rt(s,"wx",384),await o.writeFile(`${JSON.stringify(t,null,2)}
|
|
8
|
+
`)[0]??"").trim().slice(0,72)}class g extends Error{code;detail;connectUrl;status;constructor(e,t,n,s){super(`${yn}${JSON.stringify({code:e,message:t,connectUrl:n})}`);this.code=e;this.detail=t;this.connectUrl=n;this.status=s;this.name="CloudSessionError"}}class ot extends Error{constructor(e){super(e instanceof Error?e.message:"Cloud handoff creation was rejected.",{cause:e});this.name="CloudHandoffCreationRejectedError"}}function ye(e){let t=e.length;while(t>0&&e[t-1]==="/")t--;return e.slice(0,t)}function bn(e){return`${nt}${e}`.slice(0,255)}function et(e){return e?.startsWith(nt)===!0}function be(e){switch(e){case"provisioning":case"cloning_repo":case"agent_starting":case"ready":case"failed":return e;default:return}}function me(e){let t=hn(e.replace(/^workos:/,""));return typeof t?.sub==="string"&&t.sub.trim()?t.sub.trim():void 0}function tt(e){return new Promise((t,n)=>{if(e.aborted){n(e.reason);return}let s=()=>{clearTimeout(o),n(e.reason)},o=setTimeout(()=>{e.removeEventListener("abort",s),t()},gn);e.addEventListener("abort",s,{once:!0})})}function wn(e,t){if(e&&typeof e==="object"){let n=e.error;if(typeof n==="string"&&n.trim())return n.trim()}return t}function ge(e,t,n,s){let o=wn(t,`Cloud session request failed (${e})`);if(e===401)return new g("authentication_required",o);if(e===404)return new g("session_not_found",o);if(e===410)return new g("session_expired",o);if(e===412)return new g("github_not_connected",o,s??`${ye(n)}/dashboard/integrations`);if(e===403&&o.trim().toLowerCase()==="forbidden")return new g("request_failed","Your active account or organization cannot create cloud sessions. Switch to Personal or another organization in Settings → Account, then try again.",void 0,e);return new g("request_failed",o,void 0,e)}class vn{options;apiBaseUrl;appBaseUrl;fetchImpl;createTimeoutMs;unconfirmedHandoffCreates=new Set;completedHandoffCreates=new Map;constructor(e){this.options=e;this.apiBaseUrl=ye(e.apiBaseUrl),this.appBaseUrl=ye(e.appBaseUrl),this.fetchImpl=e.fetch??fetch,this.createTimeoutMs=e.createTimeoutMs??mn}async request(e,t={},n,s,o){let i=!1,a;while(!0){let r;try{r=typeof s==="string"?s:await this.options.getAuthToken()}catch(f){if(a)throw ge(401,void 0,this.appBaseUrl,n);throw f}if(!r?.trim())throw new g("authentication_required","Sign in to Cline before starting a cloud session.");if(r.trim()===a)throw new g("authentication_required","The cloud session credential was rejected. Sign in again.");if(typeof s==="object"){if(s.subject?me(r.trim())!==s.subject:r.trim()!==s.token)throw new g("authentication_required","The signed-in account changed during cloud session creation.");s.token=r.trim()}o?.();let d=await this.fetchImpl(`${this.apiBaseUrl}${e}`,{...t,signal:t.signal??AbortSignal.timeout(B),headers:{Accept:"application/json",Authorization:`Bearer ${r.trim()}`,...t.body?{"Content-Type":"application/json"}:{},...t.headers}}),u=d.status===204?void 0:await d.json().catch(()=>{return});if(!d.ok){if(d.status===401&&typeof s==="object"&&!i&&s.subject){i=!0,a=r.trim();continue}throw ge(d.status,u,this.appBaseUrl,n)}return u?.data}}async list(e){return await this.listWithToken(e)}async listWithToken(e,t,n=!1){let s=e?.trim()?`?organizationId=${encodeURIComponent(e.trim())}`:"";return(await this.request(`/api/v1/session${s}`,{},void 0,t)??[]).flatMap((i)=>{if(!i||typeof i!=="object"||typeof i.id!=="string")return[];return[{...i,title:!n&&et(i.title)?void 0:i.title,repoContext:i.repoContext&&typeof i.repoContext==="object"?i.repoContext:{},metadata:{...i.metadata&&typeof i.metadata==="object"?i.metadata:{},...!n&&et(i.title)?{createRequestTitle:i.title}:{}}}]})}async listRepositories(e){let t=e?.trim(),n=t?`${this.appBaseUrl}/dashboard/organization/integrations`:`${this.appBaseUrl}/dashboard/integrations`,s=t?`/api/v1/organizations/${encodeURIComponent(t)}/integrations/github/repositories`:"/api/v1/integrations/github/repositories";try{let o=await this.request(s)??[];return{connected:!0,connectUrl:n,repositories:o.flatMap((i)=>{let a=Number(i.id),r=String(i.html_url??i.clone_url??"").trim();if(!Number.isSafeInteger(a)||a<=0||!r)return[];let d=String(i.name??"").trim();return[{id:a,name:d,fullName:String(i.full_name??(d||r)).trim(),url:r,defaultBranch:String(i.default_branch??"").trim()}]})}}catch(o){if(o instanceof g&&o.code==="session_not_found")return{connected:!1,connectUrl:n,repositories:[]};throw o}}async listBranches(e,t,n={}){if(!Number.isSafeInteger(e)||e<=0)throw new g("request_failed","Select a GitHub repository before loading branches.");let s=t?.trim(),o=s?`/api/v1/organizations/${encodeURIComponent(s)}/integrations/github/repositories/${e}/branches`:`/api/v1/integrations/github/repositories/${e}/branches`,i=new URLSearchParams,a=n.query?.trim(),r=n.cursor?.trim();if(a)i.set("query",a);if(r)i.set("cursor",r);let d=i.size>0?`${o}?${i}`:o;try{let u=await this.request(d),f=Array.isArray(u)?u:Array.isArray(u?.items)?u.items:[],c=a?.toLowerCase();return{available:!0,branches:f.flatMap((h)=>{let l=String(h.name??"").trim();return l&&(!Array.isArray(u)||!c||l.toLowerCase().includes(c))?[l]:[]}),nextToken:Array.isArray(u)?"":String(u?.nextToken??"").trim()}}catch(u){if(u instanceof g&&u.code==="session_not_found")return{available:!1,branches:[]};throw u}}async status(e,t={}){return await this.request(`/api/v1/session/${encodeURIComponent(e)}/status`,{signal:t.signal?AbortSignal.any([t.signal,AbortSignal.timeout(B)]):void 0},void 0,t.authToken)}async create(e){if(e.handoff&&typeof e.handoff.onCreating!=="function")throw new g("request_failed","Cloud handoff requires an onCreating callback to persist creation intent before dispatch.");let t=(await this.options.getAuthToken())?.trim();if(!t)throw new g("authentication_required","Sign in to Cline before starting a cloud session.");let n={token:t,subject:me(t)},s=bn(e.requestId?.trim()||fn()),o=e.handoff?`${n.subject??t}/${e.organizationId??""}/${e.requestId?.trim()??""}`:void 0;if(e.handoff&&!e.requestId?.trim())throw new g("request_failed","A stable request id is required for cloud handoff creation.");let i=async()=>(await this.listWithToken(e.organizationId??void 0,n,!0)).filter((c)=>c.title===s&&c.repoContext.repoUrl===e.repoUrl&&c.metadata.modelId===e.modelId&&(!e.branch?.trim()||c.repoContext.branch===e.branch.trim())),a=async(c)=>{if(c.status==="failed"||c.expiredAt&&Date.parse(c.expiredAt)<=Date.now()){let l=new g(c.status==="failed"?"session_failed":"session_expired","The recovered cloud handoff workspace is no longer usable.");try{await this.deleteWithAuth(c.id,n)}catch(p){if(!(p instanceof g&&(p.code==="session_not_found"||p.code==="session_expired")))throw AggregateError([l,p],"The unusable recovered cloud handoff workspace could not be removed.")}if(o)this.unconfirmedHandoffCreates.delete(o),this.completedHandoffCreates.delete(o);throw await e.handoff?.onOuterSessionRemoved?.(c.id),l}await e.handoff?.onOuterSessionCreated(c.id,{created:!1});let h={sessionId:c.id,status:c.status,sandboxUrl:c.sandboxUrl,cleanupAuthToken:n.token};if(o)this.unconfirmedHandoffCreates.delete(o),this.completedHandoffCreates.set(o,h);return h};if(o){let c=await i();if(c.length>1)throw new g("request_failed","Cloud handoff creation is ambiguous; inspect your cloud session list before continuing.");if(c[0])return await a(c[0]);let h=this.completedHandoffCreates.get(o);if(h){try{await this.request(`/api/v1/session/${encodeURIComponent(h.sessionId)}/status`,{},void 0,n)}catch(l){if(l instanceof g&&(l.code==="session_not_found"||l.code==="session_expired"))await e.handoff?.onOuterSessionRemoved?.(h.sessionId),this.completedHandoffCreates.delete(o),this.unconfirmedHandoffCreates.delete(o);throw l}return await e.handoff?.onOuterSessionCreated(h.sessionId,{created:!1}),{...h,cleanupAuthToken:n.token}}if(this.unconfirmedHandoffCreates.has(o))throw new g("request_failed","Cloud handoff creation is still unconfirmed. Recover the original request before creating another workspace.");this.unconfirmedHandoffCreates.add(o)}try{await e.handoff?.onCreating()}catch(c){if(o)this.unconfirmedHandoffCreates.delete(o);throw c}let r=new AbortController,d=setTimeout(()=>r.abort(),this.createTimeoutMs),u,f=!1;try{let c=await this.request("/api/v1/session",{method:"POST",body:JSON.stringify({modelId:e.modelId,repoUrl:e.repoUrl,...e.sandboxType?{sandboxType:e.sandboxType}:{},title:s,...e.branch?.trim()?{branch:e.branch.trim()}:{},...e.organizationId?.trim()?{organizationId:e.organizationId.trim()}:{}}),signal:r.signal},e.organizationId?.trim()?`${this.appBaseUrl}/dashboard/organization/integrations`:void 0,n,()=>{f=!0}),h=c?.sessionId?.trim();if(!h)throw new g("request_failed","The cloud session service returned no session id.");u=h,await this.persistHandoffOuterSession(e,h,n,o);let l={sessionId:h,status:c.status?.trim()||"provisioning",sandboxUrl:c.sandboxUrl?.trim()??"",cleanupAuthToken:n.token};if(o)this.unconfirmedHandoffCreates.delete(o),this.completedHandoffCreates.set(o,l);return l}catch(c){if(u)throw c;let h=!f||c instanceof g&&(c.status!==void 0&&c.status>=400&&c.status<500&&c.status!==408&&c.status!==409||["authentication_required","github_not_connected","session_not_found","session_expired"].includes(c.code));if(o&&h)throw this.unconfirmedHandoffCreates.delete(o),new ot(c);if(r.signal.aborted||!(c instanceof g)||c instanceof g&&c.code==="request_failed"&&(c.status===void 0||c.status>=500||c.status===408||c.status===409)){let p=[];try{p=await i()}catch(y){if(e.handoff)throw AggregateError([c,y],"Cloud handoff creation is unconfirmed and its session list could not be checked.")}if(p.length>1)throw new g("request_failed","Cloud session creation had an ambiguous result. Check your cloud session list before trying again.");let m=p[0];if(m){if(e.handoff)return await a(m);return{sessionId:m.id,status:m.status,sandboxUrl:m.sandboxUrl,cleanupAuthToken:n.token}}}else if(o)this.unconfirmedHandoffCreates.delete(o);throw c}finally{clearTimeout(d)}}async persistHandoffOuterSession(e,t,n,s){if(!e.handoff)return;try{await e.handoff.onOuterSessionCreated(t,{created:!0})}catch(o){try{await this.deleteWithAuth(t,n.token)}catch(i){if(!(i instanceof g&&(i.code==="session_not_found"||i.code==="session_expired")))throw AggregateError([o,i],`Cloud session ${t} was created but its recovery record could not be saved or its sandbox removed.`)}if(s)this.unconfirmedHandoffCreates.delete(s);throw await e.handoff.onOuterSessionRemoved?.(t),o}}async waitUntilReady(e,t,n){t=AbortSignal.any([t,AbortSignal.timeout(this.createTimeoutMs)]);let s=await this.options.getAuthToken(),o=s?{token:s,subject:me(s)}:void 0;while(!t.aborted){let i;try{i=await this.request(`/api/v1/session/${encodeURIComponent(e)}/status`,{signal:AbortSignal.any([t,AbortSignal.timeout(B)])},void 0,o)}catch(r){if(t.aborted)throw r;if(r instanceof g&&r.code!=="request_failed")throw r;await tt(t);continue}let a=i?.status?.trim().toLowerCase();if(n?.({phase:be(i?.phase)}),a==="ready"||a==="active")return;if(a==="failed")throw new g("session_failed",i?.statusReason?.trim()||"The cloud sandbox could not be prepared.");if(a!=="provisioning")throw new g("request_failed","The cloud session service returned an unexpected provisioning status.");await tt(t)}throw t.reason}async resume(e,t){return await this.request(`/api/v1/session/${encodeURIComponent(e)}/resume`,{method:"POST",signal:t?AbortSignal.any([t,AbortSignal.timeout(B)]):void 0})}async delete(e,t){await this.deleteWithAuth(e,t)}async deleteWithAuth(e,t){let n;try{await this.request(`/api/v1/session/${encodeURIComponent(e)}`,{method:"DELETE"},void 0,t)}catch(s){if(!(s instanceof g)||s.code!=="session_not_found"&&s.code!=="session_expired")throw s;n=s}for(let[s,o]of this.completedHandoffCreates)if(o.sessionId===e)this.completedHandoffCreates.delete(s),this.unconfirmedHandoffCreates.delete(s);if(n)throw n}async updateTitle(e,t){return await this.request(`/api/v1/session/${encodeURIComponent(e)}`,{method:"PATCH",body:JSON.stringify({title:t})})}async history(e){let t=await this.options.getAuthToken();if(!t?.trim())throw new g("authentication_required","Sign in to Cline to load this session's history.");let n=await this.fetchImpl(`${this.apiBaseUrl}/api/v1/session/${encodeURIComponent(e)}/history`,{headers:{Accept:"application/json",Authorization:`Bearer ${t.trim()}`},signal:AbortSignal.timeout(B)});if(n.status===404)return null;let s=await n.json().catch(()=>{return});if(!n.ok)throw ge(n.status,s,this.appBaseUrl);if(!s||typeof s!=="object"||!("version"in s)||s.version!==1||!("messages"in s)||!Array.isArray(s.messages))throw new g("request_failed","Invalid archived session history");return s.messages}}import{randomUUID as go}from"node:crypto";import{posix as ue}from"node:path";import{createSessionId as Bs,ensureLoopbackProxyBypass as Lt,isHubProtocolCompatible as qs,resolveClineBuildEnv as Ns,resolveHubCommandTimeoutMs as $s}from"@cline/shared";import Ws from"ws";var q={name:"@cline/core",description:"Cline Core SDK for Node Runtime",version:"0.0.92",repository:{type:"git",url:"https://github.com/cline/cline",directory:"sdk/packages/core"},type:"module",types:"./dist/index.d.ts",main:"./dist/index.js",private:!1,publishConfig:{access:"public"},exports:{".":{types:"./dist/index.d.ts",import:"./dist/index.js"},"./hub":{types:"./dist/hub/index.d.ts",import:"./dist/hub/index.js"},"./hub/daemon-entry":{types:"./dist/hub/daemon/entry.d.ts",import:"./dist/hub/daemon/entry.js"},"./telemetry":{types:"./dist/services/telemetry/index.d.ts",import:"./dist/services/telemetry/index.js"},"./services/feature-flags/posthog":{types:"./dist/services/feature-flags/posthog.d.ts",import:"./dist/services/feature-flags/posthog.js"},"./remote/helper-entry":{types:"./dist/remote/remote-helper-entry.d.ts",import:"./dist/remote/remote-helper-entry.js"},"./cloud":{types:"./dist/cloud/index.d.ts",import:"./dist/cloud/index.js"},"./remote/helper":{types:"./dist/remote/remote-helper.d.ts",import:"./dist/remote/remote-helper.js"}},scripts:{build:"bun run ./bun.mts && bun tsc -p tsconfig.build.json && bun run ./scripts/verify-runtime-build-id.ts",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:compaction":"bun --conditions=development run scripts/compact-session.ts","test:unit":"vitest run --config vitest.config.ts","test:e2e":"vitest run --config vitest.e2e.config.ts","verify:routines":"zsh -lc 'bunx vitest run src/cron/schedule-service.test.ts --config vitest.config.ts'","test:watch":"vitest --config vitest.config.ts"},dependencies:{"@cline/agents":"workspace:*","@cline/shared":"workspace:*","@cline/llms":"workspace:*","@modelcontextprotocol/sdk":"^1.29.0","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.214.0","@opentelemetry/exporter-logs-otlp-http":"^0.214.0","@opentelemetry/exporter-metrics-otlp-http":"^0.214.0","@opentelemetry/exporter-trace-otlp-http":"^0.214.0","@opentelemetry/resources":"^2.6.1","@opentelemetry/sdk-logs":"^0.214.0","@opentelemetry/sdk-metrics":"^2.6.1","@opentelemetry/sdk-trace-base":"^2.6.1","@opentelemetry/sdk-trace-node":"^2.6.1","@opentelemetry/semantic-conventions":"^1.40.0",jiti:"^2.7.0","node-machine-id":"^1.1.12",nanoid:"^5.1.7","simple-git":"3.36.0",ws:"^8.20.0",yaml:"^2.8.2",zod:"^4.3.6"},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 it="session_not_found";class Y extends Error{sessionId;code="session_not_found";constructor(e,t){super(t??(e?`session not found: ${e}`:"session not found"));this.sessionId=e;this.name="SessionNotFoundError"}}function we(e){return e instanceof Y||typeof e==="object"&&e!==null&&"code"in e&&e.code==="session_not_found"}import{spawn as ss}from"node:child_process";import{closeSync as os,mkdirSync as is,openSync as rs,readFileSync as as,unlinkSync as ds}from"node:fs";import{basename as cs,dirname as us,join as ls}from"node:path";import{fileURLToPath as ps}from"node:url";import{CLINE_RUN_AS_HUB_DAEMON_ENV as fs,isBunEmbeddedModulePath as hs,isHubDaemonProcess as ms,resolveClineBuildEnv as Et,withResolvedClineBuildEnv as gs}from"@cline/shared";import{createHash as Sn,randomBytes as kn}from"node:crypto";import{mkdir as Ce,open as rt,readFile as lt,rename as Rn,rm as Se,writeFile as _n}from"node:fs/promises";import{dirname as pt,join as ke}from"node:path";import{ensureLoopbackProxyBypass as Pn,isHubProtocolCompatible as An}from"@cline/shared";import{resolveClineDataDir as N,resolveClineDir as oi}from"@cline/shared/storage";var Tn="CLINE_HUB_DISCOVERY_PATH",En="CLINE_HUB_BUILD_ID",xn="CLINE_HUB_BUILD_EPOCH_MS",Hn=30000,In=15000,at=100;function Mn(e){return e.replace(/[^a-zA-Z0-9_.-]+/g,"_")}function On(e){return Sn("sha256").update(e).digest("hex").slice(0,12)}function Un(e){if(!Number.isInteger(e)||!e||e<=0)return!1;try{return process.kill(e,0),!0}catch(t){return t instanceof Error&&"code"in t?String(t.code)==="EPERM":!1}}function dt(e){return new Promise((t)=>setTimeout(t,e))}function Dn(e){return`${e}.lock`}async function Ln(e){try{let t=JSON.parse(await lt(ke(e,"owner.json"),"utf8"));if(typeof t.pid!=="number"||typeof t.acquiredAt!=="string")return;return{pid:t.pid,acquiredAt:t.acquiredAt}}catch{return}}async function ve(e){await Se(e,{recursive:!0,force:!0}).catch(()=>{return})}function U(){let e=process.env[En]?.trim();if(e)return e;return"sdk-v1-8c6ba172d40b62f7ae3d9e3ae6af40ce96b9ccaf9139732e6a4bf769d1c8155c".trim()||`source-${String(q.version)}`}function Bn(){let e=Number(process.env[xn]);if(Number.isFinite(e)&&e>0)return e;return Number.isFinite(1791436112296)?1791436112296:void 0}function X(e,t=U()){let n=An(e);if(!n.compatible)return n;let s=e.buildId?.trim();if(!s)return{compatible:!1,reason:"missing_build"};if(s!==t)return{compatible:!1,reason:"build_mismatch"};return{compatible:!0}}function ct(e){return typeof e==="number"&&Number.isFinite(e)&&e>0?e:void 0}function ut(e){let t=e?.trim().split(/[-+]/,1)[0];if(!t)return;let n=t.split(".").map((s)=>Number(s));if(n.length===0||n.some((s)=>!Number.isInteger(s)||s<0))return;return n}function qn(e,t){for(let n=0;n<Math.max(e.length,t.length);n++){let s=e[n]??0,o=t[n]??0;if(s!==o)return s<o?-1:1}return 0}function ft(e,t){let n=e.buildId?.trim(),s=t.buildId?.trim();if(n&&s&&n===s)return 0;let o=ct(e.buildEpochMs),i=ct(t.buildEpochMs);if(o!==void 0&&i!==void 0&&o!==i)return o<i?-1:1;let a=ut(e.coreVersion),r=ut(t.coreVersion);if(a&&r){let d=qn(a,r);if(d!==0)return d}if(n&&s&&n!==s)return n<s?-1:1;return 0}function ht(){return{buildId:U(),buildEpochMs:Bn(),coreVersion:String(q.version)}}function Z(e,t){let n=t?.self??ht(),s=X(e,n.buildId??"");if(s.compatible)return!0;if(s.reason!=="build_mismatch"&&s.reason!=="missing_build")return!1;return ft(n,e)<=0}function mt(e=process.argv[1]?.trim()||process.cwd()){let t=`hub-${On(e)}`,n=process.env[Tn]?.trim()||ke(N(),"locks","hub","owners",`${Mn(t)}.json`);return{ownerId:t,discoveryPath:n}}async function I(e){try{let t=JSON.parse(await lt(e,"utf8"));if(typeof t.hubId!=="string"||typeof t.protocolVersion!=="string"||typeof t.authToken!=="string"||typeof t.host!=="string"||typeof t.port!=="number"||typeof t.url!=="string"||typeof t.startedAt!=="string"||typeof t.updatedAt!=="string")return;return{hubId:t.hubId,protocolVersion:t.protocolVersion,minClientProtocolVersion:typeof t.minClientProtocolVersion==="string"?t.minClientProtocolVersion:void 0,maxClientProtocolVersion:typeof t.maxClientProtocolVersion==="string"?t.maxClientProtocolVersion:void 0,capabilities:Array.isArray(t.capabilities)?t.capabilities.filter((n)=>typeof n==="string"):void 0,coreVersion:typeof t.coreVersion==="string"?t.coreVersion:void 0,buildId:typeof t.buildId==="string"?t.buildId:void 0,buildEpochMs:typeof t.buildEpochMs==="number"?t.buildEpochMs:void 0,authToken:t.authToken,host:t.host,port:t.port,url:t.url,pid:typeof t.pid==="number"?t.pid:void 0,startedAt:t.startedAt,updatedAt:t.updatedAt}}catch{return}}async function gt(e,t){await bt(e,async()=>{let n=pt(e);await Ce(n,{recursive:!0});let s=`${e}.${process.pid}.${kn(6).toString("hex")}.tmp`,o;try{o=await rt(s,"wx",384),await o.writeFile(`${JSON.stringify(t,null,2)}
|
|
9
9
|
`,{encoding:"utf8"}),await o.sync(),await o.close(),o=void 0,await Rn(s,e);let i;try{i=await rt(n,"r"),await i.sync()}catch{}finally{await i?.close().catch(()=>{return})}}catch(i){throw await o?.close().catch(()=>{return}),await Se(s,{force:!0}).catch(()=>{return}),i}})}async function D(e){await bt(e,async()=>{await Se(e,{force:!0}).catch(()=>{return})})}async function yt(e,t,n){let s=Dn(e);await Ce(pt(s),{recursive:!0});let o=Date.now()+In;while(!0){try{await Ce(s,{recursive:!1})}catch(i){if((i instanceof Error&&"code"in i?String(i.code):"")!=="EEXIST")throw i;let r=await Ln(s);if(!r){if(Date.now()>=o){await ve(s);continue}await dt(at);continue}let d=Date.now()-Date.parse(r.acquiredAt);if(!Un(r.pid)||d>Hn){await ve(s);continue}if(Date.now()>=o)throw Error(`Timed out waiting for hub ${t} lock ${s}`);await dt(at);continue}try{return await _n(ke(s,"owner.json"),`${JSON.stringify({pid:process.pid,acquiredAt:new Date().toISOString()},null,2)}
|
|
10
10
|
`,"utf8"),await n()}finally{await ve(s)}}}function bt(e,t){return yt(`${e}.mutation`,"discovery mutation",t)}function wt(e,t){return yt(e,"startup",t)}async function ee(e,t){Pn();try{let n=await fetch(t?.authToken?Nn(e):Ct(e),{headers:t?.authToken?{authorization:`Bearer ${t.authToken}`}:void 0,signal:t?.signal});if(!n.ok)return;let s=await n.json();if(typeof s.protocolVersion!=="string"||typeof s.host!=="string"||typeof s.port!=="number"||typeof s.url!=="string")return;return{protocolVersion:s.protocolVersion,minClientProtocolVersion:typeof s.minClientProtocolVersion==="string"?s.minClientProtocolVersion:void 0,maxClientProtocolVersion:typeof s.maxClientProtocolVersion==="string"?s.maxClientProtocolVersion:void 0,capabilities:Array.isArray(s.capabilities)?s.capabilities.filter((o)=>typeof o==="string"):void 0,coreVersion:typeof s.coreVersion==="string"?s.coreVersion:void 0,buildId:typeof s.buildId==="string"?s.buildId:void 0,buildEpochMs:typeof s.buildEpochMs==="number"?s.buildEpochMs:void 0,host:s.host,port:s.port,url:s.url,hubId:typeof s.hubId==="string"?s.hubId:void 0,authToken:typeof s.authToken==="string"?s.authToken:void 0,pid:typeof s.pid==="number"?s.pid:void 0,startedAt:typeof s.startedAt==="string"?s.startedAt:void 0,updatedAt:typeof s.updatedAt==="string"?s.updatedAt:void 0}}catch{return}}function vt(e,t,n="/hub"){return new URL(`ws://${e}:${t}${n}`).toString()}function Ct(e){let t=new URL(e);return t.protocol=t.protocol==="wss:"?"https:":"http:",t.pathname="/health",t.search="",t.toString()}function Nn(e){let t=new URL(Ct(e));return t.pathname="/status",t.toString()}import{CLINE_HUB_DEV_PORT as $n,CLINE_HUB_PORT as Wn,resolveClineBuildEnv as jn}from"@cline/shared";var Fn="CLINE_HUB_HOST",zn="CLINE_HUB_PORT",Gn="CLINE_HUB_PATHNAME",Jn="127.0.0.1",Vn=Wn,Kn="/hub";function St(e){return jn(e)==="development"?$n:Vn}function Qn(e={}){return(e.env??process.env)[Fn]?.trim()||Jn}function Yn(e={}){let n=(e.env??process.env)[zn]?.trim();if(!n)return St(e);let s=Number.parseInt(n,10);if(!Number.isInteger(s)||s<1||s>65535)return St(e);return s}function Xn(e={}){return(e.env??process.env)[Gn]?.trim()||Kn}function kt(e={},t={}){return{host:e.host??Qn(t),port:e.port??Yn(t),pathname:e.pathname??Xn(t)}}import{join as Zn}from"node:path";var es="shared:cline",ts="CLINE_HUB_DISCOVERY_PATH",ns="hub-production";function W(e=es){return mt(`${e}@${U()}`)}function te(){return{ownerId:ns,discoveryPath:process.env[ts]?.trim()||Zn(N(),"locks","hub","production.json")}}var Rt=15000,ys=200,_t=3000,bs=100,ws=[100,250,500,1000,2000],vs="--cline-hub-daemon",Cs=3,Ss=60000,Pt=new Map;function ks(e,t=Date.now()){let n=Pt.get(e);if(!n||t-n.windowStartedAt>Ss)return Pt.set(e,{count:1,windowStartedAt:t}),!0;return n.count+=1,n.count<=Cs}function Rs(e){return[...e.host?["--host",e.host]:[],...typeof e.port==="number"?["--port",String(e.port)]:[],...e.pathname?["--pathname",e.pathname]:[]]}function _s(){try{let e=ls(N(),"logs","hub-daemon.log");return is(us(e),{recursive:!0}),{fd:rs(e,"a"),logPath:e}}catch{return}}function Ps(){return Et()==="production"?te():W()}function j(e){return Z(e)}function As(e){try{let t=JSON.parse(as(`${e}.superseded`,"utf8"));return{url:typeof t.url==="string"?t.url:void 0,authToken:typeof t.authToken==="string"?t.authToken:void 0,pid:typeof t.pid==="number"?t.pid:void 0}}catch{return}}function Re(e){try{ds(`${e}.superseded`)}catch{}}function At(e,t,n){if(!t||t.url!==n)return e;return{...e,authToken:e.authToken??t.authToken,pid:e.pid??t.pid}}async function F(e,t){try{return await ee(e,{authToken:t})}catch{return}}async function Tt(e,t){let n=Date.now()+t;while(Date.now()<n){if(!(await F(e))?.url)return!0;await new Promise((o)=>setTimeout(o,bs))}return!1}async function Pe(e,t){if(!ks(e.url))return!1;await z(e.url,e.authToken,"retired by newer install").catch(()=>!1),await Ht(e.url,e.authToken).catch(()=>!1);let n=await Tt(e.url,_t);if(!n&&e.pid&&Ts(e.pid)){try{process.kill(e.pid,"SIGTERM")}catch{}n=await Tt(e.url,_t)}if(n)await D(t).catch(()=>{return});return n}function Ts(e){try{return process.kill(e,0),!0}catch(t){return t?.code==="EPERM"}}async function Es(e){try{return(await Ae(e.url,e.authToken)).activeSessionCount>0}catch{return!1}}async function _e(e,t){if(j(e))return"reusable";let n=await z(e.url,e.authToken,"retired by newer install").catch(()=>!1);if(await Es(e)){if(n)await z(e.url,e.authToken,"hub retirement deferred",{off:!0}).catch(()=>!1);return"deferred_busy"}let s=await Pe(e,t);if(!s&&n)await z(e.url,e.authToken,"hub retirement failed",{off:!0}).catch(()=>!1);return s?"retired":"failed"}async function xs(e){if(Et()!=="production")return;let t=W();if(t.discoveryPath===e.discoveryPath)return;let n=await I(t.discoveryPath);if(n?.url)await Pe(n,t.discoveryPath);else await D(t.discoveryPath).catch(()=>{return})}function Hs(){let e=import.meta.url.endsWith(".ts")?"ts":"js";return ps(new URL(`./entry.${e}`,import.meta.url))}function Is(e,t){if(hs(e))return[vs];return[...t&&e.toLowerCase().endsWith(".ts")?["--conditions=development"]:[],e]}function Ms(e,t){let n=Hs(),s=process.execPath?.trim();if(!s)throw Error("unable to resolve runtime executable for hub daemon");let o=cs(s).toLowerCase().includes("bun"),i=Is(n,o);return{launcher:s,args:[...i,"--cwd",e,...Rs(t),...t.manageConnectors===!1?["--no-connectors"]:[]],cwd:e,env:{...gs(process.env),CLINE_NO_INTERACTIVE:"1",[fs]:"1"}}}function Os(e){if(!e||typeof e!=="object")return!1;if(("code"in e?e.code:void 0)==="ETXTBSY")return!0;let n="message"in e?e.message:void 0;return typeof n==="string"&&n.includes("ETXTBSY")}function Us(e,t={}){if(ms())return;let n=Ms(e,t),s=_s();try{ss(n.launcher,n.args,{detached:!0,stdio:s?["ignore",s.fd,s.fd]:"ignore",env:n.env,cwd:n.cwd,windowsHide:!0}).unref()}finally{if(s)os(s.fd)}}async function Ds(e,t={}){for(let n=0;;n++)try{Us(e,t);return}catch(s){let o=ws[n];if(!Os(s)||o===void 0)throw s;await new Promise((i)=>setTimeout(i,o))}}async function Ls(e,t,n={}){let s=n.host!==void 0||n.port!==void 0||n.pathname!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),o=kt(n),i=vt(o.host,o.port,o.pathname),a=(p)=>{if(!s)ne(p.url,p.authToken);return p};await xs(e).catch(()=>{return});let r=await I(e.discoveryPath),d=r?.url?void 0:As(e.discoveryPath),u=!1;if(r?.url){let p=r.authToken;if(!p)u=!0,await Pe(r,e.discoveryPath);else{let m=await F(r.url,p);if(m?.url&&j(m)&&await x(m.url,{authToken:p}))return Re(e.discoveryPath),a({url:m.url,authToken:p});if(m?.url){if(await _e({...m,authToken:p},e.discoveryPath)==="deferred_busy"&&await x(m.url,{authToken:p}))return a({url:m.url,authToken:p})}else await D(e.discoveryPath).catch(()=>{return})}}let f=await F(i);if(f?.url){let p=At(f,r??d,i);if(j(f)){let y=[f.authToken,r?.authToken,d?.authToken].filter((v)=>typeof v==="string"&&v.trim().length>0);for(let v of y){if(!await x(f.url,{authToken:v}))continue;let P={hubId:f.hubId??`repaired-${f.port}`,protocolVersion:f.protocolVersion,minClientProtocolVersion:f.minClientProtocolVersion,maxClientProtocolVersion:f.maxClientProtocolVersion,capabilities:f.capabilities,coreVersion:f.coreVersion,buildId:f.buildId,authToken:v,host:f.host,port:f.port,url:f.url,pid:f.pid??r?.pid??d?.pid,startedAt:f.startedAt??new Date().toISOString(),updatedAt:new Date().toISOString()};try{await gt(e.discoveryPath,P)}catch{}return Re(e.discoveryPath),a({url:f.url,authToken:v})}throw Error(`A compatible Cline Hub is already running at ${i}, but its discovery record is missing or unreadable and no usable auth token is available. Run 'cline doctor fix' to repair local hub discovery.${u?" 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.":""}`)}let m=await _e(p,e.discoveryPath);if(m==="deferred_busy"){for(let y of[p.authToken,r?.authToken].filter((w)=>typeof w==="string"&&w.trim().length>0))if(await x(f.url,{authToken:y}))return a({url:f.url,authToken:y});if(n.allowPortFallback!==!0&&o.port!==0)throw Error(`An older Cline Hub is running at ${i} and is still serving active sessions, so it was not replaced, but no usable auth token is available to attach to it. Finish those sessions, or run 'cline doctor fix' to stop the hub.`)}if(m==="failed"&&n.allowPortFallback!==!0&&o.port!==0)throw Error(`An incompatible Cline Hub is already running at ${i} and could not be retired automatically. Run 'cline doctor fix' to stop stale hub daemons before starting a new hub.`)}let h=n.allowPortFallback===!0&&o.port!==0?{...o,port:0}:o;await Ds(t,{...h,manageConnectors:n.manageConnectors});let l=Date.now()+Rt;while(Date.now()<l){let p=await I(e.discoveryPath);if(p?.url&&p.authToken){let y=await F(p.url,p.authToken);if(y?.url&&j(y)&&await x(y.url,{authToken:p.authToken}))return Re(e.discoveryPath),a({url:y.url,authToken:p.authToken})}let m=await F(i);if(m?.url&&!j(m)){let y=At(m,p??d,i),w=await _e(y,e.discoveryPath);if(w==="deferred_busy"&&p?.authToken&&await x(m.url,{authToken:p.authToken}))return a({url:m.url,authToken:p.authToken});if(w==="failed"&&n.allowPortFallback!==!0&&o.port!==0)throw Error(`An incompatible Cline Hub is still running at ${i} and could not be retired automatically. Run 'cline doctor fix' to stop stale hub daemons before starting a new hub.`)}await new Promise((y)=>setTimeout(y,ys))}throw Error(`Timed out after ${Rt}ms waiting for detached hub startup.`)}async function xt(e,t={}){let n=Ps();return await wt(n.discoveryPath,async()=>Ls(n,e,t))}function js(){return Ns()==="production"?te():W()}function Fs(){let e=globalThis.WebSocket;if(!e)throw Error("Global WebSocket is not available in this runtime. Node 22+ is required for hub mode.");return e}function Bt(e){if(typeof e==="string")return e;if(e instanceof Uint8Array)return Buffer.from(e).toString();if(e instanceof ArrayBuffer)return Buffer.from(e).toString();if(Array.isArray(e))return Buffer.concat(e.map((t)=>Buffer.from(t))).toString();if(e&&typeof e==="object"&&"data"in e&&typeof e.data<"u")return Bt(e.data);return String(e)}function zs(e){if(typeof e==="string")return e;if(e instanceof Uint8Array)return Buffer.from(e).toString("utf8");if(e instanceof ArrayBuffer)return Buffer.from(e).toString("utf8");return""}function It(e){let t=e,n=zs(t.reason);return new k("hub_connection_closed",t.code||n?`Hub connection closed (code=${t.code??0}${n?`, reason=${n}`:""})`:Ee,{closeCode:t.code,closeReason:n||void 0})}function Mt(e,t){if(e instanceof k)return e;if(e instanceof Error)return new k("hub_connect_failed",e.message);if(e&&typeof e==="object"&&"error"in e&&e.error instanceof Error)return new k("hub_connect_failed",e.error.message);let n=e&&typeof e==="object"&&"message"in e&&typeof e.message==="string"?e.message.trim():"";if(n)return new k("hub_connect_failed",n);let s=e&&typeof e==="object"&&"type"in e&&typeof e.type==="string"?e.type.trim():"";return new k("hub_connect_failed",s?`Failed to connect to hub at ${t.toString()} (${s} event before socket open).`:`Failed to connect to hub at ${t.toString()}.`)}var Te="*",se=8000,Gs="cline-hub-auth.",qt=new Map,Nt=new Set,Js=3000;var Ee="Hub connection closed",Vs=250,Ks=5000,Ot=0.5;class k extends Error{code;details;constructor(e,t,n){super(t);this.code=e;this.details=n;this.name="HubTransportError"}}function Qs(e){return e instanceof k}class xe extends Error{command;code;constructor(e,t,n){super(n);this.command=e;this.code=t;this.name="HubCommandError"}}function Ie(e,t={}){let n=e.searchParams.get("authToken")?.trim();if(e.searchParams.delete("authToken"),n)return n;if(t.skipRegistry)return;let s=Me(e.toString());return s?qt.get(s):void 0}function Ys(e){try{let n=new URL(e).hostname.toLowerCase().replace(/^\[|\]$/g,"");return n==="localhost"||n==="127.0.0.1"||n==="::1"}catch{return!1}}function Me(e){if(!Ys(e))return;let t=new URL($t(e));return t.search="",t.hash="",t.toString()}function Ut(e){let t=Me(e);return!!t&&Nt.has(t)}function ne(e,t){let n=Me(e);if(n){if(Nt.add(n),t?.trim())qt.set(n,t)}return e}class G{options;socket;connectPromise;clientId;currentUrl;recoveryPromise;pendingReplies=new Map;listeners=new Set;subscriptionCounts=new Map;lastEventSequenceByKey=new Map;reconnectTimer;reconnectAttempt=0;closedByClient=!1;connectGeneration=0;lastCloseError=new k("hub_connection_closed",Ee);sawSocketClose=!1;registered=!1;capabilities;constructor(e){this.options=e;if(e.authToken?.trim()&&e.resolveConnectionHeaders)throw Error("Hub connection headers cannot be combined with authToken authentication.");this.clientId=e.clientId??`core-${Math.random().toString(36).slice(2,10)}-${Date.now().toString(36)}`,this.currentUrl=e.url,this.capabilities=[...e.capabilities??[]]}getClientId(){return this.clientId}getUrl(){return this.currentUrl}isConnected(){return this.socket?.readyState===1&&this.registered}getConnectionError(){return this.isConnected()?null:this.lastCloseError}async updateCapabilities(e){if(this.capabilities=e.map((t)=>({...t})),!this.registered)return;await this.command("client.update",{capabilities:this.capabilities})}async connect(){if(this.connectPromise)return this.connectPromise;if(this.socket&&(this.socket.readyState===1||this.socket.readyState===0))return this.connectPromise??Promise.resolve();this.closedByClient=!1,this.clearReconnectTimer();let e=new URL(this.currentUrl),t=this.options.authToken?.trim()||Ie(e,{skipRegistry:Boolean(this.options.resolveConnectionHeaders)});if(e.hash="",t&&this.options.resolveConnectionHeaders)throw Error("Hub connection headers cannot be combined with authToken authentication.");let n=++this.connectGeneration,s=this.openSocket(e,t,n),o;this.connectPromise=s.then(async(a)=>{if(o=a,await this.commandOnce("client.register",{clientId:this.clientId,clientType:this.options.clientType??"core",displayName:this.options.displayName??"core",transport:"native",actorKind:"client",capabilities:this.capabilities,metadata:{...this.options.metadata,version:this.options.clientVersion??String(q.version),pid:process.pid},workspaceContext:{workspaceRoot:this.options.workspaceRoot,cwd:this.options.cwd}},void 0,void 0,!1),n!==this.connectGeneration||this.closedByClient){try{a.close()}catch{}throw this.lastCloseError}this.registered=!0;for(let r of this.subscriptionCounts.keys())this.sendSubscriptionFrame("stream.subscribe",this.subscriptionSessionIdFromKey(r));this.reconnectAttempt=0});let i=this.connectPromise;try{await i}catch(a){if(this.connectPromise===i)this.connectPromise=void 0;if(o&&this.socket===o){this.lastCloseError=Mt(a,e),this.registered=!1,this.sawSocketClose=!1,this.socket=void 0;try{o.close()}catch{}}if(!this.closedByClient&&this.hasActiveSubscriptions())this.scheduleReconnect();throw a}}async openSocket(e,t,n){let s=this.options.resolveConnectionHeaders,o;if(s){let d;try{o=await Promise.race([Promise.resolve().then(()=>s()),new Promise((u,f)=>{d=setTimeout(()=>{f(new k("hub_connect_timeout",`Timed out resolving hub connection headers after ${se}ms`))},se)})])}catch(u){let f=u instanceof k?u:new k("hub_connect_failed",u instanceof Error?u.message:String(u));if(n===this.connectGeneration)this.lastCloseError=f;throw f}finally{clearTimeout(d)}}if(n!==this.connectGeneration||this.closedByClient)throw this.lastCloseError;if(o&&Object.keys(o).some((d)=>d.toLowerCase()==="sec-websocket-protocol")){let d=new k("hub_connect_failed","Hub connection headers cannot set Sec-WebSocket-Protocol.");if(n===this.connectGeneration)this.lastCloseError=d;throw d}let i=o?new Ws(e.toString(),{headers:{...o}}):new(Fs())(e.toString(),t?[`${Gs}${t}`]:void 0);this.socket=i;let a=!1,r=new Promise((d,u)=>{let f=!1,c=setTimeout(()=>{if(f)return;f=!0,a=!0;let h=new k("hub_connect_timeout",`Timed out connecting to hub after ${se}ms`);if(this.socket===i)this.lastCloseError=h,this.sawSocketClose=!1,this.connectPromise=void 0,this.socket=void 0;try{i.close()}catch{}u(h)},se);i.addEventListener("open",()=>{if(f)return;f=!0,clearTimeout(c),d()}),i.addEventListener("error",(h)=>{if(f)return;f=!0,clearTimeout(c);let l=Mt(h,e);if(this.socket===i)this.lastCloseError=l,this.sawSocketClose=!1,this.connectPromise=void 0,this.socket=void 0;u(l)}),i.addEventListener("close",(h)=>{if(f)return;f=!0,clearTimeout(c);let l=a?this.lastCloseError:It(h);if(this.socket===i){if(!a)this.lastCloseError=l,this.sawSocketClose=!0;this.connectPromise=void 0,this.socket=void 0}u(l)})});return i.addEventListener("message",(d)=>{this.handleFrame(JSON.parse(Bt(d)))}),i.addEventListener("close",(d)=>{if(this.socket!==i)return;if(!a)this.lastCloseError=It(d),this.sawSocketClose=!0;this.registered=!1;for(let u of this.pendingReplies.values())u.reject(this.lastCloseError);if(this.pendingReplies.clear(),this.connectPromise=void 0,this.socket=void 0,!this.closedByClient&&this.hasActiveSubscriptions())this.scheduleReconnect()}),await r,i}subscribe(e,t){let n=t?.sessionId?.trim()||void 0,s={listener:e,sessionId:n};return this.listeners.add(s),this.adjustSubscriptionCount(n,1),()=>{if(!this.listeners.delete(s))return;this.adjustSubscriptionCount(n,-1)}}async command(e,t,n,s){let o=0,i=e!=="client.register"&&e!=="client.unregister";while(!0)try{return await this.commandOnce(e,t,n,s)}catch(a){if(!i||o>=1||!await this.recoverLocalHubTransport(a))throw a;o+=1}}async commandOnce(e,t,n,s,o=!0){if(o)await this.connect();s?.beforeDispatch?.();let i=Bs("hubreq_");s?.onDispatch?.(i);let a=$s(e,s?.timeoutMs),r=new Promise((u,f)=>{let c=a===null?void 0:setTimeout(()=>{if(!this.pendingReplies.delete(i))return;f(new xe(e,"hub_command_timeout",`Hub command ${e} timed out after ${a}ms (hub=${this.currentUrl}, requestId=${i}, clientId=${this.clientId}). Check hub-daemon.log for matching command.start/command.slow entries, or run 'cline doctor fix' to restart the hub.`))},a);this.pendingReplies.set(i,{resolve:(h)=>{if(c)clearTimeout(c);u(h)},reject:(h)=>{if(c)clearTimeout(c);f(h)}})});try{this.sendFrame({kind:"command",envelope:{version:"v1",command:e,requestId:i,clientId:this.clientId,sessionId:n,timeoutMs:a,payload:t}})}catch(u){throw this.pendingReplies.delete(i),u}let d=await r;if(!d.ok){if(d.error?.code===it){let u=n??(typeof t?.sessionId==="string"?t.sessionId:void 0);throw new Y(u,d.error.message)}throw new xe(e,d.error?.code,d.error?.message??`Hub command ${e} failed`)}return d}async recoverLocalHubTransport(e){if(!Ut(this.currentUrl)||!Qs(e))return!1;if(this.recoveryPromise)return await this.recoveryPromise;return this.recoveryPromise=(async()=>{let t=await Dt({workspaceRoot:this.options.workspaceRoot,cwd:this.options.cwd}).catch(()=>{return});if(!t)return!1;return this.currentUrl=t,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 e=Math.min(Vs*2**this.reconnectAttempt,Ks),t=Math.round(e*(1-Ot)+Math.random()*e*Ot);this.reconnectTimer=setTimeout(()=>{this.reconnectTimer=void 0,this.reconnectSubscribedTransport()},t)}async reconnectSubscribedTransport(){if(this.closedByClient||!this.hasActiveSubscriptions())return;try{await this.connect(),this.reconnectAttempt=0}catch{if(!Ut(this.currentUrl)){this.reconnectAttempt+=1,this.scheduleReconnect();return}try{let e=await Dt({workspaceRoot:this.options.workspaceRoot,cwd:this.options.cwd});if(e){this.currentUrl=e,await this.connect(),this.reconnectAttempt=0;return}}catch{}this.reconnectAttempt+=1,this.scheduleReconnect()}}close(){let e=this.socket;if(this.closedByClient=!0,this.connectGeneration+=1,this.clearReconnectTimer(),this.registered=!1,e)this.lastCloseError=new k("hub_connection_closed",Ee);for(let t of this.pendingReplies.values())t.reject(this.lastCloseError);if(this.pendingReplies.clear(),this.connectPromise=void 0,!e)return;this.sawSocketClose=!1,this.socket=void 0;try{e.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(e){if(!this.socket||this.socket.readyState!==1){if(this.lastCloseError.code==="hub_connection_closed"&&!this.sawSocketClose)throw new k("hub_connection_not_open","Hub connection is not open.");throw this.lastCloseError}this.socket.send(JSON.stringify(e))}sendSubscriptionFrame(e,t){let n=e==="stream.subscribe"?this.lastEventSequenceByKey.get(this.subscriptionKeyForSessionId(t)):void 0;this.sendFrame({kind:e,clientId:this.clientId,...t?{sessionId:t}:{},...n!==void 0?{sinceSequence:n}:{}})}adjustSubscriptionCount(e,t){let n=this.subscriptionKeyForSessionId(e),s=(this.subscriptionCounts.get(n)??0)+t;if(s<=0){if(this.subscriptionCounts.delete(n),!this.hasActiveSubscriptions())this.clearReconnectTimer();if(t<0&&this.socket?.readyState===1)this.sendSubscriptionFrame("stream.unsubscribe",e);return}if(this.subscriptionCounts.set(n,s),t>0&&s===1&&this.socket?.readyState===1)this.sendSubscriptionFrame("stream.subscribe",e)}subscriptionKeyForSessionId(e){return e??Te}subscriptionSessionIdFromKey(e){return e===Te?void 0:e}handleFrame(e){switch(e.kind){case"reply":{let t=e.envelope.requestId;if(!t)return;let n=this.pendingReplies.get(t);if(!n)return;this.pendingReplies.delete(t),n.resolve(e.envelope);return}case"event":{let t=e.envelope.sequence;if(typeof t==="number"){let n=e.envelope.sessionId?.trim();for(let s of[Te,n]){if(!s||!this.subscriptionCounts.has(s))continue;let o=this.lastEventSequenceByKey.get(s)??0;if(t>o)this.lastEventSequenceByKey.set(s,t)}}for(let n of this.listeners){if(n.sessionId&&n.sessionId!==e.envelope.sessionId?.trim())continue;n.listener(e.envelope)}return}case"command":case"stream.subscribe":case"stream.unsubscribe":return}}}function $t(e){let t=new URL(e);if(t.protocol==="http:")t.protocol="ws:";else if(t.protocol==="https:")t.protocol="wss:";return t.toString()}async function x(e,t){let n=new G({url:e,authToken:t?.authToken,clientType:"hub-healthcheck",displayName:"hub healthcheck",workspaceRoot:t?.workspaceRoot,cwd:t?.cwd});try{return await n.connect(),!0}catch{return!1}finally{n.close()}}async function He(e,t){let n=$t(e),s=await ee(n,{authToken:t?.authToken});if(!s)return{status:"unreachable",url:n};if(t?.requireCurrentBuild){let o=U(),i=X(s,o);if(!i.compatible&&!Z(s))return{status:i.reason==="unsupported_protocol"?"protocol_mismatch":"build_mismatch",url:n}}else if(!qs(s).compatible)return{status:"protocol_mismatch",url:n};if(t?.verifyConnection===!0&&!await x(n,{workspaceRoot:t.workspaceRoot,cwd:t.cwd,authToken:t.authToken}))return{status:"unreachable",url:n};return{status:"compatible",url:n}}function Xs(e){let t=e&&typeof e==="object"&&Array.isArray(e.sessions)?e.sessions:[],n=0,s=new Set;for(let o of t){if(!o||typeof o!=="object")continue;let i=o.participants;if(!Array.isArray(i)||i.length===0)continue;n+=1;for(let a of i){let r=a&&typeof a==="object"?a.clientId:void 0;if(typeof r==="string"&&r.trim())s.add(r)}}return{activeSessionCount:n,participantClientCount:s.size}}async function Ae(e,t,n){let s=new G({url:e,authToken:t,clientType:"hub-recovery-check",displayName:"hub recovery check",workspaceRoot:n?.workspaceRoot,cwd:n?.cwd});try{let o=await s.command("session.list",{limit:500},void 0,{timeoutMs:Js});return Xs(o.payload)}finally{await s.dispose().catch(()=>{return})}}async function Zs(e,t,n){try{return(await Ae(e,t,n)).activeSessionCount===0}catch{return!1}}async function eo(e,t){let n=`${e.discoveryPath}.superseded`,s=await I(n);if(!s?.url||!s.authToken)return;let o=await He(s.url,{authToken:s.authToken});if(o.status!=="compatible")return;if(await Zs(o.url,s.authToken,t))return;return ne(o.url,s.authToken)}async function to(e={}){if(e.endpoint?.trim()){let o=await He(e.endpoint);return o.status==="compatible"?o.url:void 0}let t=js(),n=await I(t.discoveryPath);if(!n?.url)return await eo(t,e);let s=await He(n.url,{authToken:n.authToken,requireCurrentBuild:!0});if(s.status==="compatible")return ne(s.url,n.authToken);if(s.status==="protocol_mismatch")await D(t.discoveryPath).catch(()=>{return});return}async function Dt(e={}){let t=await to(e);if(t&&await x(t,{workspaceRoot:e.workspaceRoot,cwd:e.cwd}))return t;if(e.endpoint?.trim())return;try{return(await xt(e.workspaceRoot??process.cwd())).url}catch(n){e.onStartupError?.(n);return}}async function z(e,t,n,s){Lt();let o=new URL(e),i=t?.trim()||Ie(o);if(o.protocol==="ws:")o.protocol="http:";else if(o.protocol==="wss:")o.protocol="https:";if(o.pathname="/drain",o.hash="",n)o.searchParams.set("reason",n);if(s?.off)o.searchParams.set("off","1");return(await fetch(o,{method:"POST",headers:i?{authorization:`Bearer ${i}`}:void 0})).ok}async function Ht(e,t){Lt();let n=new URL(e),s=t?.trim()||Ie(n);if(n.protocol==="ws:")n.protocol="http:";else if(n.protocol==="wss:")n.protocol="https:";return n.pathname="/shutdown",n.hash="",(await fetch(n,{method:"POST",headers:s?{authorization:`Bearer ${s}`}:void 0})).ok}function no(e,t){if(!e||typeof e!=="object")return;let n=e,s=typeof n.id==="string"?n.id.trim():"";if(!s)return;let o=typeof n.display_name==="string"?n.display_name.trim():typeof n.displayName==="string"?n.displayName.trim():"",i=typeof n.name==="string"?n.name.trim():"";return{id:s,name:o||i||s,catalogId:t}}function Oe(e,t){return Array.isArray(e)?e.flatMap((n)=>{let s=no(n,t);return s?[s]:[]}):[]}async function Wt(e,t={}){let n=e.trim(),s=n.length;while(s>0&&n[s-1]==="/")s--;let o=n.slice(0,s),i=async(m)=>{let y=await(t.fetchImpl??fetch)(`${o}${m}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(1e4)});if(!y.ok)throw Error(`HTTP ${y.status}`);return await y.json()},a,r;try{[a,r]=await Promise.all([i("/api/v1/ai/cline/models"),i("/api/v1/ai/cline/recommended-models")])}catch(m){throw Error("Could not load the cloud model catalog.",{cause:m})}let d=a&&typeof a==="object"?a:void 0,u=Oe(Array.isArray(a)?a:d?.data,"cline"),f=r&&typeof r==="object"?r:void 0,c=f?.data&&typeof f.data==="object"?f.data:f,h=Oe(c?.clinePass,"cline-pass"),l=Oe(c?.clineCloud,"cline-cloud"),p=new Set;return[...t.isOrganizationSession?[]:h,...l,...u].filter((m)=>{if(p.has(m.id))return!1;return p.add(m.id),!0})}import{formatDisplayUserInput as jt}from"@cline/shared";var so=new Set(["auto_compaction","compaction_budget_emergency","completion_reminder","loop_detection_notice","manual_compaction","mistake_stop_notice","recovery_notice"]);function oo(e){switch(e){case"user":case"assistant":case"tool":case"system":case"status":case"error":return e;default:return"assistant"}}function io(e){return e.metadata&&typeof e.metadata==="object"&&!Array.isArray(e.metadata)?e.metadata:void 0}function ro(e){let t=e?.userRunSpan;return typeof t==="number"&&Number.isInteger(t)&&t>=0?t:void 0}function ao(e){if(typeof e.content==="string")return{hasAttachment:!1,text:e.content};if(!Array.isArray(e.content))return{hasAttachment:!1,text:"unknown"};let t=!1,n=!1,s=[];for(let o of e.content){if(!o||typeof o!=="object"||Array.isArray(o))continue;let i=o;if(i.type==="text"&&typeof i.text==="string")s.push(i.text);else if(i.type==="tool_result"||i.type==="tool-result")n=!0;else if(i.type==="file"||i.type==="image")t=!0}return{hasAttachment:t&&!n,text:s.join(`
|
|
11
11
|
`)}}function co(e){let t=jt(e);return t.startsWith("[TASK RESUMPTION]")||t==="The user approved switching to act mode. Continue with the approved plan now."}function uo(e){if(oo(e.role)!=="user")return 0;let t=io(e),n=typeof t?.kind==="string"?t.kind:void 0,s=ro(t);if(n==="compaction"||n==="compaction_summary")return s??1;if(s!==void 0)return s;if(n&&so.has(n))return 0;let o=ao(e);if(!o.hasAttachment&&!jt(o.text))return 0;if(!o.hasAttachment&&co(o.text))return 0;return 1}function Ft(e){return uo(e)>0}function re(e){return Array.isArray(e?.sessions)?e.sessions.filter((t)=>Boolean(t)&&typeof t==="object"&&!Array.isArray(t)):[]}function Ue(e){let t=e.updatedAt;return typeof t==="number"?t:Date.parse(String(t??""))||0}function De(e){let t=e?.metadata&&typeof e.metadata==="object"?e.metadata:void 0;return String(t?.model??e?.model??"").trim()}function ae(e){let t=e.metadata&&typeof e.metadata==="object"?e.metadata:void 0;return!String(t?.parentSessionId??e.parentSessionId??"").trim()}function Vt(e,t="text"){if(!e||typeof e!=="object"||Array.isArray(e))return"";let n=e.content;if(typeof n==="string")return t==="text"?n.trim():"";if(!Array.isArray(n))return"";return n.map((s)=>s&&typeof s==="object"&&!Array.isArray(s)?t==="thinking"&&s.type==="redacted_thinking"?"[redacted]":String(s[t]??""):"").join("").trim()}function oe(e){let t=e.trim(),n=t.match(/^<user_input\b[^>]*>([\s\S]*)<\/user_input>$/);return(n?n[1]:t).trim()}function J(e,t,n){let s=oe(n);return e.filter((o)=>Boolean(o)&&typeof o==="object"&&!Array.isArray(o)&&String(o.role??"").toLowerCase()==="user"&&(s!==""||Ft(o))&&oe(Vt(o))===s).length+t.filter((o)=>oe(o.prompt)===s).length}function Le(e){return e.flatMap((t)=>{if(t.event!=="session.pending_prompt_submitted")return[];let n=t.payload?.prompt&&typeof t.payload.prompt==="object"&&!Array.isArray(t.payload.prompt)?t.payload.prompt:void 0,s=String(n?.id??"").trim();if(!s)return[];return[{id:s,prompt:String(n?.prompt??""),steer:n?.delivery==="steer",attachmentCount:typeof n?.attachmentCount==="number"?n.attachmentCount:0,userImages:Array.isArray(n?.userImages)?n.userImages.filter((o)=>typeof o==="string"):void 0}]})}var lo=new Set(["run.completed","run.aborted","run.failed"]),po=new Set(["assistant.delta","assistant.finished","reasoning.delta","reasoning.finished"]);function zt(e,t){return e.filter((n)=>Boolean(n)&&typeof n==="object"&&!Array.isArray(n)&&String(n.role??"").toLowerCase()==="assistant").map((n)=>Vt(n,t)).filter(Boolean)}function Gt(e,t,n="text"){let s=new Map;for(let o of zt(t,n))s.set(o,(s.get(o)??0)+1);return zt(e,n).filter((o)=>{let i=s.get(o)??0;if(i===0)return!0;if(i===1)s.delete(o);else s.set(o,i-1);return!1})}function ie(e,t,n=new Set){if(!e||typeof e!=="object")return n;if(Array.isArray(e)){for(let i of e)ie(i,t,n);return n}let s=e,o=t==="tool_use"?s.id:s.tool_use_id;if(s.type===t&&typeof o==="string")n.add(o);for(let i of Object.values(s))ie(i,t,n);return n}function Jt(e,t="assistant"){let n="",s="";for(let o of e)if(o.event===`${t}.delta`)s+=t==="reasoning"&&o.payload?.redacted&&!o.payload?.text?"[redacted]":typeof o.payload?.text==="string"?o.payload.text:"";else if(o.event===`${t}.finished`){let i=o.payload?.[t==="assistant"?"text":"reasoning"],a=typeof i==="string"&&i?i:s;if(a)n=a;s=""}return(n||s).trim()}function Kt(e,t,n={}){let s=n.queueSnapshotApplied!==!1,o=Gt(t,n.baselineMessages??[]),i=Gt(t,n.baselineMessages??[],"thinking"),a=ie(t,"tool_use"),r=ie(t,"tool_result"),d=new Set(e.slice(0,n.messagesSnapshotEventCutoff??e.length)),u=new Set,f=new Map;for(let y of e.slice(0,n.messagesSnapshotEventCutoff??e.length)){let w=Le([y])[0];if(!w)continue;let v=oe(w.prompt),P=f.get(v)??Math.max(0,J(t,[],v)-J(n.baselineMessages??[],[],v));if(f.set(v,Math.max(0,P-1)),P>0)u.add(y)}let h=[...s?e.slice(n.queueSnapshotEventCutoff??e.length):e].reverse().find((y)=>y.event==="session.pending_prompts"),l=[],p=[],m=(y)=>{if(p.length===0)return;let w=p.filter((A)=>d.has(A)),v=(A)=>{if(!y)return-1;let S=[...w].reverse().findIndex((tn)=>tn.event===`${A}.finished`),L=S<0?-1:w.length-1-S;return L>=0||p.at(-1)?.event==="run.aborted"?L:w.length-1},P=v("assistant"),H=v("reasoning"),b=Jt(w.slice(0,P+1)),R=b?o.findIndex((A)=>A.endsWith(b)):-1,M=R>=0;if(M)o.splice(R,1);let V=Jt(w.slice(0,H+1),"reasoning"),le=V?i.findIndex((A)=>A.endsWith(V)):-1;if(le>=0)i.splice(le,1);for(let[A,S]of p.entries()){if(u.has(S)){l.push({...S,payload:{...S.payload,transcriptReflected:!0}});continue}if(d.has(S)&&po.has(S.event)&&(S.event.startsWith("reasoning.")?le>=0&&A<=H:M&&A<=P))continue;if(S.event==="session.pending_prompts"&&S!==h)continue;if(d.has(S)&&S.event.startsWith("tool.")){let L=String(S.payload?.toolCallId??"").trim();if(r.has(L)||S.event==="tool.started"&&a.has(L))continue}l.push(S)}p=[]};for(let y of e)if(p.push(y),lo.has(y.event))m(!0);return m(!1),l}import{formatDisplayUserInput as fo}from"@cline/shared";function de(e){let t=structuredClone(e),n=(s)=>{if(!s||typeof s!=="object"||Object.isFrozen(s))return;for(let o of Object.values(s))n(o);Object.freeze(s)};return n(t),t}function ce(e){let t=e?.trim();return t?fo(t).slice(0,120):void 0}function Be(e){if(typeof e==="string")return e;if(Array.isArray(e)){let t=[];for(let n of e){if(typeof n==="string"){if(n.trim())t.push(n);continue}if(!n||typeof n!=="object")continue;let s=n,o=typeof s.type==="string"?s.type:"",i=o==="text"?String(s.text??""):o==="thinking"?String(s.thinking??""):o==="tool_use"?`[tool] ${String(s.name??"tool_call")}`:o==="tool_result"?`[tool_result]
|
package/dist/hub/daemon/entry.js
CHANGED
|
@@ -253,7 +253,7 @@ Searched ${f} files.`;let S=[`Found ${g.length} result${g.length===1?"":"s"} for
|
|
|
253
253
|
|
|
254
254
|
...[assistant text truncated: omitted ${e} chars due to repeated tool-call markup]...
|
|
255
255
|
|
|
256
|
-
`;function SS(e=process.env){return{maxToolResultChars:yS(e[iu.maxToolResultChars]),maxTotalTextBytes:yS(e[iu.maxTotalTextBytes]),minOutdatedRewriteBytes:sO(e[iu.minOutdatedRewriteBytes])}}class cu{recoveryNotices=new WeakSet;getToolResultRecovery;recoveryNoticeBytes=0;indexedMessageCount=0;indexedTailRef;toolNameByIdCache=new Map;readLocatorsByToolUseIdCache=new Map;latestReadToolUseByLocatorCache=new Map;latestFullContentOwnerByPathCache=new Map;readResultLocatorCache=new WeakMap;maxToolResultChars;maxFileContentChars;maxTotalTextBytes;mediaBudget;maxAssistantTextChars;maxAssistantToolMarkupChars;minOutdatedRewriteBytes;committedOutdatedRewrites=new Map;constructor(e={}){this.getToolResultRecovery=e.getToolResultRecovery,this.maxToolResultChars=Uo(e.maxToolResultChars,du),this.maxFileContentChars=Uo(e.maxFileContentChars,XM),this.maxTotalTextBytes=Uo(e.maxTotalTextBytes,JM),this.mediaBudget=e.mediaBudget??{},this.maxAssistantTextChars=Uo(e.maxAssistantTextChars,YM),this.maxAssistantToolMarkupChars=Uo(e.maxAssistantToolMarkupChars,QM),this.minOutdatedRewriteBytes=iO(e.minOutdatedRewriteBytes,ZM)}resetConversationState(){this.resetIndexes(),this.committedOutdatedRewrites.clear()}buildForApi(e){this.recoveryNoticeBytes=0,this.reindex(e),this.commitOutdatedRewrites(e);let n=this.addMissingToolResults(e).map((o)=>{if(!Array.isArray(o.content)){if(o.role==="user"&&typeof o.content==="string"){let a=lS(o.content);if(a!==o.content)return{...o,content:a}}if(o.role==="assistant"&&typeof o.content==="string"){let a=this.truncateAssistantText(o.content);if(a!==o.content)return{...o,content:a}}return o}let s=!1,i=o.content.map((a)=>{let d=this.transformBlock(a,o.role);if(d!==a)s=!0;return d});return s?{...o,content:i}:o}),r=this.applyMediaBudget(n);return this.truncateToTotalTextBudget(r)}transformBlock(e,t){if(t==="user"&&e.type==="text"&&typeof e.text==="string"){let s=lS(e.text);if(s!==e.text)return{...e,text:s};return e}if(t==="assistant"&&e.type==="text"&&typeof e.text==="string"){let s=this.truncateAssistantText(e.text);return s===e.text?e:{...e,text:s}}if(e.type==="file"){let s=Fo(e.content,this.maxFileContentChars,gS);return s===e.content?e:{...e,content:s}}if(e.type!=="tool_result")return e;let n=this.resolveToolName(e),r=this.getToolResultRecovery?.({...e,name:n??e.name});if(r){let{text:s,images:i}=aa(e.content);if(typeof s==="string"&&s.length>this.maxToolResultChars){let a=[{type:"text",text:this.truncateMiddle(s)},...i];if(r.uri){let d={type:"text",text:`Full result is temporarily saved to ${r.uri}. Only read_files can access this cache URI. Use read_files with specific line ranges if omitted content is needed.`},c=me(d.text);if(this.recoveryNoticeBytes+c<=this.maxTotalTextBytes/2)this.recoveryNoticeBytes+=c,this.recoveryNotices.add(d),a.push(d)}return{...e,content:a}}}let o=e.content;if(this.isReadTool(n)&&e.is_error!==!0){let s=this.committedOutdatedRewrites.get(e.tool_use_id);if(s&&s.size>0){let a=this.getReadLocators(e).filter((d)=>s.has(this.toReadLocatorKey(d))&&this.isOutdatedReadLocator(d,e.tool_use_id));if(a.length>0)o=this.replaceOutdatedReadContent(o,a)}}return o=this.truncateToolResultContent(o),o===e.content?e:{...e,content:o}}reindex(e){let t=this.indexedMessageCount===0||e.length>=this.indexedMessageCount&&e[this.indexedMessageCount-1]===this.indexedTailRef;if(e.length<this.indexedMessageCount||!t)this.resetIndexes();for(let n=this.indexedMessageCount;n<e.length;n++){let r=e[n];if(!Array.isArray(r.content))continue;for(let o=0;o<r.content.length;o++){let s=r.content[o];if(s.type==="file")this.latestFullContentOwnerByPathCache.set(s.path,`file:${n}:${o}`);else if(s.type==="tool_use"){let i=s.name.toLowerCase();if(this.toolNameByIdCache.set(s.id,i),this.isReadTool(i)){let a=this.extractLocatorsFromReadToolInput(s.input);if(a.length>0)this.readLocatorsByToolUseIdCache.set(s.id,a)}}else if(s.type==="tool_result"){let i=this.resolveToolName(s);if(!this.isReadTool(i)||s.is_error===!0)continue;let a=this.getReadLocators(s);for(let d of a)if(this.latestReadToolUseByLocatorCache.set(this.toReadLocatorKey(d),s.tool_use_id),this.isFullFileRead(d))this.latestFullContentOwnerByPathCache.set(d.path,s.tool_use_id)}}}this.indexedMessageCount=e.length,this.indexedTailRef=e.length>0?e[e.length-1]:void 0}commitOutdatedRewrites(e){let t=new Map,n=new Set,r=0;for(let o of e){if(!Array.isArray(o.content))continue;for(let s of o.content){if(s.type!=="tool_result"||s.is_error===!0)continue;let i=this.resolveToolName(s);if(!this.isReadTool(i))continue;n.add(s.tool_use_id);let a=this.committedOutdatedRewrites.get(s.tool_use_id),d=new Set,c=new Set;for(let u of this.getReadLocators(s)){let p=this.toReadLocatorKey(u);if(!this.isOutdatedReadLocator(u,s.tool_use_id))continue;if(c.add(p),!a?.has(p))d.add(p)}if(a){for(let u of a)if(!c.has(u))a.delete(u);if(a.size===0)this.committedOutdatedRewrites.delete(s.tool_use_id)}if(d.size===0)continue;let l=t.get(s.tool_use_id);if(!l)l=new Set,t.set(s.tool_use_id,l);for(let u of d)l.add(u);r+=this.estimateOutdatedReclaimBytes(s.content,d)}}for(let o of this.committedOutdatedRewrites.keys())if(!n.has(o))this.committedOutdatedRewrites.delete(o);if(t.size===0||r<this.minOutdatedRewriteBytes)return;for(let[o,s]of t){let i=this.committedOutdatedRewrites.get(o);if(!i)i=new Set,this.committedOutdatedRewrites.set(o,i);for(let a of s)i.add(a)}}estimateOutdatedReclaimBytes(e,t){let n=this.extractReadLocatorsFromToolResultContent(e),r=n.length>0&&n.every((d)=>t.has(this.toReadLocatorKey(d))),o=(d)=>{let c;try{c=JSON.parse(d)}catch{return r||n.length===0?me(this.truncateMiddle(d)):0}let l=Array.isArray(c)?c:[c],u=0;for(let p of l){let m=this.extractLocatorFromResultEntry(p);if(m&&t.has(this.toReadLocatorKey(m)))u+=this.providerBoundEntryBytes(p)}return u};if(typeof e==="string")return o(e);let s=new Set(t),i=0;for(let d of e)if(d.type==="text")i+=this.countOutdatedImageEntries(d.text,s);let a=0;for(let d of e)if(d.type==="text")a+=o(d.text);else if(d.type==="image"){if(i>0)i-=1,a+=me(d.data)}else if(mn(d)){let c=this.extractLocatorFromResultEntry(d);if(c&&t.has(this.toReadLocatorKey(c)))a+=this.providerBoundEntryBytes(d)}else if(d.type==="file"){if(t.has(this.toReadLocatorKey({path:d.path,startLine:null,endLine:null})))a+=me(this.truncateMiddle(d.content))}return a}providerBoundEntryBytes(e){let t=this.truncateNestedStrings(e);return me(JSON.stringify(t))}addMissingToolResults(e){let t=this.collectToolResultIds(e),n=[],r=new Map,o=!1,s=()=>{if(r.size===0)return;i(this.createMissingToolResultMessage(r)),r.clear(),o=!0},i=(a)=>{let d=n.at(-1);if(this.shouldMergeUserAfterToolResults(d,a)){n[n.length-1]={...d,content:[...d.content,...this.contentBlocksForUserMerge(a.content)]},o=!0;return}n.push(a)};for(let a of e){if(this.isToolResultOnlyMessage(a)){if(i(this.appendMissingToolResults(a,r)),r.size>0)r.clear(),o=!0;continue}if(Array.isArray(a.content)){let d=a.content.filter((l)=>l.type==="tool_result"),c=a.content.filter((l)=>l.type!=="tool_result");if(d.length>0){let l=this.appendMissingToolResults({...a,role:"user",content:d},r);if(i(l),r.size>0)r.clear();o=!0}if(c.length>0||d.length===0){if(d.length===0)s();let l=d.length>0?{...a,content:c}:a;if(i(l),l.role==="assistant")this.trackMissingToolCalls(l,t,r)}continue}s(),i(a)}return s(),o?n:e}appendMissingToolResults(e,t){if(t.size===0||!Array.isArray(e.content))return e;return{...e,role:"user",content:[...e.content,...this.createMissingToolResultBlocks(t)]}}shouldMergeUserAfterToolResults(e,t){return e?.role==="user"&&t.role==="user"&&this.isToolResultOnlyMessage(e)&&this.contentBlocksForUserMerge(t.content).length>0}contentBlocksForUserMerge(e){return typeof e==="string"?e.length>0?[{type:"text",text:e}]:[]:e}collectToolResultIds(e){let t=new Set;for(let n of e){if(!Array.isArray(n.content))continue;for(let r of n.content)if(r.type==="tool_result")t.add(r.tool_use_id)}return t}isToolResultOnlyMessage(e){return e.role==="user"&&Array.isArray(e.content)&&e.content.length>0&&e.content.every((t)=>t.type==="tool_result")}trackMissingToolCalls(e,t,n){if(!Array.isArray(e.content))return;for(let r of e.content){if(r.type!=="tool_use"||t.has(r.id))continue;n.set(r.id,r.name)}}createMissingToolResultMessage(e){return{role:"user",content:this.createMissingToolResultBlocks(e)}}createMissingToolResultBlocks(e){return Array.from(e,([t,n])=>({type:"tool_result",tool_use_id:t,name:n,content:[{type:"text",text:this.formatMissingToolResultText(n)}],is_error:!0}))}formatMissingToolResultText(e){return e?`${mS} Tool: ${e}.`:mS}resetIndexes(){this.indexedMessageCount=0,this.indexedTailRef=void 0,this.toolNameByIdCache.clear(),this.readLocatorsByToolUseIdCache.clear(),this.latestReadToolUseByLocatorCache.clear(),this.latestFullContentOwnerByPathCache.clear(),this.readResultLocatorCache=new WeakMap}getReadLocators(e){let t=e,n=this.readResultLocatorCache.get(t);if(n===void 0)n=this.extractReadLocatorsFromToolResultContent(e.content),this.readResultLocatorCache.set(t,n);if(n.length>0)return n;return this.readLocatorsByToolUseIdCache.get(e.tool_use_id)??[]}extractLocatorsFromReadToolInput(e){if(!e||typeof e!=="object")return[];let t=e,n=[],r=this.extractLocatorFromReadRequest(t);if(r)n.push(r);if(Array.isArray(t.files))for(let o of t.files){let s=this.extractLocatorFromReadRequest(o);if(s)n.push(s)}if(Array.isArray(t.file_paths)){for(let o of t.file_paths)if(typeof o==="string"&&o.length>0)n.push({path:o,startLine:null,endLine:null})}return this.dedupeReadLocators(n)}extractReadLocatorsFromToolResultContent(e){if(typeof e==="string")return this.tryParseReadLocators(e);let t=[];for(let n of e){if(n.type==="text"){t.push(...this.tryParseReadLocators(n.text));continue}if(mn(n)){let r=this.extractLocatorFromResultEntry(n);if(r)t.push(r)}}return this.dedupeReadLocators(t)}tryParseReadLocators(e){try{return this.extractLocatorsFromParsedReadResult(JSON.parse(e))}catch{return[]}}extractLocatorsFromParsedReadResult(e){if(Array.isArray(e)){let n=[];for(let r of e){let o=this.extractLocatorFromResultEntry(r);if(o)n.push(o)}return this.dedupeReadLocators(n)}let t=this.extractLocatorFromResultEntry(e);return t?[t]:[]}extractLocatorFromReadRequest(e){if(!e||typeof e!=="object")return;let t=e,n=this.extractPath(t);if(!n)return;return{path:n,startLine:this.extractLineNumber(t.start_line),endLine:this.extractLineNumber(t.end_line)}}extractLocatorFromResultEntry(e){if(!e||typeof e!=="object")return;let t=e,n=this.extractPath(t);if(n)return{path:n,startLine:this.extractLineNumber(t.start_line),endLine:this.extractLineNumber(t.end_line)};if(typeof t.query==="string"&&t.query.length>0)return this.parseReadQuery(t.query);return}extractPath(e){let t=[e.path,e.file_path,e.filePath];for(let n of t)if(typeof n==="string"&&n.length>0)return n;return}extractLineNumber(e){return typeof e==="number"&&Number.isInteger(e)?e:null}parseReadQuery(e){let t=/^(.*):(\d+)-(EOF|\d+)$/.exec(e);if(!t)return{path:e,startLine:null,endLine:null};return{path:t[1],startLine:Number(t[2]),endLine:t[3]==="EOF"?null:Number(t[3])}}dedupeReadLocators(e){let t=new Map;for(let n of e)t.set(this.toReadLocatorKey(n),n);return Array.from(t.values())}toReadLocatorKey(e){if(this.isFullFileRead(e))return e.path;return`${e.path}:${e.startLine??1}-${e.endLine??"EOF"}`}isFullFileRead(e){return e.startLine==null&&e.endLine==null}isOutdatedReadLocator(e,t){let n=this.latestFullContentOwnerByPathCache.get(e.path);if(n&&n!==t)return!0;return this.latestReadToolUseByLocatorCache.get(this.toReadLocatorKey(e))!==t}replaceOutdatedReadContent(e,t){let n=new Set(t.map((s)=>this.toReadLocatorKey(s))),r=new Set(t.map((s)=>s.path));if(typeof e==="string")return this.replaceOutdatedInString(e,n)??Hn;let o=0;for(let s of e)if(s.type==="text")o+=this.countOutdatedImageEntries(s.text,n);return e.map((s)=>{if(s.type==="file"){if(!r.has(s.path))return s;return{...s,content:Hn}}if(s.type==="image"){if(o===0)return s;return o-=1,{type:"text",text:Hn}}if(mn(s))return this.replaceOutdatedReadEntry(s,n);if(s.type!=="text")return s;let i=this.replaceOutdatedInString(s.text,n);if(i===null)return{...s,text:Hn};return i===s.text?s:{...s,text:i}})}countOutdatedImageEntries(e,t){let n;try{n=JSON.parse(e)}catch{return 0}let r=Array.isArray(n)?n:[n],o=0;for(let s of r){if(!s||typeof s!=="object")continue;let i=s,a=this.extractLocatorFromResultEntry(i);if(!a)continue;if(!t.has(this.toReadLocatorKey(a)))continue;if(i.result==="Successfully read image"||i.content==="Successfully read image")o+=1}return o}replaceOutdatedInString(e,t){let n;try{n=JSON.parse(e)}catch{return null}let r=Array.isArray(n)?n.map((o)=>this.replaceOutdatedReadEntry(o,t)):this.replaceOutdatedReadEntry(n,t);return JSON.stringify(r)}replaceOutdatedReadEntry(e,t){if(!e||typeof e!=="object")return e;let n=this.extractLocatorFromResultEntry(e);if(!n||!t.has(this.toReadLocatorKey(n)))return e;let r={...e};if(typeof r.result==="string")r.result=Hn;else if(typeof r.content==="string")r.content=Hn;else r.result=Hn;return r}isReadTool(e){return!!e&&tO.has(e)}resolveToolName(e){let t=this.toolNameByIdCache.get(e.tool_use_id);if(t!==void 0)return t;return typeof e.name==="string"&&e.name.length>0?e.name.toLowerCase():void 0}truncateToolResultContent(e){if(typeof e==="string")return this.truncateMiddle(e);return e.map((t)=>{if(this.recoveryNotices.has(t))return t;if(t.type==="file"){let n=this.truncateMiddle(t.content);return n===t.content?t:{...t,content:n}}if(t.type==="text"){let n=this.truncateMiddle(t.text);return n===t.text?t:{...t,text:n}}if(mn(t))return this.truncateNestedStrings(t);return t})}truncateNestedStrings(e){if(typeof e==="string")return this.truncateMiddle(e);if(Array.isArray(e)){let t=!1,n=e.map((r)=>{let o=this.truncateNestedStrings(r);if(o!==r)t=!0;return o});return t?n:e}if(e!==null&&typeof e==="object"){if(uu(e))return e;let t=!1,n={};for(let[r,o]of Object.entries(e)){let s=this.truncateNestedStrings(o);if(s!==o)t=!0;n[r]=s}return t?n:e}return e}truncateMiddle(e){return Fo(e,this.maxToolResultChars,gS)}truncateAssistantText(e){if(this.hasRepeatedToolCallMarkup(e))return Fo(e,this.maxAssistantToolMarkupChars,rO);return Fo(e,this.maxAssistantTextChars,nO)}hasRepeatedToolCallMarkup(e){if(e.length<=this.maxAssistantToolMarkupChars)return!1;let t=0;for(let n of e.matchAll(oO))if(t+=1,t>=eO)return!0;return!1}truncateToTotalTextBudget(e){let t=this.countMessageTextBytes(e);if(t<=this.maxTotalTextBytes)return e;let n=e.map((s)=>{if(!Array.isArray(s.content))return{...s};return{...s,content:s.content.map((i)=>{let a=dO(i);if(i.type==="tool_result"&&a.type==="tool_result"&&Array.isArray(i.content)&&Array.isArray(a.content))i.content.forEach((d,c)=>{if(this.recoveryNotices.has(d))this.recoveryNotices.add(a.content[c])});return a})}}),r=this.collectTruncationCandidates(n),o=Math.floor(this.maxTotalTextBytes/(2*Math.max(1,r.length)));for(let s of r){if(t<=this.maxTotalTextBytes)break;let i=s.byteLength,a=Math.min(s.minBytes,o);if(i<=a)continue;let d=t-this.maxTotalTextBytes,c=Math.max(a,i-d),l=aO(s.get(),c,s.makeMarker);s.set(l),t-=i-me(l)}return n}countMessageTextBytes(e){let t=0;for(let n of e){if(typeof n.content==="string"){t+=me(n.content);continue}for(let r of n.content)if(r.type==="text")t+=me(r.text);else if(r.type==="thinking")t+=me(r.thinking);else if(r.type==="file")t+=me(r.content);else if(r.type==="tool_use")t+=ba(r.input);else if(r.type==="tool_result"){if(typeof r.content==="string")t+=me(r.content);else for(let o of r.content)if(o.type==="text")t+=me(o.text);else if(o.type==="file")t+=me(o.content);else if(mn(o))t+=ba(o)}}return t}collectTruncationCandidates(e){let t=[],n=[];for(let r of e){if(r.role==="assistant"&&typeof r.content==="string"){t.push({byteLength:me(r.content),minBytes:pS,makeMarker:fS,get:()=>r.content,set:(o)=>{r.content=o}});continue}if(!Array.isArray(r.content))continue;for(let o of r.content){if(o.type==="tool_use"){va(o.input,n);continue}if(r.role==="assistant"&&o.type==="text"){t.push({byteLength:me(o.text),minBytes:pS,makeMarker:fS,get:()=>o.text,set:(s)=>{o.text=s}});continue}if(o.type!=="tool_result")continue;if(typeof o.content==="string"){t.push({byteLength:me(o.content),minBytes:Ho,makeMarker:Bo,get:()=>o.content,set:(s)=>{o.content=s}});continue}for(let s of o.content){if(this.recoveryNotices.has(s))continue;if(s.type==="text")t.push({byteLength:me(s.text),minBytes:Ho,makeMarker:Bo,get:()=>s.text,set:(i)=>{s.text=i}});else if(s.type==="file")t.push({byteLength:me(s.content),minBytes:Ho,makeMarker:Bo,get:()=>s.content,set:(i)=>{s.content=i}});else if(mn(s))va(s,t)}}}return t.sort((r,o)=>o.byteLength-r.byteLength),n.sort((r,o)=>o.byteLength-r.byteLength),[...t,...n]}applyMediaBudget(e){let t=this.resolveMediaBudget();if(t.maxImageEncodedBytes===Number.POSITIVE_INFINITY&&t.maxImageDecodedBytes===Number.POSITIVE_INFINITY&&t.maxTotalMediaBytes===Number.POSITIVE_INFINITY)return e;let n=KM(),r=!1,o=e.map((s)=>{if(!Array.isArray(s.content))return s;let i=!1,a=s.content.map((d)=>{let c=this.applyMediaBudgetToBlock(d,t,n);if(c!==d)i=!0;return c});if(!i)return s;return r=!0,{...s,content:a}});return r?o:e}resolveMediaBudget(){return GM(this.mediaBudget)}applyMediaBudgetToBlock(e,t,n){if(au(e))return this.limitImageContent(e,t,n);if(e.type!=="tool_result"||typeof e.content==="string")return e;let r=!1,o=e.content.map((s)=>{let i=this.applyMediaBudgetToToolResultEntry(s,t,n);if(i!==s)r=!0;return i});return r?{...e,content:o}:e}applyMediaBudgetToToolResultEntry(e,t,n){if(au(e))return this.limitImageContent(e,t,n);if(mn(e))return this.limitNestedMedia(e,t,n);return e}limitNestedMedia(e,t,n){if(au(e)){let r=this.limitImageContent(e,t,n);return r.type==="text"?r.text:r}if(Array.isArray(e)){let r=!1,o=e.map((s)=>{let i=this.limitNestedMedia(s,t,n);if(i!==s)r=!0;return i});return r?o:e}if(e!==null&&typeof e==="object"){let r=!1,o={};for(let[s,i]of Object.entries(e)){let a=this.limitNestedMedia(i,t,n);if(a!==i)r=!0;o[s]=a}return r?o:e}return e}limitImageContent(e,t,n){if(!bS(e))return{type:"text",text:uS};let r=VM(e.mediaType,e.data,{maxImageEncodedBytes:t.maxImageEncodedBytes,maxImageDecodedBytes:t.maxImageDecodedBytes,maxTotalMediaBytes:t.maxTotalMediaBytes},n);if(!r.ok)return{type:"text",text:uS};return{...e,data:r.base64,mediaType:r.mediaType}}}var hS=String.raw`[\|\uFF5C]`,oO=new RegExp(String.raw`<\s*(?:${hS}\s*)?DSML\s*(?:${hS}\s*)?(?:tool_calls|invoke)\b[^>]*>|<\s*/?\s*(?:tool_calls?|tool_call|function_calls?|function_call|invoke)\b[^>]*>`,"gi");function me(e){return Buffer.byteLength(e,"utf8")}function yS(e){if(e===void 0)return;let t=Number.parseInt(e,10);return Number.isFinite(t)&&t>0?t:void 0}function sO(e){if(e===void 0)return;let t=e.trim().toLowerCase();if(t==="infinity"||t==="disable")return Number.POSITIVE_INFINITY;let n=Number.parseInt(e,10);return Number.isFinite(n)&&n>=0?n:void 0}function Uo(e,t){return typeof e==="number"&&Number.isFinite(e)&&e>0?Math.floor(e):t}function iO(e,t){if(typeof e!=="number"||Number.isNaN(e)||e<0)return t;return Number.isFinite(e)?Math.floor(e):e}function Fo(e,t,n){if(e.length<=t)return e;let r=n(e.length-t),o=Math.max(0,Math.floor((t-r.length)/2)),s=Math.max(0,e.length-o*2),i=n(s),a=Math.max(0,Math.floor((t-i.length)/2)),d=e.slice(0,a),c=a>0?e.slice(-a):"";return`${d}${i}${c}`}function aO(e,t,n){if(me(e)<=t)return e;let r=0,o=e.length,s="";while(r<=o){let i=r+o>>>1,a=Fo(e,i,n);if(me(a)<=t)s=a,r=i+1;else o=i-1}return s}function dO(e){if(e.type==="tool_use")return{...e,input:Ta(e.input)};if(e.type!=="tool_result"||typeof e.content==="string")return{...e};return{...e,content:e.content.map((t)=>mn(t)?Ta(t):{...t})}}function mn(e){if(e===null||typeof e!=="object")return!1;let t=e.type;return t!=="text"&&t!=="image"&&t!=="file"}function au(e){return e!==null&&typeof e==="object"&&e.type==="image"}function bS(e){return e!==null&&typeof e==="object"&&e.type==="image"&&typeof e.data==="string"&&typeof e.mediaType==="string"}function uu(e){return bS(e)}function ba(e){if(typeof e==="string")return me(e);if(Array.isArray(e)){let t=0;for(let n of e)t+=ba(n);return t}if(e!==null&&typeof e==="object"){if(uu(e))return 0;let t=0;for(let n of Object.values(e))t+=ba(n);return t}return 0}function va(e,t){if(Array.isArray(e)){e.forEach((n,r)=>{if(typeof n==="string")t.push({byteLength:me(n),minBytes:Ho,makeMarker:Bo,get:()=>e[r],set:(o)=>{e[r]=o}});else va(n,t)});return}if(e!==null&&typeof e==="object"){if(uu(e))return;let n=e;for(let r of Object.keys(n)){let o=n[r];if(typeof o==="string")t.push({byteLength:me(o),minBytes:Ho,makeMarker:Bo,get:()=>n[r],set:(s)=>{n[r]=s}});else va(o,t)}}}function Ta(e){if(Array.isArray(e))return e.map(Ta);if(e!==null&&typeof e==="object"){let t={};for(let[n,r]of Object.entries(e))t[n]=Ta(r);return t}return e}function lu(){return`conv_${Date.now()}_${Math.random().toString(36).slice(2,9)}`}class pu{messages=[];conversationId=lu();sessionStarted=!1;constructor(e){if((e?.length??0)>0)this.restore(e??[])}getConversationId(){return this.conversationId}getMessages(){return[...this.messages]}appendMessage(e){this.messages.push(e)}appendMessages(e){if(e.length===0)return;this.messages.push(...e)}replaceMessages(e){let t=new Map(e.map((o,s)=>[o.id,s])),n=new Map,r=-1;for(let o of this.messages){let s=o.id?t.get(o.id):void 0;if(s!==void 0)r=s;else if(o.metadata?.displayOnly===!0){let i=n.get(r)??[];i.push(o),n.set(r,i)}}this.messages=[...n.get(-1)??[]];for(let[o,s]of e.entries())this.messages.push(s,...n.get(o)??[])}resetForRun(){this.messages=[],this.conversationId=lu(),this.sessionStarted=!1}clearHistory(){this.messages=[],this.conversationId=lu(),this.sessionStarted=!1}restore(e){this.messages=[...e],this.sessionStarted=!1}isSessionStarted(){return this.sessionStarted}markSessionStarted(){this.sessionStarted=!0}}var Dr="0.0.91-nightly.1791426960";var Ur={name:"@cline/core",description:"Cline Core SDK for Node Runtime",version:Dr,repository:{type:"git",url:"https://github.com/cline/cline",directory:"sdk/packages/core"},type:"module",types:"./dist/index.d.ts",main:"./dist/index.js",private:!1,publishConfig:{access:"public"},exports:{".":{types:"./dist/index.d.ts",import:"./dist/index.js"},"./hub":{types:"./dist/hub/index.d.ts",import:"./dist/hub/index.js"},"./hub/daemon-entry":{types:"./dist/hub/daemon/entry.d.ts",import:"./dist/hub/daemon/entry.js"},"./telemetry":{types:"./dist/services/telemetry/index.d.ts",import:"./dist/services/telemetry/index.js"},"./services/feature-flags/posthog":{types:"./dist/services/feature-flags/posthog.d.ts",import:"./dist/services/feature-flags/posthog.js"},"./remote/helper-entry":{types:"./dist/remote/remote-helper-entry.d.ts",import:"./dist/remote/remote-helper-entry.js"},"./cloud":{types:"./dist/cloud/index.d.ts",import:"./dist/cloud/index.js"},"./remote/helper":{types:"./dist/remote/remote-helper.d.ts",import:"./dist/remote/remote-helper.js"}},scripts:{build:"bun run ./bun.mts && bun tsc -p tsconfig.build.json && bun run ./scripts/verify-runtime-build-id.ts",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:compaction":"bun --conditions=development run scripts/compact-session.ts","test:unit":"vitest run --config vitest.config.ts","test:e2e":"vitest run --config vitest.e2e.config.ts","verify:routines":"zsh -lc 'bunx vitest run src/cron/schedule-service.test.ts --config vitest.config.ts'","test:watch":"vitest --config vitest.config.ts"},dependencies:{"@cline/agents":"workspace:*","@cline/shared":"workspace:*","@cline/llms":"workspace:*","@modelcontextprotocol/sdk":"^1.29.0","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.214.0","@opentelemetry/exporter-logs-otlp-http":"^0.214.0","@opentelemetry/exporter-metrics-otlp-http":"^0.214.0","@opentelemetry/exporter-trace-otlp-http":"^0.214.0","@opentelemetry/resources":"^2.6.1","@opentelemetry/sdk-logs":"^0.214.0","@opentelemetry/sdk-metrics":"^2.6.1","@opentelemetry/sdk-trace-base":"^2.6.1","@opentelemetry/sdk-trace-node":"^2.6.1","@opentelemetry/semantic-conventions":"^1.40.0",jiti:"^2.7.0","node-machine-id":"^1.1.12",nanoid:"^5.1.7","simple-git":"3.36.0",ws:"^8.20.0",yaml:"^2.8.2",zod:"^4.3.6"},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"]};function TS(e){let{agentConfig:t}=e,n=cO(t),r=uO(t),o=e.hooks,s=lO(t.maxParallelToolCalls);return{distinctId:t.distinctId,clientName:t.extensionContext?.client?.name,clientVersion:t.extensionContext?.client?.version,clineCoreVersion:Dr,sessionId:e.sessionId??t.sessionId,agentId:e.agentId,conversationId:e.conversationId,parentAgentId:e.parentAgentId,agentRole:e.agentRole,systemPrompt:e.systemPrompt??t.systemPrompt,messageModelInfo:r,model:e.model,modelOptions:n,modelTools:t.modelTools,tools:e.tools,hooks:o,prepareTurn:e.prepareTurn,consumePendingUserMessage:t.consumePendingUserMessage,plugins:e.plugins,logger:e.logger??t.logger,telemetry:e.telemetry??t.telemetry,initialMessages:e.initialMessages,completionPolicy:e.completionPolicy===null?void 0:e.completionPolicy??t.completionPolicy,maxIterations:t.maxIterations,toolExecution:s,toolPolicies:t.toolPolicies,toolContextMetadata:e.toolContextMetadata,requestToolApproval:t.requestToolApproval}}function cO(e){let t={};if(e.thinking!==void 0)t.thinking=e.thinking;if(e.reasoningEffort!==void 0)t.reasoningEffort=e.reasoningEffort;if(e.thinkingBudgetTokens!==void 0)t.thinkingBudgetTokens=e.thinkingBudgetTokens;if(e.maxTokensPerTurn!==void 0)t.maxTokensPerTurn=e.maxTokensPerTurn;if(e.temperature!==void 0)t.temperature=e.temperature;if(e.apiTimeoutMs!==void 0)t.apiTimeoutMs=e.apiTimeoutMs;return Object.keys(t).length>0?t:void 0}function uO(e){let t=e.providerConfig?.family;return{id:e.modelId,provider:e.providerId,family:t}}function lO(e){if(e===void 0)return;return e>=2?"parallel":"sequential"}function Fr(e){let t={...e},n=Object.hasOwn(e,"thinking"),r=Object.hasOwn(e,"thinkingBudgetTokens");if(e.thinking===!1||e.thinking===null)return t.reasoningEffort=void 0,t.thinkingBudgetTokens=void 0,t;if(!n&&r&&typeof e.thinkingBudgetTokens==="number"&&Number.isFinite(e.thinkingBudgetTokens)&&e.thinkingBudgetTokens>0)t.thinking=!0;return t}function pO(){return{lastToolName:"",lastToolSignature:"",consecutiveIdenticalCount:0}}function mO(e){e.lastToolName="",e.lastToolSignature="",e.consecutiveIdenticalCount=0}function mu(e){if(e==null||typeof e!=="object")return e;if(Array.isArray(e))return e.map(mu);let t={};for(let n of Object.keys(e).sort())t[n]=mu(e[n]);return t}function gO(e){if(e==null)return"null";if(typeof e==="string")return e;if(typeof e!=="object")return String(e);try{return JSON.stringify(mu(e))}catch{return String(e)}}function fO(e,t,n,r){if(t===e.lastToolName&&n===e.lastToolSignature)e.consecutiveIdenticalCount++;else e.consecutiveIdenticalCount=1;return e.lastToolName=t,e.lastToolSignature=n,{softWarning:e.consecutiveIdenticalCount===r.softThreshold,hardEscalation:e.consecutiveIdenticalCount>=r.hardThreshold}}var wS={softThreshold:3,hardThreshold:5};class gu{config;state=pO();constructor(e){this.config={softThreshold:e?.softThreshold??wS.softThreshold,hardThreshold:e?.hardThreshold??wS.hardThreshold}}inspect(e){let t=gO(e.input),n=fO(this.state,e.name,t,this.config);if(n.hardEscalation)return{kind:"hard",message:`Detected ${this.state.consecutiveIdenticalCount} consecutive identical calls to \`${e.name}\`; stopping to avoid a loop.`};if(n.softWarning)return{kind:"soft",message:`Detected ${this.state.consecutiveIdenticalCount} consecutive identical calls to \`${e.name}\`; consider trying a different approach.`};return{kind:"ok"}}reset(){mO(this.state)}}class fu{consecutiveMistakes=0;options;constructor(e){this.options=e}async record(e){let t=this.options.maxConsecutiveMistakes,n=e.forceAtLimit&&t?t:this.consecutiveMistakes+1;this.consecutiveMistakes=n;let r=e.details?.trim()||`consecutive mistake (${e.reason})`;if(this.options.emit({type:"error",error:Error(r),recoverable:!0,iteration:e.iteration}),this.options.log("warn","Recorded consecutive mistake",{agentId:this.options.agentId,conversationId:this.options.getConversationId(),runId:this.options.getActiveRunId(),iteration:e.iteration,reason:e.reason,details:e.details,consecutiveMistakes:n,maxConsecutiveMistakes:this.options.maxConsecutiveMistakes}),!t||n<t)return{action:"continue"};let o={iteration:e.iteration,consecutiveMistakes:n,maxConsecutiveMistakes:t,reason:e.reason,details:e.details};this.options.onLimitTelemetry?.(o);let s=await yO(o,this.options.onLimitReached);if(s.action==="continue"){let i=s.guidance?.trim();if(i)this.options.appendRecoveryNotice(i,e.reason);return this.consecutiveMistakes=0,{action:"continue",guidance:i}}return{action:"stop",reason:s.reason?.trim()||void 0,message:hO({iteration:e.iteration,consecutiveMistakes:n,maxConsecutiveMistakes:t,reason:e.reason,details:e.details,stopReason:s.reason})}}reset(){this.consecutiveMistakes=0}get value(){return this.consecutiveMistakes}}function hO(e){let t=[`Stopped after ${e.consecutiveMistakes}/${e.maxConsecutiveMistakes} consecutive mistakes (${e.reason}) at iteration ${e.iteration}.`],n=e.details?.trim();if(n)t.push(`Error: ${n}`);let r=e.stopReason?.trim();if(r)t.push(`Decision: ${r}`);return t.push("Session state was preserved. Send a new prompt to resume from the latest state."),t.join(" ")}async function yO(e,t){if(!t)return{action:"stop",reason:`maximum consecutive mistakes reached (${e.maxConsecutiveMistakes})`};try{return await t(e)}catch(n){return{action:"stop",reason:n instanceof Error?n.message:`maximum consecutive mistakes reached (${e.maxConsecutiveMistakes})`}}}function SO(e){switch(e){case"auto_compaction":case"manual_compaction":case"compaction_budget_emergency":return e;default:return}}function bO(e){let t=e.content.filter((n)=>n.type==="text");if(t.length===0)return;return t.map((n)=>n.text).join("")}function vO(e){let t=e.content.filter((n)=>n.type==="reasoning");if(t.length===0)return;return{reasoning:t.map((n)=>n.text).join(""),redacted:t.some((n)=>n.redacted===!0)}}function TO(e){return e.content.find((t)=>t.type==="tool-result")}function wO(e){switch(e){case"completed":return"completed";case"aborted":return"aborted";case"failed":return"error"}}function kO(e){if(!e||e.isError!==!0)return;if(typeof e.output==="string")return e.output;if(e.output instanceof Error)return e.output.message;try{return JSON.stringify(e.output)}catch{return String(e.output)}}class hu{lastUsage={inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0,reasoningTokenCount:0};toolStartedAt=new Map;translate(e){switch(e.type){case"run-started":return[];case"message-added":return[];case"turn-started":return[{type:"iteration_start",iteration:e.iteration}];case"turn-finished":return[{type:"iteration_end",iteration:e.iteration,hadToolCalls:e.toolCallCount>0,toolCallCount:e.toolCallCount}];case"assistant-text-delta":return[{type:"content_start",contentType:"text",text:e.text,accumulated:e.accumulatedText}];case"assistant-reasoning-delta":return[{type:"content_start",contentType:"reasoning",reasoning:e.text,redacted:e.redacted===!0}];case"assistant-media":return[{type:"content_end",contentType:"media",media:e.media}];case"assistant-message":return this.translateAssistantMessage(e.message);case"tool-started":return this.translateToolStarted(e);case"tool-updated":return[{type:"content_update",contentType:"tool",toolName:e.toolCall.toolName,toolCallId:e.toolCall.toolCallId,update:e.update}];case"tool-finished":return this.translateToolFinished(e);case"usage-updated":return this.translateUsage(e.usage);case"status-notice":return[{type:"notice",noticeType:"status",displayRole:"status",message:e.message,reason:SO(e.metadata?.reason),metadata:e.metadata}];case"run-finished":return this.translateRunFinished(e.result);case"run-failed":return[{type:"error",error:e.error,errorClass:e.errorClass,recoverable:!1,iteration:e.snapshot.iteration}];default:return e}}reset(){this.lastUsage={inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0,reasoningTokenCount:0},this.toolStartedAt.clear()}translateAssistantMessage(e){let t=[],n=bO(e);if(n!==void 0)t.push({type:"content_end",contentType:"text",text:n});let r=vO(e);if(r!==void 0)t.push({type:"content_end",contentType:"reasoning",reasoning:r.reasoning});return t}translateToolStarted(e){return this.toolStartedAt.set(e.toolCall.toolCallId,Date.now()),[{type:"content_start",contentType:"tool",toolName:e.toolCall.toolName,toolCallId:e.toolCall.toolCallId,input:e.toolCall.input,execution:e.toolCall.execution}]}translateToolFinished(e){let t=this.toolStartedAt.get(e.toolCall.toolCallId),n=t===void 0?void 0:Date.now()-t;this.toolStartedAt.delete(e.toolCall.toolCallId);let r=TO(e.message),o=r?.output,s=kO(r);return[{type:"content_end",contentType:"tool",toolName:e.toolCall.toolName,toolCallId:e.toolCall.toolCallId,output:o,error:s,durationMs:n,execution:e.toolCall.execution}]}translateUsage(e){let t=e.inputTokens-this.lastUsage.inputTokens,n=e.outputTokens-this.lastUsage.outputTokens,r=e.cacheReadTokens-this.lastUsage.cacheReadTokens,o=e.cacheWriteTokens-this.lastUsage.cacheWriteTokens,s=this.lastUsage.totalCost??0,a=(e.totalCost??0)-s,d=this.lastUsage.reasoningTokenCount??0,l=(e.reasoningTokenCount??0)-d;return this.lastUsage={inputTokens:e.inputTokens,outputTokens:e.outputTokens,cacheReadTokens:e.cacheReadTokens,cacheWriteTokens:e.cacheWriteTokens,totalCost:e.totalCost,reasoningTokenCount:e.reasoningTokenCount},[{type:"usage",inputTokens:Math.max(0,t),outputTokens:Math.max(0,n),cacheReadTokens:r===0?void 0:Math.max(0,r),cacheWriteTokens:o===0?void 0:Math.max(0,o),cost:a===0?void 0:a,reasoningTokenCount:l===0?void 0:Math.max(0,l),totalInputTokens:e.inputTokens,totalOutputTokens:e.outputTokens,totalCacheReadTokens:e.cacheReadTokens===0?void 0:e.cacheReadTokens,totalCacheWriteTokens:e.cacheWriteTokens===0?void 0:e.cacheWriteTokens,totalCost:e.totalCost}]}translateRunFinished(e){let t={inputTokens:e.usage.inputTokens,outputTokens:e.usage.outputTokens,cacheReadTokens:e.usage.cacheReadTokens===0?void 0:e.usage.cacheReadTokens,cacheWriteTokens:e.usage.cacheWriteTokens===0?void 0:e.usage.cacheWriteTokens,totalCost:e.usage.totalCost};return[{type:"done",reason:wO(e.status),text:e.outputText,iterations:e.iterations,usage:t}]}}var LO="session_run_in_progress";class RS extends Error{agentId;code=LO;constructor(e){super(`SessionRuntime.shutdown called while a run is in progress${e?` (agentId=${e})`:""}`);this.agentId=e;this.name="SessionRunInProgressError"}}function NO(e){if(typeof e==="string")return e;if(e instanceof Error)return e.message;try{return JSON.stringify(e)}catch{return String(e)}}async function DO(e){let n=(typeof e.content==="function"?await e.content():e.content).trim();return n.length>0?n:void 0}function UO(e,t){let n=e.trim(),r=t.map((o)=>o.trim()).filter(Boolean).join(`
|
|
256
|
+
`;function SS(e=process.env){return{maxToolResultChars:yS(e[iu.maxToolResultChars]),maxTotalTextBytes:yS(e[iu.maxTotalTextBytes]),minOutdatedRewriteBytes:sO(e[iu.minOutdatedRewriteBytes])}}class cu{recoveryNotices=new WeakSet;getToolResultRecovery;recoveryNoticeBytes=0;indexedMessageCount=0;indexedTailRef;toolNameByIdCache=new Map;readLocatorsByToolUseIdCache=new Map;latestReadToolUseByLocatorCache=new Map;latestFullContentOwnerByPathCache=new Map;readResultLocatorCache=new WeakMap;maxToolResultChars;maxFileContentChars;maxTotalTextBytes;mediaBudget;maxAssistantTextChars;maxAssistantToolMarkupChars;minOutdatedRewriteBytes;committedOutdatedRewrites=new Map;constructor(e={}){this.getToolResultRecovery=e.getToolResultRecovery,this.maxToolResultChars=Uo(e.maxToolResultChars,du),this.maxFileContentChars=Uo(e.maxFileContentChars,XM),this.maxTotalTextBytes=Uo(e.maxTotalTextBytes,JM),this.mediaBudget=e.mediaBudget??{},this.maxAssistantTextChars=Uo(e.maxAssistantTextChars,YM),this.maxAssistantToolMarkupChars=Uo(e.maxAssistantToolMarkupChars,QM),this.minOutdatedRewriteBytes=iO(e.minOutdatedRewriteBytes,ZM)}resetConversationState(){this.resetIndexes(),this.committedOutdatedRewrites.clear()}buildForApi(e){this.recoveryNoticeBytes=0,this.reindex(e),this.commitOutdatedRewrites(e);let n=this.addMissingToolResults(e).map((o)=>{if(!Array.isArray(o.content)){if(o.role==="user"&&typeof o.content==="string"){let a=lS(o.content);if(a!==o.content)return{...o,content:a}}if(o.role==="assistant"&&typeof o.content==="string"){let a=this.truncateAssistantText(o.content);if(a!==o.content)return{...o,content:a}}return o}let s=!1,i=o.content.map((a)=>{let d=this.transformBlock(a,o.role);if(d!==a)s=!0;return d});return s?{...o,content:i}:o}),r=this.applyMediaBudget(n);return this.truncateToTotalTextBudget(r)}transformBlock(e,t){if(t==="user"&&e.type==="text"&&typeof e.text==="string"){let s=lS(e.text);if(s!==e.text)return{...e,text:s};return e}if(t==="assistant"&&e.type==="text"&&typeof e.text==="string"){let s=this.truncateAssistantText(e.text);return s===e.text?e:{...e,text:s}}if(e.type==="file"){let s=Fo(e.content,this.maxFileContentChars,gS);return s===e.content?e:{...e,content:s}}if(e.type!=="tool_result")return e;let n=this.resolveToolName(e),r=this.getToolResultRecovery?.({...e,name:n??e.name});if(r){let{text:s,images:i}=aa(e.content);if(typeof s==="string"&&s.length>this.maxToolResultChars){let a=[{type:"text",text:this.truncateMiddle(s)},...i];if(r.uri){let d={type:"text",text:`Full result is temporarily saved to ${r.uri}. Only read_files can access this cache URI. Use read_files with specific line ranges if omitted content is needed.`},c=me(d.text);if(this.recoveryNoticeBytes+c<=this.maxTotalTextBytes/2)this.recoveryNoticeBytes+=c,this.recoveryNotices.add(d),a.push(d)}return{...e,content:a}}}let o=e.content;if(this.isReadTool(n)&&e.is_error!==!0){let s=this.committedOutdatedRewrites.get(e.tool_use_id);if(s&&s.size>0){let a=this.getReadLocators(e).filter((d)=>s.has(this.toReadLocatorKey(d))&&this.isOutdatedReadLocator(d,e.tool_use_id));if(a.length>0)o=this.replaceOutdatedReadContent(o,a)}}return o=this.truncateToolResultContent(o),o===e.content?e:{...e,content:o}}reindex(e){let t=this.indexedMessageCount===0||e.length>=this.indexedMessageCount&&e[this.indexedMessageCount-1]===this.indexedTailRef;if(e.length<this.indexedMessageCount||!t)this.resetIndexes();for(let n=this.indexedMessageCount;n<e.length;n++){let r=e[n];if(!Array.isArray(r.content))continue;for(let o=0;o<r.content.length;o++){let s=r.content[o];if(s.type==="file")this.latestFullContentOwnerByPathCache.set(s.path,`file:${n}:${o}`);else if(s.type==="tool_use"){let i=s.name.toLowerCase();if(this.toolNameByIdCache.set(s.id,i),this.isReadTool(i)){let a=this.extractLocatorsFromReadToolInput(s.input);if(a.length>0)this.readLocatorsByToolUseIdCache.set(s.id,a)}}else if(s.type==="tool_result"){let i=this.resolveToolName(s);if(!this.isReadTool(i)||s.is_error===!0)continue;let a=this.getReadLocators(s);for(let d of a)if(this.latestReadToolUseByLocatorCache.set(this.toReadLocatorKey(d),s.tool_use_id),this.isFullFileRead(d))this.latestFullContentOwnerByPathCache.set(d.path,s.tool_use_id)}}}this.indexedMessageCount=e.length,this.indexedTailRef=e.length>0?e[e.length-1]:void 0}commitOutdatedRewrites(e){let t=new Map,n=new Set,r=0;for(let o of e){if(!Array.isArray(o.content))continue;for(let s of o.content){if(s.type!=="tool_result"||s.is_error===!0)continue;let i=this.resolveToolName(s);if(!this.isReadTool(i))continue;n.add(s.tool_use_id);let a=this.committedOutdatedRewrites.get(s.tool_use_id),d=new Set,c=new Set;for(let u of this.getReadLocators(s)){let p=this.toReadLocatorKey(u);if(!this.isOutdatedReadLocator(u,s.tool_use_id))continue;if(c.add(p),!a?.has(p))d.add(p)}if(a){for(let u of a)if(!c.has(u))a.delete(u);if(a.size===0)this.committedOutdatedRewrites.delete(s.tool_use_id)}if(d.size===0)continue;let l=t.get(s.tool_use_id);if(!l)l=new Set,t.set(s.tool_use_id,l);for(let u of d)l.add(u);r+=this.estimateOutdatedReclaimBytes(s.content,d)}}for(let o of this.committedOutdatedRewrites.keys())if(!n.has(o))this.committedOutdatedRewrites.delete(o);if(t.size===0||r<this.minOutdatedRewriteBytes)return;for(let[o,s]of t){let i=this.committedOutdatedRewrites.get(o);if(!i)i=new Set,this.committedOutdatedRewrites.set(o,i);for(let a of s)i.add(a)}}estimateOutdatedReclaimBytes(e,t){let n=this.extractReadLocatorsFromToolResultContent(e),r=n.length>0&&n.every((d)=>t.has(this.toReadLocatorKey(d))),o=(d)=>{let c;try{c=JSON.parse(d)}catch{return r||n.length===0?me(this.truncateMiddle(d)):0}let l=Array.isArray(c)?c:[c],u=0;for(let p of l){let m=this.extractLocatorFromResultEntry(p);if(m&&t.has(this.toReadLocatorKey(m)))u+=this.providerBoundEntryBytes(p)}return u};if(typeof e==="string")return o(e);let s=new Set(t),i=0;for(let d of e)if(d.type==="text")i+=this.countOutdatedImageEntries(d.text,s);let a=0;for(let d of e)if(d.type==="text")a+=o(d.text);else if(d.type==="image"){if(i>0)i-=1,a+=me(d.data)}else if(mn(d)){let c=this.extractLocatorFromResultEntry(d);if(c&&t.has(this.toReadLocatorKey(c)))a+=this.providerBoundEntryBytes(d)}else if(d.type==="file"){if(t.has(this.toReadLocatorKey({path:d.path,startLine:null,endLine:null})))a+=me(this.truncateMiddle(d.content))}return a}providerBoundEntryBytes(e){let t=this.truncateNestedStrings(e);return me(JSON.stringify(t))}addMissingToolResults(e){let t=this.collectToolResultIds(e),n=[],r=new Map,o=!1,s=()=>{if(r.size===0)return;i(this.createMissingToolResultMessage(r)),r.clear(),o=!0},i=(a)=>{let d=n.at(-1);if(this.shouldMergeUserAfterToolResults(d,a)){n[n.length-1]={...d,content:[...d.content,...this.contentBlocksForUserMerge(a.content)]},o=!0;return}n.push(a)};for(let a of e){if(this.isToolResultOnlyMessage(a)){if(i(this.appendMissingToolResults(a,r)),r.size>0)r.clear(),o=!0;continue}if(Array.isArray(a.content)){let d=a.content.filter((l)=>l.type==="tool_result"),c=a.content.filter((l)=>l.type!=="tool_result");if(d.length>0){let l=this.appendMissingToolResults({...a,role:"user",content:d},r);if(i(l),r.size>0)r.clear();o=!0}if(c.length>0||d.length===0){if(d.length===0)s();let l=d.length>0?{...a,content:c}:a;if(i(l),l.role==="assistant")this.trackMissingToolCalls(l,t,r)}continue}s(),i(a)}return s(),o?n:e}appendMissingToolResults(e,t){if(t.size===0||!Array.isArray(e.content))return e;return{...e,role:"user",content:[...e.content,...this.createMissingToolResultBlocks(t)]}}shouldMergeUserAfterToolResults(e,t){return e?.role==="user"&&t.role==="user"&&this.isToolResultOnlyMessage(e)&&this.contentBlocksForUserMerge(t.content).length>0}contentBlocksForUserMerge(e){return typeof e==="string"?e.length>0?[{type:"text",text:e}]:[]:e}collectToolResultIds(e){let t=new Set;for(let n of e){if(!Array.isArray(n.content))continue;for(let r of n.content)if(r.type==="tool_result")t.add(r.tool_use_id)}return t}isToolResultOnlyMessage(e){return e.role==="user"&&Array.isArray(e.content)&&e.content.length>0&&e.content.every((t)=>t.type==="tool_result")}trackMissingToolCalls(e,t,n){if(!Array.isArray(e.content))return;for(let r of e.content){if(r.type!=="tool_use"||t.has(r.id))continue;n.set(r.id,r.name)}}createMissingToolResultMessage(e){return{role:"user",content:this.createMissingToolResultBlocks(e)}}createMissingToolResultBlocks(e){return Array.from(e,([t,n])=>({type:"tool_result",tool_use_id:t,name:n,content:[{type:"text",text:this.formatMissingToolResultText(n)}],is_error:!0}))}formatMissingToolResultText(e){return e?`${mS} Tool: ${e}.`:mS}resetIndexes(){this.indexedMessageCount=0,this.indexedTailRef=void 0,this.toolNameByIdCache.clear(),this.readLocatorsByToolUseIdCache.clear(),this.latestReadToolUseByLocatorCache.clear(),this.latestFullContentOwnerByPathCache.clear(),this.readResultLocatorCache=new WeakMap}getReadLocators(e){let t=e,n=this.readResultLocatorCache.get(t);if(n===void 0)n=this.extractReadLocatorsFromToolResultContent(e.content),this.readResultLocatorCache.set(t,n);if(n.length>0)return n;return this.readLocatorsByToolUseIdCache.get(e.tool_use_id)??[]}extractLocatorsFromReadToolInput(e){if(!e||typeof e!=="object")return[];let t=e,n=[],r=this.extractLocatorFromReadRequest(t);if(r)n.push(r);if(Array.isArray(t.files))for(let o of t.files){let s=this.extractLocatorFromReadRequest(o);if(s)n.push(s)}if(Array.isArray(t.file_paths)){for(let o of t.file_paths)if(typeof o==="string"&&o.length>0)n.push({path:o,startLine:null,endLine:null})}return this.dedupeReadLocators(n)}extractReadLocatorsFromToolResultContent(e){if(typeof e==="string")return this.tryParseReadLocators(e);let t=[];for(let n of e){if(n.type==="text"){t.push(...this.tryParseReadLocators(n.text));continue}if(mn(n)){let r=this.extractLocatorFromResultEntry(n);if(r)t.push(r)}}return this.dedupeReadLocators(t)}tryParseReadLocators(e){try{return this.extractLocatorsFromParsedReadResult(JSON.parse(e))}catch{return[]}}extractLocatorsFromParsedReadResult(e){if(Array.isArray(e)){let n=[];for(let r of e){let o=this.extractLocatorFromResultEntry(r);if(o)n.push(o)}return this.dedupeReadLocators(n)}let t=this.extractLocatorFromResultEntry(e);return t?[t]:[]}extractLocatorFromReadRequest(e){if(!e||typeof e!=="object")return;let t=e,n=this.extractPath(t);if(!n)return;return{path:n,startLine:this.extractLineNumber(t.start_line),endLine:this.extractLineNumber(t.end_line)}}extractLocatorFromResultEntry(e){if(!e||typeof e!=="object")return;let t=e,n=this.extractPath(t);if(n)return{path:n,startLine:this.extractLineNumber(t.start_line),endLine:this.extractLineNumber(t.end_line)};if(typeof t.query==="string"&&t.query.length>0)return this.parseReadQuery(t.query);return}extractPath(e){let t=[e.path,e.file_path,e.filePath];for(let n of t)if(typeof n==="string"&&n.length>0)return n;return}extractLineNumber(e){return typeof e==="number"&&Number.isInteger(e)?e:null}parseReadQuery(e){let t=/^(.*):(\d+)-(EOF|\d+)$/.exec(e);if(!t)return{path:e,startLine:null,endLine:null};return{path:t[1],startLine:Number(t[2]),endLine:t[3]==="EOF"?null:Number(t[3])}}dedupeReadLocators(e){let t=new Map;for(let n of e)t.set(this.toReadLocatorKey(n),n);return Array.from(t.values())}toReadLocatorKey(e){if(this.isFullFileRead(e))return e.path;return`${e.path}:${e.startLine??1}-${e.endLine??"EOF"}`}isFullFileRead(e){return e.startLine==null&&e.endLine==null}isOutdatedReadLocator(e,t){let n=this.latestFullContentOwnerByPathCache.get(e.path);if(n&&n!==t)return!0;return this.latestReadToolUseByLocatorCache.get(this.toReadLocatorKey(e))!==t}replaceOutdatedReadContent(e,t){let n=new Set(t.map((s)=>this.toReadLocatorKey(s))),r=new Set(t.map((s)=>s.path));if(typeof e==="string")return this.replaceOutdatedInString(e,n)??Hn;let o=0;for(let s of e)if(s.type==="text")o+=this.countOutdatedImageEntries(s.text,n);return e.map((s)=>{if(s.type==="file"){if(!r.has(s.path))return s;return{...s,content:Hn}}if(s.type==="image"){if(o===0)return s;return o-=1,{type:"text",text:Hn}}if(mn(s))return this.replaceOutdatedReadEntry(s,n);if(s.type!=="text")return s;let i=this.replaceOutdatedInString(s.text,n);if(i===null)return{...s,text:Hn};return i===s.text?s:{...s,text:i}})}countOutdatedImageEntries(e,t){let n;try{n=JSON.parse(e)}catch{return 0}let r=Array.isArray(n)?n:[n],o=0;for(let s of r){if(!s||typeof s!=="object")continue;let i=s,a=this.extractLocatorFromResultEntry(i);if(!a)continue;if(!t.has(this.toReadLocatorKey(a)))continue;if(i.result==="Successfully read image"||i.content==="Successfully read image")o+=1}return o}replaceOutdatedInString(e,t){let n;try{n=JSON.parse(e)}catch{return null}let r=Array.isArray(n)?n.map((o)=>this.replaceOutdatedReadEntry(o,t)):this.replaceOutdatedReadEntry(n,t);return JSON.stringify(r)}replaceOutdatedReadEntry(e,t){if(!e||typeof e!=="object")return e;let n=this.extractLocatorFromResultEntry(e);if(!n||!t.has(this.toReadLocatorKey(n)))return e;let r={...e};if(typeof r.result==="string")r.result=Hn;else if(typeof r.content==="string")r.content=Hn;else r.result=Hn;return r}isReadTool(e){return!!e&&tO.has(e)}resolveToolName(e){let t=this.toolNameByIdCache.get(e.tool_use_id);if(t!==void 0)return t;return typeof e.name==="string"&&e.name.length>0?e.name.toLowerCase():void 0}truncateToolResultContent(e){if(typeof e==="string")return this.truncateMiddle(e);return e.map((t)=>{if(this.recoveryNotices.has(t))return t;if(t.type==="file"){let n=this.truncateMiddle(t.content);return n===t.content?t:{...t,content:n}}if(t.type==="text"){let n=this.truncateMiddle(t.text);return n===t.text?t:{...t,text:n}}if(mn(t))return this.truncateNestedStrings(t);return t})}truncateNestedStrings(e){if(typeof e==="string")return this.truncateMiddle(e);if(Array.isArray(e)){let t=!1,n=e.map((r)=>{let o=this.truncateNestedStrings(r);if(o!==r)t=!0;return o});return t?n:e}if(e!==null&&typeof e==="object"){if(uu(e))return e;let t=!1,n={};for(let[r,o]of Object.entries(e)){let s=this.truncateNestedStrings(o);if(s!==o)t=!0;n[r]=s}return t?n:e}return e}truncateMiddle(e){return Fo(e,this.maxToolResultChars,gS)}truncateAssistantText(e){if(this.hasRepeatedToolCallMarkup(e))return Fo(e,this.maxAssistantToolMarkupChars,rO);return Fo(e,this.maxAssistantTextChars,nO)}hasRepeatedToolCallMarkup(e){if(e.length<=this.maxAssistantToolMarkupChars)return!1;let t=0;for(let n of e.matchAll(oO))if(t+=1,t>=eO)return!0;return!1}truncateToTotalTextBudget(e){let t=this.countMessageTextBytes(e);if(t<=this.maxTotalTextBytes)return e;let n=e.map((s)=>{if(!Array.isArray(s.content))return{...s};return{...s,content:s.content.map((i)=>{let a=dO(i);if(i.type==="tool_result"&&a.type==="tool_result"&&Array.isArray(i.content)&&Array.isArray(a.content))i.content.forEach((d,c)=>{if(this.recoveryNotices.has(d))this.recoveryNotices.add(a.content[c])});return a})}}),r=this.collectTruncationCandidates(n),o=Math.floor(this.maxTotalTextBytes/(2*Math.max(1,r.length)));for(let s of r){if(t<=this.maxTotalTextBytes)break;let i=s.byteLength,a=Math.min(s.minBytes,o);if(i<=a)continue;let d=t-this.maxTotalTextBytes,c=Math.max(a,i-d),l=aO(s.get(),c,s.makeMarker);s.set(l),t-=i-me(l)}return n}countMessageTextBytes(e){let t=0;for(let n of e){if(typeof n.content==="string"){t+=me(n.content);continue}for(let r of n.content)if(r.type==="text")t+=me(r.text);else if(r.type==="thinking")t+=me(r.thinking);else if(r.type==="file")t+=me(r.content);else if(r.type==="tool_use")t+=ba(r.input);else if(r.type==="tool_result"){if(typeof r.content==="string")t+=me(r.content);else for(let o of r.content)if(o.type==="text")t+=me(o.text);else if(o.type==="file")t+=me(o.content);else if(mn(o))t+=ba(o)}}return t}collectTruncationCandidates(e){let t=[],n=[];for(let r of e){if(r.role==="assistant"&&typeof r.content==="string"){t.push({byteLength:me(r.content),minBytes:pS,makeMarker:fS,get:()=>r.content,set:(o)=>{r.content=o}});continue}if(!Array.isArray(r.content))continue;for(let o of r.content){if(o.type==="tool_use"){va(o.input,n);continue}if(r.role==="assistant"&&o.type==="text"){t.push({byteLength:me(o.text),minBytes:pS,makeMarker:fS,get:()=>o.text,set:(s)=>{o.text=s}});continue}if(o.type!=="tool_result")continue;if(typeof o.content==="string"){t.push({byteLength:me(o.content),minBytes:Ho,makeMarker:Bo,get:()=>o.content,set:(s)=>{o.content=s}});continue}for(let s of o.content){if(this.recoveryNotices.has(s))continue;if(s.type==="text")t.push({byteLength:me(s.text),minBytes:Ho,makeMarker:Bo,get:()=>s.text,set:(i)=>{s.text=i}});else if(s.type==="file")t.push({byteLength:me(s.content),minBytes:Ho,makeMarker:Bo,get:()=>s.content,set:(i)=>{s.content=i}});else if(mn(s))va(s,t)}}}return t.sort((r,o)=>o.byteLength-r.byteLength),n.sort((r,o)=>o.byteLength-r.byteLength),[...t,...n]}applyMediaBudget(e){let t=this.resolveMediaBudget();if(t.maxImageEncodedBytes===Number.POSITIVE_INFINITY&&t.maxImageDecodedBytes===Number.POSITIVE_INFINITY&&t.maxTotalMediaBytes===Number.POSITIVE_INFINITY)return e;let n=KM(),r=!1,o=e.map((s)=>{if(!Array.isArray(s.content))return s;let i=!1,a=s.content.map((d)=>{let c=this.applyMediaBudgetToBlock(d,t,n);if(c!==d)i=!0;return c});if(!i)return s;return r=!0,{...s,content:a}});return r?o:e}resolveMediaBudget(){return GM(this.mediaBudget)}applyMediaBudgetToBlock(e,t,n){if(au(e))return this.limitImageContent(e,t,n);if(e.type!=="tool_result"||typeof e.content==="string")return e;let r=!1,o=e.content.map((s)=>{let i=this.applyMediaBudgetToToolResultEntry(s,t,n);if(i!==s)r=!0;return i});return r?{...e,content:o}:e}applyMediaBudgetToToolResultEntry(e,t,n){if(au(e))return this.limitImageContent(e,t,n);if(mn(e))return this.limitNestedMedia(e,t,n);return e}limitNestedMedia(e,t,n){if(au(e)){let r=this.limitImageContent(e,t,n);return r.type==="text"?r.text:r}if(Array.isArray(e)){let r=!1,o=e.map((s)=>{let i=this.limitNestedMedia(s,t,n);if(i!==s)r=!0;return i});return r?o:e}if(e!==null&&typeof e==="object"){let r=!1,o={};for(let[s,i]of Object.entries(e)){let a=this.limitNestedMedia(i,t,n);if(a!==i)r=!0;o[s]=a}return r?o:e}return e}limitImageContent(e,t,n){if(!bS(e))return{type:"text",text:uS};let r=VM(e.mediaType,e.data,{maxImageEncodedBytes:t.maxImageEncodedBytes,maxImageDecodedBytes:t.maxImageDecodedBytes,maxTotalMediaBytes:t.maxTotalMediaBytes},n);if(!r.ok)return{type:"text",text:uS};return{...e,data:r.base64,mediaType:r.mediaType}}}var hS=String.raw`[\|\uFF5C]`,oO=new RegExp(String.raw`<\s*(?:${hS}\s*)?DSML\s*(?:${hS}\s*)?(?:tool_calls|invoke)\b[^>]*>|<\s*/?\s*(?:tool_calls?|tool_call|function_calls?|function_call|invoke)\b[^>]*>`,"gi");function me(e){return Buffer.byteLength(e,"utf8")}function yS(e){if(e===void 0)return;let t=Number.parseInt(e,10);return Number.isFinite(t)&&t>0?t:void 0}function sO(e){if(e===void 0)return;let t=e.trim().toLowerCase();if(t==="infinity"||t==="disable")return Number.POSITIVE_INFINITY;let n=Number.parseInt(e,10);return Number.isFinite(n)&&n>=0?n:void 0}function Uo(e,t){return typeof e==="number"&&Number.isFinite(e)&&e>0?Math.floor(e):t}function iO(e,t){if(typeof e!=="number"||Number.isNaN(e)||e<0)return t;return Number.isFinite(e)?Math.floor(e):e}function Fo(e,t,n){if(e.length<=t)return e;let r=n(e.length-t),o=Math.max(0,Math.floor((t-r.length)/2)),s=Math.max(0,e.length-o*2),i=n(s),a=Math.max(0,Math.floor((t-i.length)/2)),d=e.slice(0,a),c=a>0?e.slice(-a):"";return`${d}${i}${c}`}function aO(e,t,n){if(me(e)<=t)return e;let r=0,o=e.length,s="";while(r<=o){let i=r+o>>>1,a=Fo(e,i,n);if(me(a)<=t)s=a,r=i+1;else o=i-1}return s}function dO(e){if(e.type==="tool_use")return{...e,input:Ta(e.input)};if(e.type!=="tool_result"||typeof e.content==="string")return{...e};return{...e,content:e.content.map((t)=>mn(t)?Ta(t):{...t})}}function mn(e){if(e===null||typeof e!=="object")return!1;let t=e.type;return t!=="text"&&t!=="image"&&t!=="file"}function au(e){return e!==null&&typeof e==="object"&&e.type==="image"}function bS(e){return e!==null&&typeof e==="object"&&e.type==="image"&&typeof e.data==="string"&&typeof e.mediaType==="string"}function uu(e){return bS(e)}function ba(e){if(typeof e==="string")return me(e);if(Array.isArray(e)){let t=0;for(let n of e)t+=ba(n);return t}if(e!==null&&typeof e==="object"){if(uu(e))return 0;let t=0;for(let n of Object.values(e))t+=ba(n);return t}return 0}function va(e,t){if(Array.isArray(e)){e.forEach((n,r)=>{if(typeof n==="string")t.push({byteLength:me(n),minBytes:Ho,makeMarker:Bo,get:()=>e[r],set:(o)=>{e[r]=o}});else va(n,t)});return}if(e!==null&&typeof e==="object"){if(uu(e))return;let n=e;for(let r of Object.keys(n)){let o=n[r];if(typeof o==="string")t.push({byteLength:me(o),minBytes:Ho,makeMarker:Bo,get:()=>n[r],set:(s)=>{n[r]=s}});else va(o,t)}}}function Ta(e){if(Array.isArray(e))return e.map(Ta);if(e!==null&&typeof e==="object"){let t={};for(let[n,r]of Object.entries(e))t[n]=Ta(r);return t}return e}function lu(){return`conv_${Date.now()}_${Math.random().toString(36).slice(2,9)}`}class pu{messages=[];conversationId=lu();sessionStarted=!1;constructor(e){if((e?.length??0)>0)this.restore(e??[])}getConversationId(){return this.conversationId}getMessages(){return[...this.messages]}appendMessage(e){this.messages.push(e)}appendMessages(e){if(e.length===0)return;this.messages.push(...e)}replaceMessages(e){let t=new Map(e.map((o,s)=>[o.id,s])),n=new Map,r=-1;for(let o of this.messages){let s=o.id?t.get(o.id):void 0;if(s!==void 0)r=s;else if(o.metadata?.displayOnly===!0){let i=n.get(r)??[];i.push(o),n.set(r,i)}}this.messages=[...n.get(-1)??[]];for(let[o,s]of e.entries())this.messages.push(s,...n.get(o)??[])}resetForRun(){this.messages=[],this.conversationId=lu(),this.sessionStarted=!1}clearHistory(){this.messages=[],this.conversationId=lu(),this.sessionStarted=!1}restore(e){this.messages=[...e],this.sessionStarted=!1}isSessionStarted(){return this.sessionStarted}markSessionStarted(){this.sessionStarted=!0}}var Dr="0.0.92";var Ur={name:"@cline/core",description:"Cline Core SDK for Node Runtime",version:Dr,repository:{type:"git",url:"https://github.com/cline/cline",directory:"sdk/packages/core"},type:"module",types:"./dist/index.d.ts",main:"./dist/index.js",private:!1,publishConfig:{access:"public"},exports:{".":{types:"./dist/index.d.ts",import:"./dist/index.js"},"./hub":{types:"./dist/hub/index.d.ts",import:"./dist/hub/index.js"},"./hub/daemon-entry":{types:"./dist/hub/daemon/entry.d.ts",import:"./dist/hub/daemon/entry.js"},"./telemetry":{types:"./dist/services/telemetry/index.d.ts",import:"./dist/services/telemetry/index.js"},"./services/feature-flags/posthog":{types:"./dist/services/feature-flags/posthog.d.ts",import:"./dist/services/feature-flags/posthog.js"},"./remote/helper-entry":{types:"./dist/remote/remote-helper-entry.d.ts",import:"./dist/remote/remote-helper-entry.js"},"./cloud":{types:"./dist/cloud/index.d.ts",import:"./dist/cloud/index.js"},"./remote/helper":{types:"./dist/remote/remote-helper.d.ts",import:"./dist/remote/remote-helper.js"}},scripts:{build:"bun run ./bun.mts && bun tsc -p tsconfig.build.json && bun run ./scripts/verify-runtime-build-id.ts",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:compaction":"bun --conditions=development run scripts/compact-session.ts","test:unit":"vitest run --config vitest.config.ts","test:e2e":"vitest run --config vitest.e2e.config.ts","verify:routines":"zsh -lc 'bunx vitest run src/cron/schedule-service.test.ts --config vitest.config.ts'","test:watch":"vitest --config vitest.config.ts"},dependencies:{"@cline/agents":"workspace:*","@cline/shared":"workspace:*","@cline/llms":"workspace:*","@modelcontextprotocol/sdk":"^1.29.0","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.214.0","@opentelemetry/exporter-logs-otlp-http":"^0.214.0","@opentelemetry/exporter-metrics-otlp-http":"^0.214.0","@opentelemetry/exporter-trace-otlp-http":"^0.214.0","@opentelemetry/resources":"^2.6.1","@opentelemetry/sdk-logs":"^0.214.0","@opentelemetry/sdk-metrics":"^2.6.1","@opentelemetry/sdk-trace-base":"^2.6.1","@opentelemetry/sdk-trace-node":"^2.6.1","@opentelemetry/semantic-conventions":"^1.40.0",jiti:"^2.7.0","node-machine-id":"^1.1.12",nanoid:"^5.1.7","simple-git":"3.36.0",ws:"^8.20.0",yaml:"^2.8.2",zod:"^4.3.6"},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"]};function TS(e){let{agentConfig:t}=e,n=cO(t),r=uO(t),o=e.hooks,s=lO(t.maxParallelToolCalls);return{distinctId:t.distinctId,clientName:t.extensionContext?.client?.name,clientVersion:t.extensionContext?.client?.version,clineCoreVersion:Dr,sessionId:e.sessionId??t.sessionId,agentId:e.agentId,conversationId:e.conversationId,parentAgentId:e.parentAgentId,agentRole:e.agentRole,systemPrompt:e.systemPrompt??t.systemPrompt,messageModelInfo:r,model:e.model,modelOptions:n,modelTools:t.modelTools,tools:e.tools,hooks:o,prepareTurn:e.prepareTurn,consumePendingUserMessage:t.consumePendingUserMessage,plugins:e.plugins,logger:e.logger??t.logger,telemetry:e.telemetry??t.telemetry,initialMessages:e.initialMessages,completionPolicy:e.completionPolicy===null?void 0:e.completionPolicy??t.completionPolicy,maxIterations:t.maxIterations,toolExecution:s,toolPolicies:t.toolPolicies,toolContextMetadata:e.toolContextMetadata,requestToolApproval:t.requestToolApproval}}function cO(e){let t={};if(e.thinking!==void 0)t.thinking=e.thinking;if(e.reasoningEffort!==void 0)t.reasoningEffort=e.reasoningEffort;if(e.thinkingBudgetTokens!==void 0)t.thinkingBudgetTokens=e.thinkingBudgetTokens;if(e.maxTokensPerTurn!==void 0)t.maxTokensPerTurn=e.maxTokensPerTurn;if(e.temperature!==void 0)t.temperature=e.temperature;if(e.apiTimeoutMs!==void 0)t.apiTimeoutMs=e.apiTimeoutMs;return Object.keys(t).length>0?t:void 0}function uO(e){let t=e.providerConfig?.family;return{id:e.modelId,provider:e.providerId,family:t}}function lO(e){if(e===void 0)return;return e>=2?"parallel":"sequential"}function Fr(e){let t={...e},n=Object.hasOwn(e,"thinking"),r=Object.hasOwn(e,"thinkingBudgetTokens");if(e.thinking===!1||e.thinking===null)return t.reasoningEffort=void 0,t.thinkingBudgetTokens=void 0,t;if(!n&&r&&typeof e.thinkingBudgetTokens==="number"&&Number.isFinite(e.thinkingBudgetTokens)&&e.thinkingBudgetTokens>0)t.thinking=!0;return t}function pO(){return{lastToolName:"",lastToolSignature:"",consecutiveIdenticalCount:0}}function mO(e){e.lastToolName="",e.lastToolSignature="",e.consecutiveIdenticalCount=0}function mu(e){if(e==null||typeof e!=="object")return e;if(Array.isArray(e))return e.map(mu);let t={};for(let n of Object.keys(e).sort())t[n]=mu(e[n]);return t}function gO(e){if(e==null)return"null";if(typeof e==="string")return e;if(typeof e!=="object")return String(e);try{return JSON.stringify(mu(e))}catch{return String(e)}}function fO(e,t,n,r){if(t===e.lastToolName&&n===e.lastToolSignature)e.consecutiveIdenticalCount++;else e.consecutiveIdenticalCount=1;return e.lastToolName=t,e.lastToolSignature=n,{softWarning:e.consecutiveIdenticalCount===r.softThreshold,hardEscalation:e.consecutiveIdenticalCount>=r.hardThreshold}}var wS={softThreshold:3,hardThreshold:5};class gu{config;state=pO();constructor(e){this.config={softThreshold:e?.softThreshold??wS.softThreshold,hardThreshold:e?.hardThreshold??wS.hardThreshold}}inspect(e){let t=gO(e.input),n=fO(this.state,e.name,t,this.config);if(n.hardEscalation)return{kind:"hard",message:`Detected ${this.state.consecutiveIdenticalCount} consecutive identical calls to \`${e.name}\`; stopping to avoid a loop.`};if(n.softWarning)return{kind:"soft",message:`Detected ${this.state.consecutiveIdenticalCount} consecutive identical calls to \`${e.name}\`; consider trying a different approach.`};return{kind:"ok"}}reset(){mO(this.state)}}class fu{consecutiveMistakes=0;options;constructor(e){this.options=e}async record(e){let t=this.options.maxConsecutiveMistakes,n=e.forceAtLimit&&t?t:this.consecutiveMistakes+1;this.consecutiveMistakes=n;let r=e.details?.trim()||`consecutive mistake (${e.reason})`;if(this.options.emit({type:"error",error:Error(r),recoverable:!0,iteration:e.iteration}),this.options.log("warn","Recorded consecutive mistake",{agentId:this.options.agentId,conversationId:this.options.getConversationId(),runId:this.options.getActiveRunId(),iteration:e.iteration,reason:e.reason,details:e.details,consecutiveMistakes:n,maxConsecutiveMistakes:this.options.maxConsecutiveMistakes}),!t||n<t)return{action:"continue"};let o={iteration:e.iteration,consecutiveMistakes:n,maxConsecutiveMistakes:t,reason:e.reason,details:e.details};this.options.onLimitTelemetry?.(o);let s=await yO(o,this.options.onLimitReached);if(s.action==="continue"){let i=s.guidance?.trim();if(i)this.options.appendRecoveryNotice(i,e.reason);return this.consecutiveMistakes=0,{action:"continue",guidance:i}}return{action:"stop",reason:s.reason?.trim()||void 0,message:hO({iteration:e.iteration,consecutiveMistakes:n,maxConsecutiveMistakes:t,reason:e.reason,details:e.details,stopReason:s.reason})}}reset(){this.consecutiveMistakes=0}get value(){return this.consecutiveMistakes}}function hO(e){let t=[`Stopped after ${e.consecutiveMistakes}/${e.maxConsecutiveMistakes} consecutive mistakes (${e.reason}) at iteration ${e.iteration}.`],n=e.details?.trim();if(n)t.push(`Error: ${n}`);let r=e.stopReason?.trim();if(r)t.push(`Decision: ${r}`);return t.push("Session state was preserved. Send a new prompt to resume from the latest state."),t.join(" ")}async function yO(e,t){if(!t)return{action:"stop",reason:`maximum consecutive mistakes reached (${e.maxConsecutiveMistakes})`};try{return await t(e)}catch(n){return{action:"stop",reason:n instanceof Error?n.message:`maximum consecutive mistakes reached (${e.maxConsecutiveMistakes})`}}}function SO(e){switch(e){case"auto_compaction":case"manual_compaction":case"compaction_budget_emergency":return e;default:return}}function bO(e){let t=e.content.filter((n)=>n.type==="text");if(t.length===0)return;return t.map((n)=>n.text).join("")}function vO(e){let t=e.content.filter((n)=>n.type==="reasoning");if(t.length===0)return;return{reasoning:t.map((n)=>n.text).join(""),redacted:t.some((n)=>n.redacted===!0)}}function TO(e){return e.content.find((t)=>t.type==="tool-result")}function wO(e){switch(e){case"completed":return"completed";case"aborted":return"aborted";case"failed":return"error"}}function kO(e){if(!e||e.isError!==!0)return;if(typeof e.output==="string")return e.output;if(e.output instanceof Error)return e.output.message;try{return JSON.stringify(e.output)}catch{return String(e.output)}}class hu{lastUsage={inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0,reasoningTokenCount:0};toolStartedAt=new Map;translate(e){switch(e.type){case"run-started":return[];case"message-added":return[];case"turn-started":return[{type:"iteration_start",iteration:e.iteration}];case"turn-finished":return[{type:"iteration_end",iteration:e.iteration,hadToolCalls:e.toolCallCount>0,toolCallCount:e.toolCallCount}];case"assistant-text-delta":return[{type:"content_start",contentType:"text",text:e.text,accumulated:e.accumulatedText}];case"assistant-reasoning-delta":return[{type:"content_start",contentType:"reasoning",reasoning:e.text,redacted:e.redacted===!0}];case"assistant-media":return[{type:"content_end",contentType:"media",media:e.media}];case"assistant-message":return this.translateAssistantMessage(e.message);case"tool-started":return this.translateToolStarted(e);case"tool-updated":return[{type:"content_update",contentType:"tool",toolName:e.toolCall.toolName,toolCallId:e.toolCall.toolCallId,update:e.update}];case"tool-finished":return this.translateToolFinished(e);case"usage-updated":return this.translateUsage(e.usage);case"status-notice":return[{type:"notice",noticeType:"status",displayRole:"status",message:e.message,reason:SO(e.metadata?.reason),metadata:e.metadata}];case"run-finished":return this.translateRunFinished(e.result);case"run-failed":return[{type:"error",error:e.error,errorClass:e.errorClass,recoverable:!1,iteration:e.snapshot.iteration}];default:return e}}reset(){this.lastUsage={inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0,reasoningTokenCount:0},this.toolStartedAt.clear()}translateAssistantMessage(e){let t=[],n=bO(e);if(n!==void 0)t.push({type:"content_end",contentType:"text",text:n});let r=vO(e);if(r!==void 0)t.push({type:"content_end",contentType:"reasoning",reasoning:r.reasoning});return t}translateToolStarted(e){return this.toolStartedAt.set(e.toolCall.toolCallId,Date.now()),[{type:"content_start",contentType:"tool",toolName:e.toolCall.toolName,toolCallId:e.toolCall.toolCallId,input:e.toolCall.input,execution:e.toolCall.execution}]}translateToolFinished(e){let t=this.toolStartedAt.get(e.toolCall.toolCallId),n=t===void 0?void 0:Date.now()-t;this.toolStartedAt.delete(e.toolCall.toolCallId);let r=TO(e.message),o=r?.output,s=kO(r);return[{type:"content_end",contentType:"tool",toolName:e.toolCall.toolName,toolCallId:e.toolCall.toolCallId,output:o,error:s,durationMs:n,execution:e.toolCall.execution}]}translateUsage(e){let t=e.inputTokens-this.lastUsage.inputTokens,n=e.outputTokens-this.lastUsage.outputTokens,r=e.cacheReadTokens-this.lastUsage.cacheReadTokens,o=e.cacheWriteTokens-this.lastUsage.cacheWriteTokens,s=this.lastUsage.totalCost??0,a=(e.totalCost??0)-s,d=this.lastUsage.reasoningTokenCount??0,l=(e.reasoningTokenCount??0)-d;return this.lastUsage={inputTokens:e.inputTokens,outputTokens:e.outputTokens,cacheReadTokens:e.cacheReadTokens,cacheWriteTokens:e.cacheWriteTokens,totalCost:e.totalCost,reasoningTokenCount:e.reasoningTokenCount},[{type:"usage",inputTokens:Math.max(0,t),outputTokens:Math.max(0,n),cacheReadTokens:r===0?void 0:Math.max(0,r),cacheWriteTokens:o===0?void 0:Math.max(0,o),cost:a===0?void 0:a,reasoningTokenCount:l===0?void 0:Math.max(0,l),totalInputTokens:e.inputTokens,totalOutputTokens:e.outputTokens,totalCacheReadTokens:e.cacheReadTokens===0?void 0:e.cacheReadTokens,totalCacheWriteTokens:e.cacheWriteTokens===0?void 0:e.cacheWriteTokens,totalCost:e.totalCost}]}translateRunFinished(e){let t={inputTokens:e.usage.inputTokens,outputTokens:e.usage.outputTokens,cacheReadTokens:e.usage.cacheReadTokens===0?void 0:e.usage.cacheReadTokens,cacheWriteTokens:e.usage.cacheWriteTokens===0?void 0:e.usage.cacheWriteTokens,totalCost:e.usage.totalCost};return[{type:"done",reason:wO(e.status),text:e.outputText,iterations:e.iterations,usage:t}]}}var LO="session_run_in_progress";class RS extends Error{agentId;code=LO;constructor(e){super(`SessionRuntime.shutdown called while a run is in progress${e?` (agentId=${e})`:""}`);this.agentId=e;this.name="SessionRunInProgressError"}}function NO(e){if(typeof e==="string")return e;if(e instanceof Error)return e.message;try{return JSON.stringify(e)}catch{return String(e)}}async function DO(e){let n=(typeof e.content==="function"?await e.content():e.content).trim();return n.length>0?n:void 0}function UO(e,t){let n=e.trim(),r=t.map((o)=>o.trim()).filter(Boolean).join(`
|
|
257
257
|
|
|
258
258
|
`);if(n&&r)return`${n}
|
|
259
259
|
|
|
@@ -544,7 +544,7 @@ ${a}`:s.instructions}})}})}}class lw{watcher;ready;stopped=!1;constructor(e){thi
|
|
|
544
544
|
provider, model, cwd, workspace_root, team_name, enable_tools, enable_spawn, enable_teams,
|
|
545
545
|
parent_session_id, parent_agent_id, agent_id, conversation_id, is_subagent, prompt,
|
|
546
546
|
metadata_json, transcript_path, hook_path, messages_path, updated_at
|
|
547
|
-
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[e.sessionId,e.source,e.pid,e.startedAt,null,null,"running",0,e.interactive?1:0,e.provider,e.model,e.cwd,e.workspaceRoot,e.teamName??null,e.enableTools?1:0,e.enableSpawn?1:0,e.enableTeams?1:0,null,null,null,null,0,e.prompt??null,e.metadata?JSON.stringify(e.metadata):null,"","",e.messagesPath,pe()])}}function tj(e){return{text:e.text,usage:e.usage,inputTokens:e.usage.inputTokens,outputTokens:e.usage.outputTokens,iterations:e.iterations,finishReason:e.finishReason,toolCalls:e.toolCalls.map((t)=>({name:t.name,input:t.input,output:t.output,error:t.error,durationMs:t.durationMs}))}}function nj(e){return e.mode==="plan"?"plan":e.mode==="yolo"?"yolo":"act"}function Ak(e={}){let t=async(r)=>r,n=new Us({sessionService:new $s(new Bs),capabilities:{toolExecutors:{submit:t}},fetch:e.fetch,telemetry:e.telemetry});return{async startSession(r,o){let s=(r.cwd?.trim()||r.workspaceRoot).trim(),i=await n.startSession({source:Ee.CORE,mode:"automation",sessionMetadata:et(o?.sessionMetadata,{mode:"automation",trigger:r.source}),interactive:!1,config:{providerId:ej(r.provider),modelId:r.model,apiKey:r.apiKey?.trim()||void 0,cwd:s,workspaceRoot:r.workspaceRoot,systemPrompt:r.systemPrompt??"",mode:nj(r),maxIterations:r.maxIterations,enableTools:r.enableTools!==!1,enableSpawnAgent:r.enableSpawn!==!1,enableAgentTeams:r.enableTeams!==!1,disableMcpSettingsTools:r.disableMcpSettingsTools,agentPluginPaths:r.agentPluginPaths,missionLogIntervalSteps:r.missionStepInterval,missionLogIntervalMs:r.missionTimeIntervalMs},toolPolicies:r.toolPolicies??{"*":{autoApprove:r.autoApproveTools!==!1}},localRuntime:{configExtensions:r.configExtensions}});return{sessionId:i.sessionId,startResult:{sessionId:i.sessionId,manifestPath:i.manifestPath,messagesPath:i.messagesPath}}},async sendSession(r,o){let s=await n.runTurn({sessionId:r,prompt:o.prompt,userImages:o.attachments?.userImages,userFiles:o.attachments?.userFiles?.map((i)=>i.content)});if(!s)throw Error("local hub schedule runtime returned no turn result");return{result:tj(s)}},async abortSession(r){return await n.abort(r,Error("hub schedule abort")),{applied:!0}},async stopSession(r){return await n.stopSession(r),{applied:!0}}}}import{CLINE_HUB_DEV_PORT as rj,CLINE_HUB_PORT as oj,resolveClineBuildEnv as sj}from"@cline/shared";var ij="CLINE_HUB_HOST",aj="CLINE_HUB_PORT",dj="CLINE_HUB_PATHNAME",cj="127.0.0.1",uj=oj,lj="/hub";function Rk(e){return sj(e)==="development"?rj:uj}function pj(e={}){return(e.env??process.env)[ij]?.trim()||cj}function om(e={}){let n=(e.env??process.env)[aj]?.trim();if(!n)return Rk(e);let r=Number.parseInt(n,10);if(!Number.isInteger(r)||r<1||r>65535)return Rk(e);return r}function mj(e={}){return(e.env??process.env)[dj]?.trim()||lj}function sm(e={},t={}){return{host:e.host??pj(t),port:e.port??om(t),pathname:e.pathname??mj(t)}}import{chmodSync as gj,existsSync as fj,mkdirSync as hj}from"node:fs";import{dirname as yj}from"node:path";import{loadSqliteDb as Sj}from"@cline/shared/db";var Ek=3;class Pk extends Error{lockFile;constructor(e){super(`Hub instance lock is held by a live Hub: ${e}. Connect to the running Hub or diagnose it; never replace it.`);this.name="HubLockHeldError",this.lockFile=e}}function Ws(e){return e instanceof Error&&e.name==="HubLockHeldError"}function _k(e){return`${e}.instance.lock`}class no{db;lockFile;constructor(e,t){this.lockFile=e,this.db=t}get held(){return this.db!==void 0}release(){let e=this.db;if(!e)return;this.db=void 0;try{e.exec("ROLLBACK;")}catch{}e.close?.()}static acquire(e){let t=!1,n;try{hj(yj(e),{recursive:!0}),t=fj(e),n=Sj(e)}catch{return new no(e,void 0)}try{n.exec("PRAGMA busy_timeout = 0;"),n.exec("BEGIN EXCLUSIVE;")}catch(r){if(n.close?.(),bj(r))throw new Pk(e);return new no(e,void 0)}if(!t)try{gj(e,384)}catch{}return new no(e,n)}}function bj(e){let t=e instanceof Error?e.message:String(e),n=e?.code;return n==="SQLITE_BUSY"||n==="SQLITE_LOCKED"||t.includes("SQLITE_BUSY")||t.includes("SQLITE_LOCKED")||t.includes("database is locked")}import{join as Dj}from"node:path";import{createHash as vj,randomBytes as Lk}from"node:crypto";import{mkdir as am,open as xk,readFile as Nk,rename as Tj,rm as dm,writeFile as wj}from"node:fs/promises";import{dirname as Dk,join as cm}from"node:path";import{ensureLoopbackProxyBypass as kj,isHubProtocolCompatible as kre}from"@cline/shared";import{resolveClineDataDir as Md,resolveClineDir as Ire}from"@cline/shared/storage";var Cj="CLINE_HUB_DISCOVERY_PATH",Ij="CLINE_HUB_BUILD_ID",Aj="CLINE_HUB_BUILD_EPOCH_MS",Rj=30000,Ej=15000,Mk=100;function Pj(e){return e.replace(/[^a-zA-Z0-9_.-]+/g,"_")}function _j(e){return vj("sha256").update(e).digest("hex").slice(0,12)}function xj(e){if(!Number.isInteger(e)||!e||e<=0)return!1;try{return process.kill(e,0),!0}catch(t){return t instanceof Error&&"code"in t?String(t.code)==="EPERM":!1}}function Uk(){return Lk(32).toString("hex")}function Ok(e){return new Promise((t)=>setTimeout(t,e))}function Mj(e){return`${e}.lock`}async function Oj(e){try{let t=JSON.parse(await Nk(cm(e,"owner.json"),"utf8"));if(typeof t.pid!=="number"||typeof t.acquiredAt!=="string")return;return{pid:t.pid,acquiredAt:t.acquiredAt}}catch{return}}async function im(e){await dm(e,{recursive:!0,force:!0}).catch(()=>{return})}function js(){let e=process.env[Ij]?.trim();if(e)return e;return"sdk-v1-
|
|
547
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[e.sessionId,e.source,e.pid,e.startedAt,null,null,"running",0,e.interactive?1:0,e.provider,e.model,e.cwd,e.workspaceRoot,e.teamName??null,e.enableTools?1:0,e.enableSpawn?1:0,e.enableTeams?1:0,null,null,null,null,0,e.prompt??null,e.metadata?JSON.stringify(e.metadata):null,"","",e.messagesPath,pe()])}}function tj(e){return{text:e.text,usage:e.usage,inputTokens:e.usage.inputTokens,outputTokens:e.usage.outputTokens,iterations:e.iterations,finishReason:e.finishReason,toolCalls:e.toolCalls.map((t)=>({name:t.name,input:t.input,output:t.output,error:t.error,durationMs:t.durationMs}))}}function nj(e){return e.mode==="plan"?"plan":e.mode==="yolo"?"yolo":"act"}function Ak(e={}){let t=async(r)=>r,n=new Us({sessionService:new $s(new Bs),capabilities:{toolExecutors:{submit:t}},fetch:e.fetch,telemetry:e.telemetry});return{async startSession(r,o){let s=(r.cwd?.trim()||r.workspaceRoot).trim(),i=await n.startSession({source:Ee.CORE,mode:"automation",sessionMetadata:et(o?.sessionMetadata,{mode:"automation",trigger:r.source}),interactive:!1,config:{providerId:ej(r.provider),modelId:r.model,apiKey:r.apiKey?.trim()||void 0,cwd:s,workspaceRoot:r.workspaceRoot,systemPrompt:r.systemPrompt??"",mode:nj(r),maxIterations:r.maxIterations,enableTools:r.enableTools!==!1,enableSpawnAgent:r.enableSpawn!==!1,enableAgentTeams:r.enableTeams!==!1,disableMcpSettingsTools:r.disableMcpSettingsTools,agentPluginPaths:r.agentPluginPaths,missionLogIntervalSteps:r.missionStepInterval,missionLogIntervalMs:r.missionTimeIntervalMs},toolPolicies:r.toolPolicies??{"*":{autoApprove:r.autoApproveTools!==!1}},localRuntime:{configExtensions:r.configExtensions}});return{sessionId:i.sessionId,startResult:{sessionId:i.sessionId,manifestPath:i.manifestPath,messagesPath:i.messagesPath}}},async sendSession(r,o){let s=await n.runTurn({sessionId:r,prompt:o.prompt,userImages:o.attachments?.userImages,userFiles:o.attachments?.userFiles?.map((i)=>i.content)});if(!s)throw Error("local hub schedule runtime returned no turn result");return{result:tj(s)}},async abortSession(r){return await n.abort(r,Error("hub schedule abort")),{applied:!0}},async stopSession(r){return await n.stopSession(r),{applied:!0}}}}import{CLINE_HUB_DEV_PORT as rj,CLINE_HUB_PORT as oj,resolveClineBuildEnv as sj}from"@cline/shared";var ij="CLINE_HUB_HOST",aj="CLINE_HUB_PORT",dj="CLINE_HUB_PATHNAME",cj="127.0.0.1",uj=oj,lj="/hub";function Rk(e){return sj(e)==="development"?rj:uj}function pj(e={}){return(e.env??process.env)[ij]?.trim()||cj}function om(e={}){let n=(e.env??process.env)[aj]?.trim();if(!n)return Rk(e);let r=Number.parseInt(n,10);if(!Number.isInteger(r)||r<1||r>65535)return Rk(e);return r}function mj(e={}){return(e.env??process.env)[dj]?.trim()||lj}function sm(e={},t={}){return{host:e.host??pj(t),port:e.port??om(t),pathname:e.pathname??mj(t)}}import{chmodSync as gj,existsSync as fj,mkdirSync as hj}from"node:fs";import{dirname as yj}from"node:path";import{loadSqliteDb as Sj}from"@cline/shared/db";var Ek=3;class Pk extends Error{lockFile;constructor(e){super(`Hub instance lock is held by a live Hub: ${e}. Connect to the running Hub or diagnose it; never replace it.`);this.name="HubLockHeldError",this.lockFile=e}}function Ws(e){return e instanceof Error&&e.name==="HubLockHeldError"}function _k(e){return`${e}.instance.lock`}class no{db;lockFile;constructor(e,t){this.lockFile=e,this.db=t}get held(){return this.db!==void 0}release(){let e=this.db;if(!e)return;this.db=void 0;try{e.exec("ROLLBACK;")}catch{}e.close?.()}static acquire(e){let t=!1,n;try{hj(yj(e),{recursive:!0}),t=fj(e),n=Sj(e)}catch{return new no(e,void 0)}try{n.exec("PRAGMA busy_timeout = 0;"),n.exec("BEGIN EXCLUSIVE;")}catch(r){if(n.close?.(),bj(r))throw new Pk(e);return new no(e,void 0)}if(!t)try{gj(e,384)}catch{}return new no(e,n)}}function bj(e){let t=e instanceof Error?e.message:String(e),n=e?.code;return n==="SQLITE_BUSY"||n==="SQLITE_LOCKED"||t.includes("SQLITE_BUSY")||t.includes("SQLITE_LOCKED")||t.includes("database is locked")}import{join as Dj}from"node:path";import{createHash as vj,randomBytes as Lk}from"node:crypto";import{mkdir as am,open as xk,readFile as Nk,rename as Tj,rm as dm,writeFile as wj}from"node:fs/promises";import{dirname as Dk,join as cm}from"node:path";import{ensureLoopbackProxyBypass as kj,isHubProtocolCompatible as kre}from"@cline/shared";import{resolveClineDataDir as Md,resolveClineDir as Ire}from"@cline/shared/storage";var Cj="CLINE_HUB_DISCOVERY_PATH",Ij="CLINE_HUB_BUILD_ID",Aj="CLINE_HUB_BUILD_EPOCH_MS",Rj=30000,Ej=15000,Mk=100;function Pj(e){return e.replace(/[^a-zA-Z0-9_.-]+/g,"_")}function _j(e){return vj("sha256").update(e).digest("hex").slice(0,12)}function xj(e){if(!Number.isInteger(e)||!e||e<=0)return!1;try{return process.kill(e,0),!0}catch(t){return t instanceof Error&&"code"in t?String(t.code)==="EPERM":!1}}function Uk(){return Lk(32).toString("hex")}function Ok(e){return new Promise((t)=>setTimeout(t,e))}function Mj(e){return`${e}.lock`}async function Oj(e){try{let t=JSON.parse(await Nk(cm(e,"owner.json"),"utf8"));if(typeof t.pid!=="number"||typeof t.acquiredAt!=="string")return;return{pid:t.pid,acquiredAt:t.acquiredAt}}catch{return}}async function im(e){await dm(e,{recursive:!0,force:!0}).catch(()=>{return})}function js(){let e=process.env[Ij]?.trim();if(e)return e;return"sdk-v1-8c6ba172d40b62f7ae3d9e3ae6af40ce96b9ccaf9139732e6a4bf769d1c8155c".trim()||`source-${String(Ur.version)}`}function Fk(){let e=Number(process.env[Aj]);if(Number.isFinite(e)&&e>0)return e;return Number.isFinite(1791436112296)?1791436112296:void 0}function Od(e=process.argv[1]?.trim()||process.cwd()){let t=`hub-${_j(e)}`,n=process.env[Cj]?.trim()||cm(Md(),"locks","hub","owners",`${Pj(t)}.json`);return{ownerId:t,discoveryPath:n}}async function Ld(e){try{let t=JSON.parse(await Nk(e,"utf8"));if(typeof t.hubId!=="string"||typeof t.protocolVersion!=="string"||typeof t.authToken!=="string"||typeof t.host!=="string"||typeof t.port!=="number"||typeof t.url!=="string"||typeof t.startedAt!=="string"||typeof t.updatedAt!=="string")return;return{hubId:t.hubId,protocolVersion:t.protocolVersion,minClientProtocolVersion:typeof t.minClientProtocolVersion==="string"?t.minClientProtocolVersion:void 0,maxClientProtocolVersion:typeof t.maxClientProtocolVersion==="string"?t.maxClientProtocolVersion:void 0,capabilities:Array.isArray(t.capabilities)?t.capabilities.filter((n)=>typeof n==="string"):void 0,coreVersion:typeof t.coreVersion==="string"?t.coreVersion:void 0,buildId:typeof t.buildId==="string"?t.buildId:void 0,buildEpochMs:typeof t.buildEpochMs==="number"?t.buildEpochMs:void 0,authToken:t.authToken,host:t.host,port:t.port,url:t.url,pid:typeof t.pid==="number"?t.pid:void 0,startedAt:t.startedAt,updatedAt:t.updatedAt}}catch{return}}async function um(e,t){await Bk(e,async()=>{let n=Dk(e);await am(n,{recursive:!0});let r=`${e}.${process.pid}.${Lk(6).toString("hex")}.tmp`,o;try{o=await xk(r,"wx",384),await o.writeFile(`${JSON.stringify(t,null,2)}
|
|
548
548
|
`,{encoding:"utf8"}),await o.sync(),await o.close(),o=void 0,await Tj(r,e);let s;try{s=await xk(n,"r"),await s.sync()}catch{}finally{await s?.close().catch(()=>{return})}}catch(s){throw await o?.close().catch(()=>{return}),await dm(r,{force:!0}).catch(()=>{return}),s}})}async function Hk(e,t){return await Bk(e,async()=>{if((await Ld(e))?.hubId!==t)return!1;return await dm(e,{force:!0}),!0})}async function Lj(e,t,n){let r=Mj(e);await am(Dk(r),{recursive:!0});let o=Date.now()+Ej;while(!0){try{await am(r,{recursive:!1})}catch(s){if((s instanceof Error&&"code"in s?String(s.code):"")!=="EEXIST")throw s;let a=await Oj(r);if(!a){if(Date.now()>=o){await im(r);continue}await Ok(Mk);continue}let d=Date.now()-Date.parse(a.acquiredAt);if(!xj(a.pid)||d>Rj){await im(r);continue}if(Date.now()>=o)throw Error(`Timed out waiting for hub ${t} lock ${r}`);await Ok(Mk);continue}try{return await wj(cm(r,"owner.json"),`${JSON.stringify({pid:process.pid,acquiredAt:new Date().toISOString()},null,2)}
|
|
549
549
|
`,"utf8"),await n()}finally{await im(r)}}}function Bk(e,t){return Lj(`${e}.mutation`,"discovery mutation",t)}async function qs(e,t){kj();try{let n=await fetch(t?.authToken?Nj(e):$k(e),{headers:t?.authToken?{authorization:`Bearer ${t.authToken}`}:void 0,signal:t?.signal});if(!n.ok)return;let r=await n.json();if(typeof r.protocolVersion!=="string"||typeof r.host!=="string"||typeof r.port!=="number"||typeof r.url!=="string")return;return{protocolVersion:r.protocolVersion,minClientProtocolVersion:typeof r.minClientProtocolVersion==="string"?r.minClientProtocolVersion:void 0,maxClientProtocolVersion:typeof r.maxClientProtocolVersion==="string"?r.maxClientProtocolVersion:void 0,capabilities:Array.isArray(r.capabilities)?r.capabilities.filter((o)=>typeof o==="string"):void 0,coreVersion:typeof r.coreVersion==="string"?r.coreVersion:void 0,buildId:typeof r.buildId==="string"?r.buildId:void 0,buildEpochMs:typeof r.buildEpochMs==="number"?r.buildEpochMs:void 0,host:r.host,port:r.port,url:r.url,hubId:typeof r.hubId==="string"?r.hubId:void 0,authToken:typeof r.authToken==="string"?r.authToken:void 0,pid:typeof r.pid==="number"?r.pid:void 0,startedAt:typeof r.startedAt==="string"?r.startedAt:void 0,updatedAt:typeof r.updatedAt==="string"?r.updatedAt:void 0}}catch{return}}function ro(e,t,n="/hub"){return new URL(`ws://${e}:${t}${n}`).toString()}function $k(e){let t=new URL(e);return t.protocol=t.protocol==="wss:"?"https:":"http:",t.pathname="/health",t.search="",t.toString()}function Nj(e){let t=new URL($k(e));return t.pathname="/status",t.toString()}var Uj="shared:cline",Fj="CLINE_HUB_DISCOVERY_PATH",Hj="hub-production";function Nd(e=Uj){return Od(`${e}@${js()}`)}function Dd(){return{ownerId:Hj,discoveryPath:process.env[Fj]?.trim()||Dj(Md(),"locks","hub","production.json")}}function Bj(e){if(typeof e==="string")return e.trim()||void 0;if(!Array.isArray(e))return;return e.map((n)=>{if(n&&typeof n==="object"&&"type"in n&&n.type==="text"&&"text"in n&&typeof n.text==="string")return n.text.trim();return""}).filter(Boolean).join(`
|
|
550
550
|
`).trim()||void 0}var Wk=120,lm="...";function pm(e){let t=e.trim();if(!t)return"";if(Buffer.byteLength(t,"utf8")<=Wk)return t;let n=Wk-Buffer.byteLength(lm,"utf8");if(n<=0)return lm;let r="";for(let o of t){if(Buffer.byteLength(r+o,"utf8")>n)break;r+=o}return`${r}${lm}`}async function jk(e){let t=e?.sessionId?.trim()||"unknown",n=typeof e?.metadata?.messagesPath==="string"?e.metadata.messagesPath:void 0,o=[...await Zn(n)].reverse().find((d)=>d.role==="assistant"),s=o?Bj(o.content):void 0,i=e?.workspaceRoot?.trim()||"workspace",a=typeof e?.metadata?.prompt==="string"?e.metadata.prompt.trim():i;return{title:`Task completed (${t})`,body:pm(s&&s.length>0?s:a.length>0?a:i),severity:"info"}}import{resolve as lG}from"node:path";import{CLINE_DEFAULT_MODEL_ID as pG,captureSdkError as nc,createSessionId as vg,HUB_CLIENT_TOOL_APPROVAL_CAPABILITY as mG}from"@cline/shared";import{isChatWorkspacePath as gG}from"@cline/shared/storage";function zs(e){return!!e&&typeof e==="object"&&!Array.isArray(e)}function mm(e){let t=e?.trim();return t?t:void 0}function $j(e,t){let n=e?.trim();if(!n)return t;let r=Date.parse(n);if(!Number.isFinite(r))return t;return new Date(r).toISOString()}function qk(e,t){return new Date(new Date(e).getTime()+Math.max(0,Math.floor(t))*1000).toISOString()}function zk(e,t){return new Date(new Date(e).getTime()-Math.max(0,Math.floor(t))*1000).toISOString()}function Wj(e,t){if(!e)return t;return new Date(e).getTime()>=new Date(t).getTime()?e:t}function jj(e,t){let n=e.eventId.trim(),r=e.eventType.trim(),o=e.source.trim(),s=mm(e.subject),i=mm(e.dedupeKey)??`${r}:${o}:${s??n}`;return{eventId:n,eventType:r,source:o,subject:s,occurredAt:$j(e.occurredAt,t),workspaceRoot:mm(e.workspaceRoot),payload:zs(e.payload)?e.payload:void 0,attributes:zs(e.attributes)?e.attributes:void 0,dedupeKey:i}}function gm(e,t){if(!t)return;let n=t.split("."),r=e;for(let o of n){if(!zs(r))return;r=r[o]}return r}function qj(e,t){if(e.attributes&&Object.hasOwn(e.attributes,t))return e.attributes[t];if(e.payload&&Object.hasOwn(e.payload,t))return e.payload[t];let n={eventId:e.eventId,eventType:e.eventType,source:e.source,subject:e.subject,occurredAt:e.occurredAt,workspaceRoot:e.workspaceRoot,dedupeKey:e.dedupeKey,attributes:e.attributes,payload:e.payload},r=gm(n,t);if(r!==void 0)return r;if(e.attributes){let o=gm(e.attributes,t);if(o!==void 0)return o}if(e.payload)return gm(e.payload,t);return}function Ud(e,t){if(Array.isArray(t))return t.some((n)=>Ud(e,n));if(Array.isArray(e))return e.some((n)=>Ud(n,t));if(zs(t)){if(!zs(e))return!1;return Object.entries(t).every(([n,r])=>Ud(e[n],r))}return Object.is(e,t)}function zj(e,t){if(!t||Object.keys(t).length===0)return!0;return Object.entries(t).every(([n,r])=>Ud(qj(e,n),r))}class fm{store;nowFn;logger;constructor(e){this.store=e.store,this.nowFn=e.now??(()=>Date.now()),this.logger=e.logger}ingestEvent(e){let t=new Date(this.nowFn()).toISOString(),n=jj(e,t);try{let r=this.store.eventTransaction(()=>this.materializeEvent(n,t));return this.logger?.debug(r.duplicate?"cron.event.duplicate":"cron.event.processed",{eventId:r.event.eventId,eventType:r.event.eventType,source:r.event.source,status:r.event.processingStatus,matchedSpecCount:r.event.matchedSpecCount,queuedRunCount:r.event.queuedRunCount}),r}catch(r){throw this.logger?.error?.("cron.event.failed",{eventId:n.eventId,eventType:n.eventType,error:r}),r}}materializeEvent(e,t){let n=this.store.insertEventLog(e,{receivedAtIso:t});if(!n.created)return{event:n.record,duplicate:!0,matchedSpecs:[],queuedRuns:[],suppressions:[{reason:"duplicate_event",dedupeKey:n.record.dedupeKey}]};let r=this.store.listEventSpecsForType(e.eventType),o=[],s=[],i=[];for(let c of r){if(!zj(e,c.filters)){o.push({specId:c.specId,externalId:c.externalId,reason:"filter_mismatch",dedupeKey:e.dedupeKey});continue}s.push(c);let l=this.materializeForSpec(c,e,n.record.receivedAt);if(l.run)i.push(l.run);else o.push({specId:c.specId,externalId:c.externalId,reason:l.reason,dedupeKey:e.dedupeKey})}let a=s.length===0?"unmatched":i.length>0?"queued":"suppressed";return this.store.updateEventLogProcessing(n.record.eventId,{status:a,matchedSpecCount:s.length,queuedRunCount:i.length,suppressedCount:o.filter((c)=>c.reason!=="filter_mismatch").length}),{event:this.store.getEventLog(n.record.eventId)??n.record,duplicate:!1,matchedSpecs:s,queuedRuns:i,suppressions:o}}materializeForSpec(e,t,n){let r=t.dedupeKey??t.eventId,o=e.debounceSeconds??0;if(o>0){let d=this.store.findQueuedEventRunForDedupe({specId:e.specId,dedupeKey:r});if(d){let c=Wj(d.scheduledFor,qk(n,o)),l=this.store.updateQueuedEventRunForDebounce({runId:d.runId,triggerEventId:t.eventId,scheduledFor:c});if(l)return{run:l,reason:"dedupe_window"}}}let s=e.dedupeWindowSeconds??0;if(s>0&&this.store.hasRecentEventRunForDedupe({specId:e.specId,dedupeKey:r,sinceIso:zk(n,s)}))return{reason:"dedupe_window"};let i=e.cooldownSeconds??0;if(i>0&&this.store.hasRecentEventRunForSpec({specId:e.specId,sinceIso:zk(n,i)}))return{reason:"cooldown"};return{run:this.store.enqueueRun({specId:e.specId,specRevision:e.revision,triggerKind:"event",triggerEventId:t.eventId,scheduledFor:o>0?qk(n,o):n}),reason:"dedupe_window"}}}class Ks{store;nowFn;constructor(e){this.store=e.store,this.nowFn=e.now??(()=>Date.now())}materializeAll(){let e={oneOffQueued:0,scheduleQueued:0},t=this.store.listSpecs({triggerKind:"one_off",enabled:!0,parseStatus:"valid"});for(let r of t)if(this.materializeOneOff(r))e.oneOffQueued+=1;let n=this.store.listSpecs({triggerKind:"schedule",enabled:!0,parseStatus:"valid"});for(let r of n)try{if(this.materializeSchedule(r))e.scheduleQueued+=1}catch{}return e}materializeOneOff(e){if(e.triggerKind!=="one_off")return!1;if(!e.enabled||e.removed)return!1;if(this.store.hasConsumedOneOffRevision(e.specId,e.revision))return!1;return this.store.enqueueRun({specId:e.specId,specRevision:e.revision,triggerKind:"one_off",scheduledFor:e.nextRunAt??new Date(this.nowFn()).toISOString()}),!0}materializeSchedule(e){if(e.triggerKind!=="schedule")return!1;if(!e.enabled||e.removed)return!1;if(!e.scheduleExpr)return!1;return this.store.materializeDueScheduleRun({specId:e.specId,nowMs:this.nowFn()}).queued}}import{basename as nq}from"node:path";import{buildClineSystemPrompt as rq}from"@cline/shared";import{nowIso as Jk}from"@cline/shared/db";import{mkdirSync as Kj,writeFileSync as Gj}from"node:fs";import{isAbsolute as Vj,join as Gk}from"node:path";import{resolveCronReportsDir as Xj,resolveCronSpecsDir as Jj}from"@cline/shared/storage";function bn(e){if(/[:#\n]/.test(e)||e.includes('"'))return JSON.stringify(e);return e}function St(e,t){if(t===void 0||t===null)return;return`${e}: ${bn(t)}`}function Vk(e){let t=0;for(let r of e.matchAll(/`+/g))t=Math.max(t,r[0].length);let n="`".repeat(Math.max(3,t+1));return`${n}
|