@cline/shared 0.0.81 → 0.0.82

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.
@@ -173,6 +173,12 @@ export interface ProviderListItem {
173
173
  color: string;
174
174
  letter: string;
175
175
  enabled: boolean;
176
+ /**
177
+ * True when the persisted settings hold real credentials or a usable
178
+ * keyless endpoint (see @cline/core's isProviderSettingsUsable), unlike
179
+ * `enabled` which is set by any persisted entry.
180
+ */
181
+ configured?: boolean;
176
182
  apiKey?: string;
177
183
  oauthAccessTokenPresent?: boolean;
178
184
  baseUrl?: string;
@@ -1,2 +1,2 @@
1
1
  export { resolveExistingFilePath } from "./path-resolution";
2
- export { AGENT_CONFIG_DIRECTORY_NAME, AGENTS_RULES_FILE_NAME, CLINE_CHAT_WORKSPACE_DIRECTORY_NAME, CLINE_CONNECTOR_SETTINGS_FILE_NAME, CLINE_MCP_SETTINGS_FILE_NAME, CLINE_WORKSPACES_DIRECTORY_NAME, type CronSpecsScope, discoverPluginModulePaths, ensureFileExists, ensureHookLogDir, ensureParentDir, getPluginDisplayName, HOOKS_CONFIG_DIRECTORY_NAME, isChatWorkspacePath, isPluginModulePath, type ResolveCronSpecsDirOptions, type ResolveTaskSpecsDirOptions, RULES_CONFIG_DIRECTORY_NAME, resolveAgentConfigSearchPaths, resolveAgentsConfigDirPath, resolveChatWorkspacePath, resolveClineDataDir, resolveClineDir, resolveConfiguredPluginModulePaths, resolveConnectorDataDir, resolveConnectorLogPath, resolveConnectorSettingsPath, resolveConnectorsDbPath, resolveCronDbPath, resolveCronEventsDir, resolveCronReportsDir, resolveCronSpecsDir, resolveDbDataDir, resolveDocumentsClineDirectoryPath, resolveDocumentsExtensionPath, resolveGlobalAgentsRulesPath, resolveGlobalCronSpecsDir, resolveGlobalSettingsPath, resolveGlobalTaskSpecsDir, resolveHooksConfigSearchPaths, resolveMcpSettingsPath, resolvePluginConfigSearchPaths, resolvePluginModuleEntries, resolveProviderSettingsPath, resolveRulesConfigSearchPaths, resolveSessionDataDir, resolveSkillsConfigSearchPaths, resolveTaskSpecsDir, resolveTasksDbPath, resolveTeamDataDir, resolveWorkflowsConfigSearchPaths, resolveWorkspaceCronSpecsDir, resolveWorkspaceTaskSpecsDir, SKILLS_CONFIG_DIRECTORY_NAME, setClineDir, setClineDirIfUnset, setHomeDir, setHomeDirIfUnset, type TaskSpecsScope, WORKFLOWS_CONFIG_DIRECTORY_NAME, } from "./paths";
2
+ export { AGENT_CONFIG_DIRECTORY_NAME, AGENT_PLUGIN_MANIFEST_FILE_NAME, AGENTS_RULES_FILE_NAME, CLINE_CHAT_WORKSPACE_DIRECTORY_NAME, CLINE_CONNECTOR_SETTINGS_FILE_NAME, CLINE_MCP_SETTINGS_FILE_NAME, CLINE_WORKSPACES_DIRECTORY_NAME, type CronSpecsScope, discoverPluginModulePaths, ensureFileExists, ensureHookLogDir, ensureParentDir, getPluginDisplayName, HOOKS_CONFIG_DIRECTORY_NAME, isAgentPluginDirectory, isChatWorkspacePath, isPluginModulePath, type ResolveCronSpecsDirOptions, type ResolveTaskSpecsDirOptions, RULES_CONFIG_DIRECTORY_NAME, resolveAgentConfigSearchPaths, resolveAgentPluginSearchPaths, resolveAgentSchedulesDir, resolveAgentsConfigDirPath, resolveChatWorkspacePath, resolveClineDataDir, resolveClineDir, resolveConfiguredPluginModulePaths, resolveConnectorDataDir, resolveConnectorLogPath, resolveConnectorSettingsPath, resolveConnectorsDbPath, resolveCronDbPath, resolveCronEventsDir, resolveCronReportsDir, resolveCronSpecsDir, resolveDbDataDir, resolveDocumentsClineDirectoryPath, resolveDocumentsExtensionPath, resolveGlobalAgentsRulesPath, resolveGlobalCronSpecsDir, resolveGlobalSettingsPath, resolveGlobalTaskSpecsDir, resolveHooksConfigSearchPaths, resolveMcpSettingsPath, resolvePluginConfigSearchPaths, resolvePluginModuleEntries, resolveProviderSettingsPath, resolveRulesConfigSearchPaths, resolveSessionDataDir, resolveSkillsConfigSearchPaths, resolveTaskSpecsDir, resolveTasksDbPath, resolveTeamDataDir, resolveWorkflowsConfigSearchPaths, resolveWorkspaceCronSpecsDir, resolveWorkspaceTaskSpecsDir, SKILLS_CONFIG_DIRECTORY_NAME, setClineDir, setClineDirIfUnset, setHomeDir, setHomeDirIfUnset, type TaskSpecsScope, WORKFLOWS_CONFIG_DIRECTORY_NAME, } from "./paths";
@@ -1 +1 @@
1
- var MC=Object.defineProperty;var FC=(C)=>C;function WC(C,S){this[C]=FC.bind(null,S)}var DS=(C,S)=>{for(var T in S)MC(C,T,{get:S[T],enumerable:!0,configurable:!0,set:WC.bind(S,T)})};import{existsSync as K,readdirSync as YC}from"node:fs";import{basename as s,dirname as o,join as p}from"node:path";var KC=/[\u00A0\u2000-\u200A\u202F\u205F\u3000]/g,qC=" ";function l(C){return C.normalize("NFC").replace(KC," ")}function QC(C){let S=s(C),T=S.replace(/ (AM|PM)\./gi,`${qC}$1.`);return T===S?C:p(o(C),T)}function ZC(C){return C.normalize("NFD")}function d(C){return C.replace(/'/g,"’")}function $C(C){let S=o(C),T=l(s(C));try{for(let G of YC(S))if(l(G)===T)return p(S,G)}catch{}return}function AC(C){if(K(C))return C;let S=QC(C);if(S!==C&&K(S))return S;let T=ZC(C);if(T!==C&&K(T))return T;let G=d(C);if(G!==C&&K(G))return G;let _=d(T);if(_!==T&&_!==G&&K(_))return _;return $C(C)}import{appendFileSync as RC,existsSync as I,mkdirSync as V,readdirSync as BC,readFileSync as h,statSync as q}from"node:fs";import{homedir as XC}from"node:os";import{basename as jC,dirname as U,extname as UC,isAbsolute as HC,join as E,relative as zC,resolve as M}from"node:path";var $="workspaces",A="chat";function P(C){let S=C.trim(),T=/^[A-Za-z]:[\\/]/.test(S)||S.startsWith("\\\\"),G=S.startsWith("/");if(!T&&!G)return!1;let _=S.split(T?/[\\/]+/:/\/+/).filter(Boolean),O=_.at(-1)??"",v=_.at(-2)??"",L=_.at(-3)??"";return(_.at(-4)??"")===".cline"&&L==="data"&&v==="workspaces"&&O==="chat"}var x=".clinerules",H=".cline",u=".agents",y="agents",R="hooks",X="skills",b="rules",B="workflows",c="plugins",w="AGENTS.md";function gC(){return E(D(),$,A)}var n="cline_mcp_settings.json",r="settings.json";function bC(){let C=process?.env?.HOME?.trim();if(C&&C!=="~")return C;let S=process?.env?.USERPROFILE?.trim();if(S)return S;let T=process?.env?.HOMEDRIVE?.trim(),G=process?.env?.HOMEPATH?.trim();if(T&&G)return`${T}${G}`;let _=XC().trim();if(_&&_!=="~")return _;return"~"}var F=bC(),i=!1;function JC(C){let S=C.trim();if(!S)return;F=S,i=!0}function VC(C){if(i)return;let S=C.trim();if(!S)return;F=S}var j,e=!1;function xC(C){let S=C.trim();if(!S)return;j=S,e=!0}function uC(C){if(e)return;let S=C.trim();if(!S)return;j=S}function N(){if(j)return j;let C=process.env.CLINE_DIR?.trim();if(C)return C;return E(F,".cline")}function t(){return E(F,"Documents","Cline")}function Z(C){return E(t(),C)}function D(){let C=process.env.CLINE_DATA_DIR?.trim();if(C)return C;return E(N(),"data")}function yC(){let C=process.env.CLINE_SESSION_DATA_DIR?.trim();if(C)return C;return E(D(),"sessions")}function wC(){let C=process.env.CLINE_TEAM_DATA_DIR?.trim();if(C)return C;return E(D(),"teams")}function a(){let C=process.env.CLINE_CONNECTOR_DATA_DIR?.trim();if(C)return C;return E(D(),"connectors")}function kC(C,S){let T=C.replace(/[^a-zA-Z0-9._-]+/g,"_"),G=S.replace(/[^a-zA-Z0-9._-]+/g,"_");return E(D(),"logs","connectors",T,`${G}.log`)}function mC(){let C=process.env.CLINE_CONNECTOR_SETTINGS_PATH?.trim();if(C)return C;return E(a(),r)}function z(){let C=process.env.CLINE_DB_DATA_DIR?.trim();if(C)return C;return E(D(),"db")}function fC(){let C=process.env.CLINE_CONNECTORS_DB_PATH?.trim();if(C)return C;return E(z(),"connectors.db")}function lC(){let C=process.env.CLINE_CRON_DB_PATH?.trim();if(C)return C;return E(z(),"cron.db")}function dC(){let C=process.env.CLINE_TASKS_DB_PATH?.trim();if(C)return C;return E(z(),"tasks.db")}function CC(){return E(N(),"tasks")}function SC(C){let S=C.trim();if(!S)throw Error("workspaceRoot is required for workspace task scope");return E(S,".cline","tasks")}function sC(C){let S=C.taskSpecsDir?.trim();if(S)return S;if(C.scope==="workspace")return SC(C.workspaceRoot??"");return CC()}function TC(){return E(N(),"cron")}function J(C){return E(C,".cline","cron")}function k(C){if(typeof C==="string")return J(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 J(S)}return TC()}function oC(C){return E(k(C),"reports")}function pC(C){return E(k(C),"events")}function PC(){let C=process.env.CLINE_PROVIDER_SETTINGS_PATH?.trim();if(C)return C;return E(D(),"settings","providers.json")}function cC(){let C=process.env.CLINE_GLOBAL_SETTINGS_PATH?.trim();if(C)return C;return E(D(),"settings","global-settings.json")}function hC(){let C=process.env.CLINE_MCP_SETTINGS_PATH?.trim();if(C)return C;return E(D(),"settings",n)}function W(C){let S=new Set,T=[];for(let G of C){if(!G||S.has(G))continue;S.add(G),T.push(G)}return T}function nC(C){if(!C)return[];return[x,H,u].map((S)=>E(C,S,X))}function EC(){return E(N(),y)}function rC(C){return W([C?E(C,H,y):"",EC()])}function iC(C){let S=[Z("Hooks"),E(N(),R)];if(C)S.push(E(C,x,R),E(C,H,R));return W(S)}function eC(C){return W([...nC(C),E(N(),X),E(F,u,X)])}function _C(){return E(F,u,w)}function tC(C){let S=C?[E(C,x),E(C,H,b)]:[],T=C?[E(C,w)]:[];return W([...T,...S,_C(),E(N(),b),Z("Rules")])}function aC(C){return W([C?E(C,".clinerules",B):"",Z("Workflows"),E(N(),B),C?E(C,".cline",B):""])}function CS(C){return W([C?E(C,".cline",c):"",E(N(),c),Z("Plugins")])}var GC=new Set([".js",".ts"]),m="package.json",SS=["index.ts","index.js"];function Q(C){let S=C.lastIndexOf(".");if(S===-1)return!1;return GC.has(C.slice(S))}function OC(C){try{let S=JSON.parse(h(C,"utf8"));if(!S.cline||typeof S.cline!=="object")return null;return S.cline}catch{return null}}function IC(C){let S=C?.plugins;if(!Array.isArray(S))return[];return S.flatMap((T)=>T.paths??[])}function DC(C){let S=M(C);if(!I(S)||!q(S).isDirectory())return null;let T=E(S,m);if(I(T)){let G=OC(T),_=IC(G).map((O)=>M(S,O)).filter((O)=>I(O)&&q(O).isFile()&&Q(O));if(_.length>0)return _}for(let G of SS){let _=E(S,G);if(I(_)&&q(_).isFile())return[_]}return null}function TS(C){try{let S=JSON.parse(h(C,"utf8"));return typeof S.name==="string"&&S.name.trim()?S.name.trim():void 0}catch{return}}function ES(C,S){let T=zC(M(C),M(S));return T===""||!T.startsWith("..")&&!HC(T)}function _S(C,S){let T=U(C),G=M(S);while(ES(G,T)){let _=E(T,m);if(I(_)){let v=TS(_);if(v)return v;break}let O=M(T,"..");if(O===T)break;T=O}return jC(C,UC(C))}function vC(C){let S=M(C);if(!I(S))return[];let T=[],G=[S];while(G.length>0){let _=G.pop();if(!_)continue;let O;try{O=BC(_,{withFileTypes:!0})}catch{continue}for(let v of O){let L=E(_,v.name);if(v.isDirectory()){let g=E(L,m);if(I(g)){let NC=OC(g),f=IC(NC).map((Y)=>M(L,Y)).filter((Y)=>I(Y)&&q(Y).isFile()&&Q(Y));if(f.length>0){T.push(...f);continue}}G.push(L);continue}if(v.name.startsWith("."))continue;if(v.isFile()&&Q(L))T.push(L)}}return T.sort((_,O)=>_.localeCompare(O))}function GS(C,S){let T=[];for(let G of C){let _=G.trim();if(!_)continue;let O=M(S,_);if(!I(O))throw Error(`Plugin path does not exist: ${O}`);if(q(O).isDirectory()){let L=DC(O);if(L){T.push(...L);continue}T.push(...vC(O));continue}if(!Q(O))throw Error(`Plugin file must use a supported extension (${[...GC].join(", ")}): ${O}`);T.push(O)}return T}function LC(C){let S=U(C);if(!I(S))V(S,{recursive:!0})}function OS(C){V(U(C),{recursive:!0}),RC(C,"")}function IS(C){if(C?.trim())return LC(C),U(C);let S=E(D(),"logs");if(!I(S))V(S,{recursive:!0});return S}export{VC as setHomeDirIfUnset,JC as setHomeDir,uC as setClineDirIfUnset,xC as setClineDir,SC as resolveWorkspaceTaskSpecsDir,J as resolveWorkspaceCronSpecsDir,aC as resolveWorkflowsConfigSearchPaths,wC as resolveTeamDataDir,dC as resolveTasksDbPath,sC as resolveTaskSpecsDir,eC as resolveSkillsConfigSearchPaths,yC as resolveSessionDataDir,tC as resolveRulesConfigSearchPaths,PC as resolveProviderSettingsPath,DC as resolvePluginModuleEntries,CS as resolvePluginConfigSearchPaths,hC as resolveMcpSettingsPath,iC as resolveHooksConfigSearchPaths,CC as resolveGlobalTaskSpecsDir,cC as resolveGlobalSettingsPath,TC as resolveGlobalCronSpecsDir,_C as resolveGlobalAgentsRulesPath,AC as resolveExistingFilePath,Z as resolveDocumentsExtensionPath,t as resolveDocumentsClineDirectoryPath,z as resolveDbDataDir,k as resolveCronSpecsDir,oC as resolveCronReportsDir,pC as resolveCronEventsDir,lC as resolveCronDbPath,fC as resolveConnectorsDbPath,mC as resolveConnectorSettingsPath,kC as resolveConnectorLogPath,a as resolveConnectorDataDir,GS as resolveConfiguredPluginModulePaths,N as resolveClineDir,D as resolveClineDataDir,gC as resolveChatWorkspacePath,EC as resolveAgentsConfigDirPath,rC as resolveAgentConfigSearchPaths,Q as isPluginModulePath,P as isChatWorkspacePath,_S as getPluginDisplayName,LC as ensureParentDir,IS as ensureHookLogDir,OS as ensureFileExists,vC as discoverPluginModulePaths,B as WORKFLOWS_CONFIG_DIRECTORY_NAME,X as SKILLS_CONFIG_DIRECTORY_NAME,b as RULES_CONFIG_DIRECTORY_NAME,R as HOOKS_CONFIG_DIRECTORY_NAME,$ as CLINE_WORKSPACES_DIRECTORY_NAME,n as CLINE_MCP_SETTINGS_FILE_NAME,r as CLINE_CONNECTOR_SETTINGS_FILE_NAME,A as CLINE_CHAT_WORKSPACE_DIRECTORY_NAME,y as AGENT_CONFIG_DIRECTORY_NAME,w as AGENTS_RULES_FILE_NAME};
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};
@@ -6,6 +6,20 @@ export declare const RULES_CONFIG_DIRECTORY_NAME = "rules";
6
6
  export declare const WORKFLOWS_CONFIG_DIRECTORY_NAME = "workflows";
7
7
  export declare const PLUGINS_DIRECTORY_NAME = "plugins";
8
8
  export declare const AGENTS_RULES_FILE_NAME = "AGENTS.md";
9
+ /**
10
+ * Manifest that marks a directory as an Agent Plugin (agent-plugins.org).
11
+ * Per the specification a plugin MUST carry this file at its root, which makes
12
+ * it the discriminator between the two package lanes:
13
+ *
14
+ * - Agent plugin -> `<root>/plugin.json`, discovered under `.agents/plugins`
15
+ * - Cline plugin -> a JS/TS module, discovered under `.cline/plugins`
16
+ *
17
+ * Cline plugin discovery treats it as a hard stop: a directory carrying this
18
+ * file is never scanned for Cline plugin modules, so a plugin authored for
19
+ * another client and dropped into a Cline plugin root cannot have its skill
20
+ * scripts or another vendor's extension directory imported as Cline code.
21
+ */
22
+ export declare const AGENT_PLUGIN_MANIFEST_FILE_NAME = "plugin.json";
9
23
  /**
10
24
  * Shared workspace for all sessions started without a `cwd`/`workspaceRoot`.
11
25
  * Lives under the cline data dir (not `os.tmpdir()`) so OS temp reapers never
@@ -58,6 +72,13 @@ export interface ResolveTaskSpecsDirOptions {
58
72
  /** Required for workspace-scoped task specs. */
59
73
  workspaceRoot?: string;
60
74
  }
75
+ /**
76
+ * Home workspace for agent-created schedules: `~/.cline/schedules/`.
77
+ * Agent-created schedules are user-level routines, so they anchor here (and
78
+ * their unattended sessions run here) instead of inheriting whichever chat
79
+ * workspace happened to create them.
80
+ */
81
+ export declare function resolveAgentSchedulesDir(): string;
61
82
  /** Global file-backed agenda tasks: `~/.cline/tasks/`. */
62
83
  export declare function resolveGlobalTaskSpecsDir(): string;
63
84
  /** Workspace file-backed agenda tasks: `<workspace>/.cline/tasks/`. */
@@ -117,6 +138,25 @@ export declare function resolveGlobalAgentsRulesPath(): string;
117
138
  export declare function resolveRulesConfigSearchPaths(workspacePath?: string): string[];
118
139
  export declare function resolveWorkflowsConfigSearchPaths(workspacePath?: string): string[];
119
140
  export declare function resolvePluginConfigSearchPaths(workspacePath?: string): string[];
141
+ /**
142
+ * Roots searched for Agent Plugins (agent-plugins.org). Kept separate from
143
+ * {@link resolvePluginConfigSearchPaths} so the two package lanes never share a
144
+ * directory: `.agents/plugins` is the vendor-neutral location, matching the
145
+ * `.agents/skills` convention already honored by skill discovery.
146
+ *
147
+ * Discovery roots are explicitly client-defined by the specification, so these
148
+ * are our choice rather than a conformance requirement.
149
+ */
150
+ export declare function resolveAgentPluginSearchPaths(workspacePath?: string): string[];
151
+ /**
152
+ * True when `directoryPath` carries an Agent Plugin manifest at its root.
153
+ *
154
+ * Only the manifest's presence is checked here. Validating its contents
155
+ * (`$schema`, `name`, the closed field set) belongs to the Agent Plugin loader;
156
+ * discovery only needs to know that this directory belongs to the other lane
157
+ * and must not be scanned for Cline plugin modules.
158
+ */
159
+ export declare function isAgentPluginDirectory(directoryPath: string): boolean;
120
160
  export declare function isPluginModulePath(path: string): boolean;
121
161
  export declare function resolvePluginModuleEntries(directoryPath: string): string[] | null;
122
162
  /**
@@ -20,7 +20,7 @@ export declare const TeamSpawnTeammateInputSchema: z.ZodObject<{
20
20
  }, z.core.$strict>;
21
21
  export declare const TeamShutdownTeammateInputSchema: z.ZodObject<{
22
22
  agentId: z.ZodString;
23
- reason: z.ZodPreprocess<z.ZodOptional<z.ZodString>>;
23
+ reason: z.ZodPreprocess<z.ZodOptional<z.ZodString>, unknown>;
24
24
  }, z.core.$strip>;
25
25
  export declare const TeamStatusInputSchema: z.ZodObject<{}, z.core.$strip>;
26
26
  type TeamTaskAction = "create" | "list" | "claim" | "complete" | "block";
@@ -33,29 +33,29 @@ export declare const TeamTaskInputSchema: z.ZodObject<{
33
33
  complete: "complete";
34
34
  block: "block";
35
35
  }>;
36
- title: z.ZodPreprocess<z.ZodOptional<z.ZodString>>;
37
- description: z.ZodPreprocess<z.ZodOptional<z.ZodString>>;
38
- dependsOn: z.ZodPreprocess<z.ZodOptional<z.ZodArray<z.ZodString>>>;
39
- assignee: z.ZodPreprocess<z.ZodOptional<z.ZodString>>;
36
+ title: z.ZodPreprocess<z.ZodOptional<z.ZodString>, unknown>;
37
+ description: z.ZodPreprocess<z.ZodOptional<z.ZodString>, unknown>;
38
+ dependsOn: z.ZodPreprocess<z.ZodOptional<z.ZodArray<z.ZodString>>, unknown>;
39
+ assignee: z.ZodPreprocess<z.ZodOptional<z.ZodString>, unknown>;
40
40
  status: z.ZodPreprocess<z.ZodOptional<z.ZodEnum<{
41
41
  completed: "completed";
42
42
  in_progress: "in_progress";
43
43
  pending: "pending";
44
44
  blocked: "blocked";
45
- }>>>;
46
- taskId: z.ZodPreprocess<z.ZodOptional<z.ZodString>>;
47
- summary: z.ZodPreprocess<z.ZodOptional<z.ZodString>>;
48
- reason: z.ZodPreprocess<z.ZodOptional<z.ZodString>>;
45
+ }>>, unknown>;
46
+ taskId: z.ZodPreprocess<z.ZodOptional<z.ZodString>, unknown>;
47
+ summary: z.ZodPreprocess<z.ZodOptional<z.ZodString>, unknown>;
48
+ reason: z.ZodPreprocess<z.ZodOptional<z.ZodString>, unknown>;
49
49
  }, z.core.$strip>;
50
50
  export declare const TeamRunTaskInputSchema: z.ZodObject<{
51
51
  agentId: z.ZodString;
52
52
  task: z.ZodString;
53
- taskId: z.ZodPreprocess<z.ZodOptional<z.ZodString>>;
53
+ taskId: z.ZodPreprocess<z.ZodOptional<z.ZodString>, unknown>;
54
54
  runMode: z.ZodPreprocess<z.ZodOptional<z.ZodEnum<{
55
55
  sync: "sync";
56
56
  async: "async";
57
- }>>>;
58
- continueConversation: z.ZodPreprocess<z.ZodOptional<z.ZodBoolean>>;
57
+ }>>, unknown>;
58
+ continueConversation: z.ZodPreprocess<z.ZodOptional<z.ZodBoolean>, unknown>;
59
59
  }, z.core.$strip>;
60
60
  export declare const TeamListRunsInputSchema: z.ZodObject<{
61
61
  status: z.ZodPreprocess<z.ZodOptional<z.ZodEnum<{
@@ -65,30 +65,30 @@ export declare const TeamListRunsInputSchema: z.ZodObject<{
65
65
  cancelled: "cancelled";
66
66
  interrupted: "interrupted";
67
67
  queued: "queued";
68
- }>>>;
69
- agentId: z.ZodPreprocess<z.ZodOptional<z.ZodString>>;
70
- includeCompleted: z.ZodPreprocess<z.ZodOptional<z.ZodBoolean>>;
68
+ }>>, unknown>;
69
+ agentId: z.ZodPreprocess<z.ZodOptional<z.ZodString>, unknown>;
70
+ includeCompleted: z.ZodPreprocess<z.ZodOptional<z.ZodBoolean>, unknown>;
71
71
  }, z.core.$strip>;
72
72
  export declare const TeamCancelRunInputSchema: z.ZodObject<{
73
73
  runId: z.ZodString;
74
- reason: z.ZodPreprocess<z.ZodOptional<z.ZodString>>;
74
+ reason: z.ZodPreprocess<z.ZodOptional<z.ZodString>, unknown>;
75
75
  }, z.core.$strip>;
76
76
  export declare const TeamAwaitRunsInputSchema: z.ZodObject<{
77
- runId: z.ZodPreprocess<z.ZodOptional<z.ZodString>>;
77
+ runId: z.ZodPreprocess<z.ZodOptional<z.ZodString>, unknown>;
78
78
  }, z.core.$strict>;
79
79
  export declare const TeamSendMessageInputSchema: z.ZodObject<{
80
80
  toAgentId: z.ZodString;
81
81
  subject: z.ZodString;
82
82
  body: z.ZodString;
83
- taskId: z.ZodPreprocess<z.ZodOptional<z.ZodString>>;
83
+ taskId: z.ZodPreprocess<z.ZodOptional<z.ZodString>, unknown>;
84
84
  }, z.core.$strip>;
85
85
  export declare const TeamBroadcastInputSchema: z.ZodObject<{
86
86
  subject: z.ZodString;
87
87
  body: z.ZodString;
88
- taskId: z.ZodPreprocess<z.ZodOptional<z.ZodString>>;
88
+ taskId: z.ZodPreprocess<z.ZodOptional<z.ZodString>, unknown>;
89
89
  }, z.core.$strip>;
90
90
  export declare const TeamReadMailboxInputSchema: z.ZodObject<{
91
- unreadOnly: z.ZodPreprocess<z.ZodOptional<z.ZodBoolean>>;
91
+ unreadOnly: z.ZodPreprocess<z.ZodOptional<z.ZodBoolean>, unknown>;
92
92
  }, z.core.$strip>;
93
93
  export declare const TeamMissionLogInputSchema: z.ZodObject<{
94
94
  kind: z.ZodEnum<{
@@ -100,9 +100,9 @@ export declare const TeamMissionLogInputSchema: z.ZodObject<{
100
100
  decision: "decision";
101
101
  }>;
102
102
  summary: z.ZodString;
103
- taskId: z.ZodPreprocess<z.ZodOptional<z.ZodString>>;
104
- evidence: z.ZodPreprocess<z.ZodOptional<z.ZodArray<z.ZodString>>>;
105
- nextAction: z.ZodPreprocess<z.ZodOptional<z.ZodString>>;
103
+ taskId: z.ZodPreprocess<z.ZodOptional<z.ZodString>, unknown>;
104
+ evidence: z.ZodPreprocess<z.ZodOptional<z.ZodArray<z.ZodString>>, unknown>;
105
+ nextAction: z.ZodPreprocess<z.ZodOptional<z.ZodString>, unknown>;
106
106
  }, z.core.$strip>;
107
107
  export declare const TeamCleanupInputSchema: z.ZodObject<{}, z.core.$strip>;
108
108
  export declare const TeamCreateOutcomeInputSchema: z.ZodObject<{
@@ -112,7 +112,7 @@ export declare const TeamCreateOutcomeInputSchema: z.ZodObject<{
112
112
  export declare const TeamAttachOutcomeFragmentInputSchema: z.ZodObject<{
113
113
  outcomeId: z.ZodString;
114
114
  section: z.ZodString;
115
- sourceRunId: z.ZodPreprocess<z.ZodOptional<z.ZodString>>;
115
+ sourceRunId: z.ZodPreprocess<z.ZodOptional<z.ZodString>, unknown>;
116
116
  content: z.ZodString;
117
117
  }, z.core.$strip>;
118
118
  export declare const TeamReviewOutcomeFragmentInputSchema: z.ZodObject<{
@@ -184,8 +184,8 @@ export declare const TeamTaskListItemToolResultSchema: z.ZodObject<{
184
184
  pending: "pending";
185
185
  blocked: "blocked";
186
186
  }>;
187
- createdAt: z.ZodPreprocess<z.ZodString>;
188
- updatedAt: z.ZodPreprocess<z.ZodString>;
187
+ createdAt: z.ZodPreprocess<z.ZodString, unknown>;
188
+ updatedAt: z.ZodPreprocess<z.ZodString, unknown>;
189
189
  createdBy: z.ZodString;
190
190
  assignee: z.ZodOptional<z.ZodString>;
191
191
  dependsOn: z.ZodArray<z.ZodString>;
@@ -216,8 +216,8 @@ export declare const TeamTaskToolResultSchema: z.ZodDiscriminatedUnion<[z.ZodObj
216
216
  pending: "pending";
217
217
  blocked: "blocked";
218
218
  }>;
219
- createdAt: z.ZodPreprocess<z.ZodString>;
220
- updatedAt: z.ZodPreprocess<z.ZodString>;
219
+ createdAt: z.ZodPreprocess<z.ZodString, unknown>;
220
+ updatedAt: z.ZodPreprocess<z.ZodString, unknown>;
221
221
  createdBy: z.ZodString;
222
222
  assignee: z.ZodOptional<z.ZodString>;
223
223
  dependsOn: z.ZodArray<z.ZodString>;
@@ -302,13 +302,13 @@ export declare const TeamRunToolSummarySchema: z.ZodObject<{
302
302
  priority: z.ZodNumber;
303
303
  retryCount: z.ZodNumber;
304
304
  maxRetries: z.ZodNumber;
305
- nextAttemptAt: z.ZodOptional<z.ZodPreprocess<z.ZodString>>;
305
+ nextAttemptAt: z.ZodOptional<z.ZodPreprocess<z.ZodString, unknown>>;
306
306
  continueConversation: z.ZodOptional<z.ZodBoolean>;
307
- startedAt: z.ZodPreprocess<z.ZodString>;
308
- endedAt: z.ZodOptional<z.ZodPreprocess<z.ZodString>>;
307
+ startedAt: z.ZodPreprocess<z.ZodString, unknown>;
308
+ endedAt: z.ZodOptional<z.ZodPreprocess<z.ZodString, unknown>>;
309
309
  leaseOwner: z.ZodOptional<z.ZodString>;
310
- heartbeatAt: z.ZodOptional<z.ZodPreprocess<z.ZodString>>;
311
- lastProgressAt: z.ZodOptional<z.ZodPreprocess<z.ZodString>>;
310
+ heartbeatAt: z.ZodOptional<z.ZodPreprocess<z.ZodString, unknown>>;
311
+ lastProgressAt: z.ZodOptional<z.ZodPreprocess<z.ZodString, unknown>>;
312
312
  lastProgressMessage: z.ZodOptional<z.ZodString>;
313
313
  currentActivity: z.ZodOptional<z.ZodString>;
314
314
  error: z.ZodOptional<z.ZodString>;
@@ -334,8 +334,8 @@ export declare const TeamMailboxMessageToolResultSchema: z.ZodObject<{
334
334
  subject: z.ZodString;
335
335
  body: z.ZodString;
336
336
  taskId: z.ZodOptional<z.ZodString>;
337
- sentAt: z.ZodPreprocess<z.ZodString>;
338
- readAt: z.ZodOptional<z.ZodPreprocess<z.ZodString>>;
337
+ sentAt: z.ZodPreprocess<z.ZodString, unknown>;
338
+ readAt: z.ZodOptional<z.ZodPreprocess<z.ZodString, unknown>>;
339
339
  }, z.core.$strip>;
340
340
  export declare const TeamOutcomeToolResultSchema: z.ZodObject<{
341
341
  id: z.ZodString;
@@ -348,8 +348,8 @@ export declare const TeamOutcomeToolResultSchema: z.ZodObject<{
348
348
  }>;
349
349
  requiredSections: z.ZodArray<z.ZodString>;
350
350
  createdBy: z.ZodString;
351
- createdAt: z.ZodPreprocess<z.ZodString>;
352
- finalizedAt: z.ZodOptional<z.ZodPreprocess<z.ZodString>>;
351
+ createdAt: z.ZodPreprocess<z.ZodString, unknown>;
352
+ finalizedAt: z.ZodOptional<z.ZodPreprocess<z.ZodString, unknown>>;
353
353
  }, z.core.$strip>;
354
354
  export declare const TeamCreateOutcomeToolResultSchema: z.ZodObject<{
355
355
  outcomeId: z.ZodString;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cline/shared",
3
- "version": "0.0.81",
3
+ "version": "0.0.82",
4
4
  "description": "Shared utilities, types, and schemas for Cline packages",
5
5
  "repository": {
6
6
  "type": "git",