@cline/shared 0.0.82 → 0.0.83-nightly.1789612722

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.
@@ -11,6 +11,8 @@ export interface ChatRuntimeConfig extends SessionPromptConfig {
11
11
  enableSpawn?: boolean;
12
12
  enableTeams?: boolean;
13
13
  disableMcpSettingsTools?: boolean;
14
+ /** Additional Agent Plugins package roots resolved by the hub runtime. */
15
+ agentPluginPaths?: string[];
14
16
  autoApproveTools?: boolean;
15
17
  missionStepInterval?: number;
16
18
  missionTimeIntervalMs?: number;
@@ -223,9 +225,9 @@ export declare const ProviderCapabilitySchema: z.ZodEnum<{
223
225
  export type ProviderCapability = z.infer<typeof ProviderCapabilitySchema>;
224
226
  export declare const ProviderProtocolSchema: z.ZodEnum<{
225
227
  "openai-responses": "openai-responses";
228
+ "openai-chat": "openai-chat";
226
229
  anthropic: "anthropic";
227
230
  gemini: "gemini";
228
- "openai-chat": "openai-chat";
229
231
  "openai-r1": "openai-r1";
230
232
  "ai-sdk": "ai-sdk";
231
233
  }>;
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Windows' documented opt-out from resolving bare program names through the
3
+ * current directory. Its presence is what matters, not its value.
4
+ */
5
+ export declare const NO_DEFAULT_CURRENT_DIRECTORY_IN_EXE_PATH_ENV = "NoDefaultCurrentDirectoryInExePath";
6
+ /**
7
+ * Stop Windows from resolving bare program names through the child's working
8
+ * directory.
9
+ *
10
+ * When `child_process.spawn("rg", ...)` runs on Windows, libuv resolves the
11
+ * bare name by looking in the child's cwd before walking PATH (it gates that
12
+ * step on `NeedCurrentDirectoryForExePathW`, which reads this variable from
13
+ * the spawning process). Cline spawns `rg`, `git`, `powershell` and
14
+ * model-named programs with the user's workspace as cwd, so a repo that ships
15
+ * an `rg.exe` would get it executed, with the user's privileges, the moment
16
+ * the workspace opened. Bun's spawn (1.4+) honors the same variable, as do
17
+ * cmd.exe and the C runtime, so children inherit the protection too.
18
+ *
19
+ * Call once at process startup, from the main thread (a worker thread's
20
+ * `process.env` is a copy that native code never sees), before anything can
21
+ * spawn. No-op off Windows.
22
+ */
23
+ export declare function disableCurrentDirectoryExecutableSearch(options?: {
24
+ env?: Record<string, string | undefined>;
25
+ platform?: NodeJS.Platform;
26
+ }): void;
@@ -59,6 +59,12 @@ export interface CaptureTaskLifecycleEventInput {
59
59
  errorClass?: string;
60
60
  messageLimit?: number;
61
61
  }
62
+ /**
63
+ * Why an out-of-process host spawned this core. The JetBrains plugin sets it via
64
+ * `CLINE_CORE_SPAWN_REASON`; keep in sync with its `SpawnReason`.
65
+ */
66
+ export declare const CORE_SPAWN_REASONS: readonly ["initial", "crash_restart", "rollout_fallback", "rollout_demotion", "user_restart"];
67
+ export type CoreSpawnReason = (typeof CORE_SPAWN_REASONS)[number];
62
68
  export interface TelemetryMetadata {
63
69
  extension_version: string;
64
70
  /**
@@ -74,6 +80,13 @@ export interface TelemetryMetadata {
74
80
  os_version: string;
75
81
  is_dev?: string;
76
82
  is_remote_workspace?: boolean;
83
+ /**
84
+ * Spawn-time facts reported by an out-of-process host (the JetBrains plugin): how many
85
+ * cores this host window has spawned so far and why this one was started. Absent when the
86
+ * host runs core in-process (VS Code).
87
+ */
88
+ core_spawn_ordinal?: number;
89
+ core_spawn_reason?: CoreSpawnReason;
77
90
  }
78
91
  export interface ITelemetryService {
79
92
  setDistinctId(distinctId?: string): void;
@@ -121,6 +134,18 @@ export declare function captureTaskLifecycleEvent(telemetry: ITelemetryService |
121
134
  export declare function captureSdkError(telemetry: ITelemetryService | undefined, input: CaptureSdkErrorInput): boolean;
122
135
  export declare function buildSdkErrorProperties(input: CaptureSdkErrorInput): TelemetryProperties;
123
136
  export declare function normalizeSdkError(error: unknown, messageLimit?: number, errorMessage?: string): TelemetryProperties;
137
+ /**
138
+ * Marker property stamped onto a tracer provider whose span processors
139
+ * include a real OTLP exporter — the collector relay. Trace decisions must
140
+ * identify the relay explicitly instead of inferring it from "some recording
141
+ * tracer exists": a console-only tracer would otherwise be misclassified as
142
+ * a relay. A property on the provider instance (reached through the OTel API
143
+ * global) survives bundled module duplication, which a module-level registry
144
+ * would not.
145
+ */
146
+ export declare const OTLP_TRACE_RELAY_MARKER = "_clineOtlpTraceRelay";
147
+ export declare function markOtlpTraceRelayProvider(provider: object): void;
148
+ export declare function isOtlpTraceRelayProvider(provider: unknown): boolean;
124
149
  export interface OpenTelemetryClientConfig {
125
150
  /**
126
151
  * Whether telemetry is enabled via OTEL_TELEMETRY_ENABLED
@@ -141,6 +166,15 @@ export interface OpenTelemetryClientConfig {
141
166
  * Examples: "console", "otlp". When unset, no `TracerProvider` is registered.
142
167
  */
143
168
  tracesExporter?: string;
169
+ /**
170
+ * OTel resource `service.name` (default "cline"). Distinguishes processes
171
+ * that ship in the same binary — e.g. the CLI vs the detached hub daemon.
172
+ */
173
+ serviceName?: string;
174
+ /**
175
+ * OTel resource `service.version`.
176
+ */
177
+ serviceVersion?: string;
144
178
  /**
145
179
  * Protocol for OTLP exporters. SDK support is currently limited to "http/json".
146
180
  */
@@ -1 +1 @@
1
- var WC=Object.defineProperty;var YC=(C)=>C;function KC(C,S){this[C]=YC.bind(null,S)}var FS=(C,S)=>{for(var _ in S)WC(C,_,{get:S[_],enumerable:!0,configurable:!0,set:KC.bind(S,_)})};import{existsSync as K,readdirSync as qC}from"node:fs";import{basename as o,dirname as P,join as c}from"node:path";var QC=/[\u00A0\u2000-\u200A\u202F\u205F\u3000]/g,ZC=" ";function s(C){return C.normalize("NFC").replace(QC," ")}function $C(C){let S=o(C),_=S.replace(/ (AM|PM)\./gi,`${ZC}$1.`);return _===S?C:c(P(C),_)}function RC(C){return C.normalize("NFD")}function p(C){return C.replace(/'/g,"’")}function BC(C){let S=P(C),_=s(o(C));try{for(let G of qC(S))if(s(G)===_)return c(S,G)}catch{}return}function XC(C){if(K(C))return C;let S=$C(C);if(S!==C&&K(S))return S;let _=RC(C);if(_!==C&&K(_))return _;let G=p(C);if(G!==C&&K(G))return G;let T=p(_);if(T!==_&&T!==G&&K(T))return T;return BC(C)}import{appendFileSync as UC,existsSync as O,mkdirSync as y,readdirSync as jC,readFileSync as r,statSync as W}from"node:fs";import{homedir as gC}from"node:os";import{basename as HC,dirname as H,extname as zC,isAbsolute as bC,join as E,relative as JC,resolve as M}from"node:path";var Z="workspaces",$="chat";function h(C){let S=C.trim(),_=/^[A-Za-z]:[\\/]/.test(S)||S.startsWith("\\\\"),G=S.startsWith("/");if(!_&&!G)return!1;let T=S.split(_?/[\\/]+/:/\/+/).filter(Boolean),I=T.at(-1)??"",D=T.at(-2)??"",N=T.at(-3)??"";return(T.at(-4)??"")===".cline"&&N==="data"&&D==="workspaces"&&I==="chat"}var w=".clinerules",z=".cline",b=".agents",n=b,k="agents",R="hooks",X="skills",x="rules",B="workflows",U="plugins",m="AGENTS.md",i="plugin.json";function VC(){return E(L(),Z,$)}var e="cline_mcp_settings.json",t="settings.json";function xC(){let C=process?.env?.HOME?.trim();if(C&&C!=="~")return C;let S=process?.env?.USERPROFILE?.trim();if(S)return S;let _=process?.env?.HOMEDRIVE?.trim(),G=process?.env?.HOMEPATH?.trim();if(_&&G)return`${_}${G}`;let T=gC().trim();if(T&&T!=="~")return T;return"~"}var A=xC(),a=!1;function uC(C){let S=C.trim();if(!S)return;A=S,a=!0}function yC(C){if(a)return;let S=C.trim();if(!S)return;A=S}var j,CC=!1;function wC(C){let S=C.trim();if(!S)return;j=S,CC=!0}function kC(C){if(CC)return;let S=C.trim();if(!S)return;j=S}function v(){if(j)return j;let C=process.env.CLINE_DIR?.trim();if(C)return C;return E(A,".cline")}function SC(){return E(A,"Documents","Cline")}function Q(C){return E(SC(),C)}function L(){let C=process.env.CLINE_DATA_DIR?.trim();if(C)return C;return E(v(),"data")}function mC(){let C=process.env.CLINE_SESSION_DATA_DIR?.trim();if(C)return C;return E(L(),"sessions")}function fC(){let C=process.env.CLINE_TEAM_DATA_DIR?.trim();if(C)return C;return E(L(),"teams")}function EC(){let C=process.env.CLINE_CONNECTOR_DATA_DIR?.trim();if(C)return C;return E(L(),"connectors")}function lC(C,S){let _=C.replace(/[^a-zA-Z0-9._-]+/g,"_"),G=S.replace(/[^a-zA-Z0-9._-]+/g,"_");return E(L(),"logs","connectors",_,`${G}.log`)}function dC(){let C=process.env.CLINE_CONNECTOR_SETTINGS_PATH?.trim();if(C)return C;return E(EC(),t)}function J(){let C=process.env.CLINE_DB_DATA_DIR?.trim();if(C)return C;return E(L(),"db")}function sC(){let C=process.env.CLINE_CONNECTORS_DB_PATH?.trim();if(C)return C;return E(J(),"connectors.db")}function pC(){let C=process.env.CLINE_CRON_DB_PATH?.trim();if(C)return C;return E(J(),"cron.db")}function oC(){let C=process.env.CLINE_TASKS_DB_PATH?.trim();if(C)return C;return E(J(),"tasks.db")}function PC(){return E(v(),"schedules")}function _C(){return E(v(),"tasks")}function TC(C){let S=C.trim();if(!S)throw Error("workspaceRoot is required for workspace task scope");return E(S,".cline","tasks")}function cC(C){let S=C.taskSpecsDir?.trim();if(S)return S;if(C.scope==="workspace")return TC(C.workspaceRoot??"");return _C()}function GC(){return E(v(),"cron")}function u(C){return E(C,".cline","cron")}function f(C){if(typeof C==="string")return u(C);if(C?.cronSpecsDir?.trim())return C.cronSpecsDir.trim();if(C?.scope==="workspace"){let S=C.workspaceRoot?.trim();if(!S)throw Error("workspaceRoot is required for workspace cron scope");return u(S)}return GC()}function hC(C){return E(f(C),"reports")}function nC(C){return E(f(C),"events")}function rC(){let C=process.env.CLINE_PROVIDER_SETTINGS_PATH?.trim();if(C)return C;return E(L(),"settings","providers.json")}function iC(){let C=process.env.CLINE_GLOBAL_SETTINGS_PATH?.trim();if(C)return C;return E(L(),"settings","global-settings.json")}function eC(){let C=process.env.CLINE_MCP_SETTINGS_PATH?.trim();if(C)return C;return E(L(),"settings",e)}function F(C){let S=new Set,_=[];for(let G of C){if(!G||S.has(G))continue;S.add(G),_.push(G)}return _}function tC(C){if(!C)return[];return[w,z,b].map((S)=>E(C,S,X))}function IC(){return E(v(),k)}function aC(C){return F([C?E(C,z,k):"",IC()])}function CS(C){let S=[Q("Hooks"),E(v(),R)];if(C)S.push(E(C,w,R),E(C,z,R));return F(S)}function SS(C){return F([...tC(C),E(v(),X),E(A,b,X)])}function DC(){return E(A,b,m)}function ES(C){let S=C?[E(C,w),E(C,z,x)]:[],_=C?[E(C,m)]:[];return F([..._,...S,DC(),E(v(),x),E(A,"Cline","Rules"),Q("Rules")])}function _S(C){return F([C?E(C,".clinerules",B):"",Q("Workflows"),E(v(),B),C?E(C,".cline",B):""])}function TS(C){return F([C?E(C,".cline",U):"",E(v(),U),Q("Plugins")])}function GS(C){return F([C?E(C,n,U):"",E(A,n,U)])}var NC=new Set([".js",".ts"]),l="package.json",IS=["index.ts","index.js"],DS=new Set(["node_modules"]);function g(C){try{return W(E(C,i)).isFile()}catch{return!1}}function q(C){let S=C.lastIndexOf(".");if(S===-1)return!1;return NC.has(C.slice(S))}function OC(C){try{let S=JSON.parse(r(C,"utf8"));if(!S.cline||typeof S.cline!=="object")return null;return S.cline}catch{return null}}function vC(C){let S=C?.plugins;if(!Array.isArray(S))return[];return S.flatMap((_)=>_.paths??[])}function LC(C){let S=M(C);if(!O(S)||!W(S).isDirectory())return null;if(g(S))return null;let _=E(S,l);if(O(_)){let G=OC(_),T=vC(G).map((I)=>M(S,I)).filter((I)=>O(I)&&W(I).isFile()&&q(I));if(T.length>0)return T}for(let G of IS){let T=E(S,G);if(O(T)&&W(T).isFile())return[T]}return null}function NS(C){try{let S=JSON.parse(r(C,"utf8"));return typeof S.name==="string"&&S.name.trim()?S.name.trim():void 0}catch{return}}function OS(C,S){let _=JC(M(C),M(S));return _===""||!_.startsWith("..")&&!bC(_)}function vS(C,S){let _=H(C),G=M(S);while(OS(G,_)){let T=E(_,l);if(O(T)){let D=NS(T);if(D)return D;break}let I=M(_,"..");if(I===_)break;_=I}return HC(C,zC(C))}function MC(C){let S=M(C);if(!O(S))return[];if(g(S))return[];let _=[],G=[S];while(G.length>0){let T=G.pop();if(!T)continue;let I;try{I=jC(T,{withFileTypes:!0})}catch{continue}for(let D of I){let N=E(T,D.name);if(D.isDirectory()){if(g(N))continue;if(DS.has(D.name)||D.name.startsWith("."))continue;let V=E(N,l);if(O(V)){let FC=OC(V),d=vC(FC).map((Y)=>M(N,Y)).filter((Y)=>O(Y)&&W(Y).isFile()&&q(Y));if(d.length>0){_.push(...d);continue}}G.push(N);continue}if(D.name.startsWith("."))continue;if(D.isFile()&&q(N))_.push(N)}}return _.sort((T,I)=>T.localeCompare(I))}function LS(C,S){let _=[];for(let G of C){let T=G.trim();if(!T)continue;let I=M(S,T);if(!O(I))throw Error(`Plugin path does not exist: ${I}`);if(W(I).isDirectory()){let N=LC(I);if(N){_.push(...N);continue}_.push(...MC(I));continue}if(!q(I))throw Error(`Plugin file must use a supported extension (${[...NC].join(", ")}): ${I}`);_.push(I)}return _}function AC(C){let S=H(C);if(!O(S))y(S,{recursive:!0})}function MS(C){y(H(C),{recursive:!0}),UC(C,"")}function AS(C){if(C?.trim())return AC(C),H(C);let S=E(L(),"logs");if(!O(S))y(S,{recursive:!0});return S}export{yC as setHomeDirIfUnset,uC as setHomeDir,kC as setClineDirIfUnset,wC as setClineDir,TC as resolveWorkspaceTaskSpecsDir,u as resolveWorkspaceCronSpecsDir,_S as resolveWorkflowsConfigSearchPaths,fC as resolveTeamDataDir,oC as resolveTasksDbPath,cC as resolveTaskSpecsDir,SS as resolveSkillsConfigSearchPaths,mC as resolveSessionDataDir,ES as resolveRulesConfigSearchPaths,rC as resolveProviderSettingsPath,LC as resolvePluginModuleEntries,TS as resolvePluginConfigSearchPaths,eC as resolveMcpSettingsPath,CS as resolveHooksConfigSearchPaths,_C as resolveGlobalTaskSpecsDir,iC as resolveGlobalSettingsPath,GC as resolveGlobalCronSpecsDir,DC as resolveGlobalAgentsRulesPath,XC as resolveExistingFilePath,Q as resolveDocumentsExtensionPath,SC as resolveDocumentsClineDirectoryPath,J as resolveDbDataDir,f as resolveCronSpecsDir,hC as resolveCronReportsDir,nC as resolveCronEventsDir,pC as resolveCronDbPath,sC as resolveConnectorsDbPath,dC as resolveConnectorSettingsPath,lC as resolveConnectorLogPath,EC as resolveConnectorDataDir,LS as resolveConfiguredPluginModulePaths,v as resolveClineDir,L as resolveClineDataDir,VC as resolveChatWorkspacePath,IC as resolveAgentsConfigDirPath,PC as resolveAgentSchedulesDir,GS as resolveAgentPluginSearchPaths,aC as resolveAgentConfigSearchPaths,q as isPluginModulePath,h as isChatWorkspacePath,g as isAgentPluginDirectory,vS as getPluginDisplayName,AC as ensureParentDir,AS as ensureHookLogDir,MS as ensureFileExists,MC as discoverPluginModulePaths,B as WORKFLOWS_CONFIG_DIRECTORY_NAME,X as SKILLS_CONFIG_DIRECTORY_NAME,x as RULES_CONFIG_DIRECTORY_NAME,R as HOOKS_CONFIG_DIRECTORY_NAME,Z as CLINE_WORKSPACES_DIRECTORY_NAME,e as CLINE_MCP_SETTINGS_FILE_NAME,t as CLINE_CONNECTOR_SETTINGS_FILE_NAME,$ as CLINE_CHAT_WORKSPACE_DIRECTORY_NAME,i as AGENT_PLUGIN_MANIFEST_FILE_NAME,k as AGENT_CONFIG_DIRECTORY_NAME,m as AGENTS_RULES_FILE_NAME};
1
+ var FC=Object.defineProperty;var WC=(C)=>C;function YC(C,S){this[C]=WC.bind(null,S)}var FS=(C,S)=>{for(var E in S)FC(C,E,{get:S[E],enumerable:!0,configurable:!0,set:YC.bind(S,E)})};import{existsSync as K,readdirSync as KC}from"node:fs";import{basename as o,dirname as P,join as c}from"node:path";var qC=/[\u00A0\u2000-\u200A\u202F\u205F\u3000]/g,QC=" ";function s(C){return C.normalize("NFC").replace(qC," ")}function ZC(C){let S=o(C),E=S.replace(/ (AM|PM)\./gi,`${QC}$1.`);return E===S?C:c(P(C),E)}function $C(C){return C.normalize("NFD")}function p(C){return C.replace(/'/g,"’")}function RC(C){let S=P(C),E=s(o(C));try{for(let G of KC(S))if(s(G)===E)return c(S,G)}catch{}return}function BC(C){if(K(C))return C;let S=ZC(C);if(S!==C&&K(S))return S;let E=$C(C);if(E!==C&&K(E))return E;let G=p(C);if(G!==C&&K(G))return G;let T=p(E);if(T!==E&&T!==G&&K(T))return T;return RC(C)}import{appendFileSync as XC,existsSync as O,mkdirSync as w,readdirSync as UC,readFileSync as n,statSync as F}from"node:fs";import{homedir as jC}from"node:os";import{basename as gC,dirname as g,extname as HC,isAbsolute as zC,join as _,relative as bC,resolve as M}from"node:path";var Z="workspaces",$="chat";function h(C){let S=C.trim(),E=/^[A-Za-z]:[\\/]/.test(S)||S.startsWith("\\\\"),G=S.startsWith("/");if(!E&&!G)return!1;let T=S.split(E?/[\\/]+/:/\/+/).filter(Boolean),I=T.at(-1)??"",D=T.at(-2)??"",N=T.at(-3)??"";return(T.at(-4)??"")===".cline"&&N==="data"&&D==="workspaces"&&I==="chat"}var y=".clinerules",H=".cline",z=".agents",JC=z,k="agents",R="hooks",X="skills",V="rules",B="workflows",x="plugins",m="AGENTS.md",r="plugin.json";function VC(){return _(L(),Z,$)}var i="cline_mcp_settings.json",e="settings.json";function xC(){let C=process?.env?.HOME?.trim();if(C&&C!=="~")return C;let S=process?.env?.USERPROFILE?.trim();if(S)return S;let E=process?.env?.HOMEDRIVE?.trim(),G=process?.env?.HOMEPATH?.trim();if(E&&G)return`${E}${G}`;let T=jC().trim();if(T&&T!=="~")return T;return"~"}var A=xC(),t=!1;function uC(C){let S=C.trim();if(!S)return;A=S,t=!0}function wC(C){if(t)return;let S=C.trim();if(!S)return;A=S}var U,a=!1;function yC(C){let S=C.trim();if(!S)return;U=S,a=!0}function kC(C){if(a)return;let S=C.trim();if(!S)return;U=S}function v(){if(U)return U;let C=process.env.CLINE_DIR?.trim();if(C)return C;return _(A,".cline")}function CC(){return _(A,"Documents","Cline")}function Q(C){return _(CC(),C)}function L(){let C=process.env.CLINE_DATA_DIR?.trim();if(C)return C;return _(v(),"data")}function mC(){let C=process.env.CLINE_SESSION_DATA_DIR?.trim();if(C)return C;return _(L(),"sessions")}function fC(){let C=process.env.CLINE_TEAM_DATA_DIR?.trim();if(C)return C;return _(L(),"teams")}function SC(){let C=process.env.CLINE_CONNECTOR_DATA_DIR?.trim();if(C)return C;return _(L(),"connectors")}function lC(C,S){let E=C.replace(/[^a-zA-Z0-9._-]+/g,"_"),G=S.replace(/[^a-zA-Z0-9._-]+/g,"_");return _(L(),"logs","connectors",E,`${G}.log`)}function dC(){let C=process.env.CLINE_CONNECTOR_SETTINGS_PATH?.trim();if(C)return C;return _(SC(),e)}function b(){let C=process.env.CLINE_DB_DATA_DIR?.trim();if(C)return C;return _(L(),"db")}function sC(){let C=process.env.CLINE_CONNECTORS_DB_PATH?.trim();if(C)return C;return _(b(),"connectors.db")}function pC(){let C=process.env.CLINE_CRON_DB_PATH?.trim();if(C)return C;return _(b(),"cron.db")}function oC(){let C=process.env.CLINE_TASKS_DB_PATH?.trim();if(C)return C;return _(b(),"tasks.db")}function PC(){return _(v(),"schedules")}function EC(){return _(v(),"tasks")}function _C(C){let S=C.trim();if(!S)throw Error("workspaceRoot is required for workspace task scope");return _(S,".cline","tasks")}function cC(C){let S=C.taskSpecsDir?.trim();if(S)return S;if(C.scope==="workspace")return _C(C.workspaceRoot??"");return EC()}function TC(){return _(v(),"cron")}function u(C){return _(C,".cline","cron")}function f(C){if(typeof C==="string")return u(C);if(C?.cronSpecsDir?.trim())return C.cronSpecsDir.trim();if(C?.scope==="workspace"){let S=C.workspaceRoot?.trim();if(!S)throw Error("workspaceRoot is required for workspace cron scope");return u(S)}return TC()}function hC(C){return _(f(C),"reports")}function nC(C){return _(f(C),"events")}function rC(){let C=process.env.CLINE_PROVIDER_SETTINGS_PATH?.trim();if(C)return C;return _(L(),"settings","providers.json")}function iC(){let C=process.env.CLINE_GLOBAL_SETTINGS_PATH?.trim();if(C)return C;return _(L(),"settings","global-settings.json")}function eC(){let C=process.env.CLINE_MCP_SETTINGS_PATH?.trim();if(C)return C;return _(L(),"settings",i)}function W(C){let S=new Set,E=[];for(let G of C){if(!G||S.has(G))continue;S.add(G),E.push(G)}return E}function tC(C){if(!C)return[];return[y,H,z].map((S)=>_(C,S,X))}function GC(){return _(v(),k)}function aC(C){return W([C?_(C,H,k):"",GC()])}function CS(C){let S=[Q("Hooks"),_(v(),R)];if(C)S.push(_(C,y,R),_(C,H,R));return W(S)}function SS(C){return W([...tC(C),_(v(),X),_(A,z,X)])}function IC(){return _(A,z,m)}function ES(C){let S=C?[_(C,y),_(C,H,V)]:[],E=C?[_(C,m)]:[];return W([...E,...S,IC(),_(v(),V),_(A,"Cline","Rules"),Q("Rules")])}function _S(C){return W([C?_(C,".clinerules",B):"",Q("Workflows"),_(v(),B),C?_(C,".cline",B):""])}function TS(C){return W([C?_(C,".cline",x):"",_(v(),x),Q("Plugins")])}function GS(){return[_(A,JC,x)]}var DC=new Set([".js",".ts"]),l="package.json",IS=["index.ts","index.js"],DS=new Set(["node_modules"]);function j(C){try{return F(_(C,r)).isFile()}catch{return!1}}function q(C){let S=C.lastIndexOf(".");if(S===-1)return!1;return DC.has(C.slice(S))}function NC(C){try{let S=JSON.parse(n(C,"utf8"));if(!S.cline||typeof S.cline!=="object")return null;return S.cline}catch{return null}}function OC(C){let S=C?.plugins;if(!Array.isArray(S))return[];return S.flatMap((E)=>E.paths??[])}function vC(C){let S=M(C);if(!O(S)||!F(S).isDirectory())return null;if(j(S))return null;let E=_(S,l);if(O(E)){let G=NC(E),T=OC(G).map((I)=>M(S,I)).filter((I)=>O(I)&&F(I).isFile()&&q(I));if(T.length>0)return T}for(let G of IS){let T=_(S,G);if(O(T)&&F(T).isFile())return[T]}return null}function NS(C){try{let S=JSON.parse(n(C,"utf8"));return typeof S.name==="string"&&S.name.trim()?S.name.trim():void 0}catch{return}}function OS(C,S){let E=bC(M(C),M(S));return E===""||!E.startsWith("..")&&!zC(E)}function vS(C,S){let E=g(C),G=M(S);while(OS(G,E)){let T=_(E,l);if(O(T)){let D=NS(T);if(D)return D;break}let I=M(E,"..");if(I===E)break;E=I}return gC(C,HC(C))}function LC(C){let S=M(C);if(!O(S))return[];if(j(S))return[];let E=[],G=[S];while(G.length>0){let T=G.pop();if(!T)continue;let I;try{I=UC(T,{withFileTypes:!0})}catch{continue}for(let D of I){let N=_(T,D.name);if(D.isDirectory()){if(j(N))continue;if(DS.has(D.name)||D.name.startsWith("."))continue;let J=_(N,l);if(O(J)){let AC=NC(J),d=OC(AC).map((Y)=>M(N,Y)).filter((Y)=>O(Y)&&F(Y).isFile()&&q(Y));if(d.length>0){E.push(...d);continue}}G.push(N);continue}if(D.name.startsWith("."))continue;if(D.isFile()&&q(N))E.push(N)}}return E.sort((T,I)=>T.localeCompare(I))}function LS(C,S){let E=[];for(let G of C){let T=G.trim();if(!T)continue;let I=M(S,T);if(!O(I))throw Error(`Plugin path does not exist: ${I}`);if(F(I).isDirectory()){let N=vC(I);if(N){E.push(...N);continue}E.push(...LC(I));continue}if(!q(I))throw Error(`Plugin file must use a supported extension (${[...DC].join(", ")}): ${I}`);E.push(I)}return E}function MC(C){let S=g(C);if(!O(S))w(S,{recursive:!0})}function MS(C){w(g(C),{recursive:!0}),XC(C,"")}function AS(C){if(C?.trim())return MC(C),g(C);let S=_(L(),"logs");if(!O(S))w(S,{recursive:!0});return S}export{wC as setHomeDirIfUnset,uC as setHomeDir,kC as setClineDirIfUnset,yC as setClineDir,_C as resolveWorkspaceTaskSpecsDir,u as resolveWorkspaceCronSpecsDir,_S as resolveWorkflowsConfigSearchPaths,fC as resolveTeamDataDir,oC as resolveTasksDbPath,cC as resolveTaskSpecsDir,SS as resolveSkillsConfigSearchPaths,mC as resolveSessionDataDir,ES as resolveRulesConfigSearchPaths,rC as resolveProviderSettingsPath,vC as resolvePluginModuleEntries,TS as resolvePluginConfigSearchPaths,eC as resolveMcpSettingsPath,CS as resolveHooksConfigSearchPaths,EC as resolveGlobalTaskSpecsDir,iC as resolveGlobalSettingsPath,TC as resolveGlobalCronSpecsDir,IC as resolveGlobalAgentsRulesPath,BC as resolveExistingFilePath,Q as resolveDocumentsExtensionPath,CC as resolveDocumentsClineDirectoryPath,b as resolveDbDataDir,f as resolveCronSpecsDir,hC as resolveCronReportsDir,nC as resolveCronEventsDir,pC as resolveCronDbPath,sC as resolveConnectorsDbPath,dC as resolveConnectorSettingsPath,lC as resolveConnectorLogPath,SC as resolveConnectorDataDir,LS as resolveConfiguredPluginModulePaths,v as resolveClineDir,L as resolveClineDataDir,VC as resolveChatWorkspacePath,GC as resolveAgentsConfigDirPath,PC as resolveAgentSchedulesDir,GS as resolveAgentPluginSearchPaths,aC as resolveAgentConfigSearchPaths,q as isPluginModulePath,h as isChatWorkspacePath,j as isAgentPluginDirectory,vS as getPluginDisplayName,MC as ensureParentDir,AS as ensureHookLogDir,MS as ensureFileExists,LC as discoverPluginModulePaths,B as WORKFLOWS_CONFIG_DIRECTORY_NAME,X as SKILLS_CONFIG_DIRECTORY_NAME,V as RULES_CONFIG_DIRECTORY_NAME,R as HOOKS_CONFIG_DIRECTORY_NAME,Z as CLINE_WORKSPACES_DIRECTORY_NAME,i as CLINE_MCP_SETTINGS_FILE_NAME,e as CLINE_CONNECTOR_SETTINGS_FILE_NAME,$ as CLINE_CHAT_WORKSPACE_DIRECTORY_NAME,r as AGENT_PLUGIN_MANIFEST_FILE_NAME,k as AGENT_CONFIG_DIRECTORY_NAME,m as AGENTS_RULES_FILE_NAME};
@@ -139,15 +139,16 @@ export declare function resolveRulesConfigSearchPaths(workspacePath?: string): s
139
139
  export declare function resolveWorkflowsConfigSearchPaths(workspacePath?: string): string[];
140
140
  export declare function resolvePluginConfigSearchPaths(workspacePath?: string): string[];
141
141
  /**
142
- * Roots searched for Agent Plugins (agent-plugins.org). Kept separate from
142
+ * Root searched for Agent Plugins (agent-plugins.org). Kept separate from
143
143
  * {@link resolvePluginConfigSearchPaths} so the two package lanes never share a
144
144
  * directory: `.agents/plugins` is the vendor-neutral location, matching the
145
145
  * `.agents/skills` convention already honored by skill discovery.
146
146
  *
147
- * Discovery roots are explicitly client-defined by the specification, so these
148
- * are our choice rather than a conformance requirement.
147
+ * Discovery roots are explicitly client-defined by the specification. Cline
148
+ * only auto-discovers user-installed packages from the Hub host's home so
149
+ * opening a repository cannot activate repository-controlled MCP servers.
149
150
  */
150
- export declare function resolveAgentPluginSearchPaths(workspacePath?: string): string[];
151
+ export declare function resolveAgentPluginSearchPaths(): string[];
151
152
  /**
152
153
  * True when `directoryPath` carries an Agent Plugin manifest at its root.
153
154
  *
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cline/shared",
3
- "version": "0.0.82",
3
+ "version": "0.0.83-nightly.1789612722",
4
4
  "description": "Shared utilities, types, and schemas for Cline packages",
5
5
  "repository": {
6
6
  "type": "git",