@cline/shared 0.0.82 → 0.0.83

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
  }>;
@@ -121,6 +121,18 @@ export declare function captureTaskLifecycleEvent(telemetry: ITelemetryService |
121
121
  export declare function captureSdkError(telemetry: ITelemetryService | undefined, input: CaptureSdkErrorInput): boolean;
122
122
  export declare function buildSdkErrorProperties(input: CaptureSdkErrorInput): TelemetryProperties;
123
123
  export declare function normalizeSdkError(error: unknown, messageLimit?: number, errorMessage?: string): TelemetryProperties;
124
+ /**
125
+ * Marker property stamped onto a tracer provider whose span processors
126
+ * include a real OTLP exporter — the collector relay. Trace decisions must
127
+ * identify the relay explicitly instead of inferring it from "some recording
128
+ * tracer exists": a console-only tracer would otherwise be misclassified as
129
+ * a relay. A property on the provider instance (reached through the OTel API
130
+ * global) survives bundled module duplication, which a module-level registry
131
+ * would not.
132
+ */
133
+ export declare const OTLP_TRACE_RELAY_MARKER = "_clineOtlpTraceRelay";
134
+ export declare function markOtlpTraceRelayProvider(provider: object): void;
135
+ export declare function isOtlpTraceRelayProvider(provider: unknown): boolean;
124
136
  export interface OpenTelemetryClientConfig {
125
137
  /**
126
138
  * Whether telemetry is enabled via OTEL_TELEMETRY_ENABLED
@@ -141,6 +153,15 @@ export interface OpenTelemetryClientConfig {
141
153
  * Examples: "console", "otlp". When unset, no `TracerProvider` is registered.
142
154
  */
143
155
  tracesExporter?: string;
156
+ /**
157
+ * OTel resource `service.name` (default "cline"). Distinguishes processes
158
+ * that ship in the same binary — e.g. the CLI vs the detached hub daemon.
159
+ */
160
+ serviceName?: string;
161
+ /**
162
+ * OTel resource `service.version`.
163
+ */
164
+ serviceVersion?: string;
144
165
  /**
145
166
  * Protocol for OTLP exporters. SDK support is currently limited to "http/json".
146
167
  */
@@ -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",
4
4
  "description": "Shared utilities, types, and schemas for Cline packages",
5
5
  "repository": {
6
6
  "type": "git",