@cline/core 0.0.39 → 0.0.40-nightly.1778642379

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.
Files changed (34) hide show
  1. package/README.md +2 -0
  2. package/dist/extensions/context/compaction-shared.d.ts +6 -5
  3. package/dist/extensions/mcp/client.d.ts +8 -1
  4. package/dist/extensions/mcp/config-loader.d.ts +11 -1
  5. package/dist/extensions/mcp/index.d.ts +6 -3
  6. package/dist/extensions/mcp/oauth.d.ts +48 -0
  7. package/dist/extensions/mcp/types.d.ts +17 -0
  8. package/dist/extensions/plugin-sandbox-bootstrap.js +1 -1
  9. package/dist/hub/daemon/entry.js +201 -199
  10. package/dist/hub/index.js +200 -198
  11. package/dist/hub/runtime-host/hub-runtime-host.d.ts +3 -1
  12. package/dist/hub/server/browser-websocket.d.ts +3 -1
  13. package/dist/hub/server/handlers/context.d.ts +2 -1
  14. package/dist/hub/server/hub-server-transport.d.ts +3 -0
  15. package/dist/index.d.ts +3 -3
  16. package/dist/index.js +201 -199
  17. package/dist/runtime/config/agent-runtime-config-builder.d.ts +2 -9
  18. package/dist/runtime/host/history.d.ts +1 -0
  19. package/dist/runtime/host/runtime-host.d.ts +3 -1
  20. package/dist/runtime/turn-queue/pending-prompt-service.d.ts +6 -1
  21. package/dist/services/llms/handler-factory.d.ts +2 -2
  22. package/dist/services/llms/provider-settings.d.ts +1 -0
  23. package/dist/services/providers/local-provider-registry.d.ts +3 -0
  24. package/dist/services/providers/local-provider-service.d.ts +4 -2
  25. package/dist/services/telemetry/core-events.d.ts +4 -1
  26. package/dist/services/telemetry/index.js +1 -1
  27. package/dist/session/services/file-session-service.d.ts +2 -0
  28. package/dist/session/services/persistence-service.d.ts +2 -1
  29. package/dist/session/services/session-service.d.ts +2 -0
  30. package/dist/session/stores/session-manifest-store.d.ts +3 -1
  31. package/dist/settings/types.d.ts +3 -2
  32. package/dist/types/config.d.ts +2 -2
  33. package/dist/types/session.d.ts +2 -1
  34. package/package.json +9 -8
package/README.md CHANGED
@@ -93,6 +93,8 @@ primitive vocabulary.
93
93
  The package also exports storage and settings helpers such as:
94
94
 
95
95
  - `ProviderSettingsManager`
96
+ - `CoreSettingsService` and `createCoreSettingsService`
97
+ - MCP settings helpers such as `setMcpServerDisabled`
96
98
  - `SqliteTeamStore`
97
99
  - SQLite-backed local session stores and artifacts through `@cline/core`
98
100
 
@@ -1,9 +1,10 @@
1
1
  import type { ToolResultContent } from "@cline/llms";
2
- import type { MessageWithMetadata } from "@cline/shared";
2
+ import { estimateTokens, type MessageWithMetadata } from "@cline/shared";
3
+ export { estimateTokens };
3
4
  import type { CoreCompactionContext, CoreCompactionSummarizerConfig } from "../../types/config";
4
5
  import type { ProviderConfig } from "../../types/provider-settings";
5
- export declare const DEFAULT_CONTEXT_WINDOW_TOKENS = 200000;
6
- export declare const DEFAULT_THRESHOLD_RATIO = 0.95;
6
+ export declare const DEFAULT_MAX_INPUT_TOKENS = 200000;
7
+ export declare const DEFAULT_THRESHOLD_RATIO = 0.9;
7
8
  export declare const DEFAULT_RESERVE_TOKENS = 16384;
8
9
  export declare const DEFAULT_PRESERVE_RECENT_TOKENS = 20000;
9
10
  export declare const DEFAULT_SUMMARY_MAX_OUTPUT_TOKENS = 1024;
@@ -22,9 +23,9 @@ export interface CompactionSummaryMetadata {
22
23
  generatedAt: number;
23
24
  }
24
25
  export type EstimateMessageTokens = (message: MessageWithMetadata) => number;
25
- export declare function estimateTokens(text: string): number;
26
26
  export declare function truncateText(text: string, limit: number): string;
27
27
  export declare function flattenToolResultContent(content: ToolResultContent["content"]): string;
28
+ export declare function truncateToolResultContentForCompaction(content: ToolResultContent["content"]): ToolResultContent["content"];
28
29
  export declare function formatToolInput(input: Record<string, unknown>): string;
29
30
  export declare function serializeMessage(message: MessageWithMetadata): string;
30
31
  export declare function serializeConversation(messages: MessageWithMetadata[]): string;
@@ -57,4 +58,4 @@ export declare function buildSummaryMessage(options: {
57
58
  fileOps: FileOperationSummary;
58
59
  tokensBefore: number;
59
60
  }): MessageWithMetadata;
60
- export declare function getContextWindowTokens(context: Pick<CoreCompactionContext, "contextWindowTokens">): number;
61
+ export declare function getMaxInputTokens(context: Pick<CoreCompactionContext, "maxInputTokens">): number;
@@ -1,2 +1,9 @@
1
+ import type { FetchLike } from "@modelcontextprotocol/sdk/shared/transport.js";
1
2
  import type { McpServerClientFactory } from "./types";
2
- export declare function createDefaultMcpServerClientFactory(): McpServerClientFactory;
3
+ export interface DefaultMcpServerClientFactoryOptions {
4
+ settingsPath?: string;
5
+ clientName?: string;
6
+ clientVersion?: string;
7
+ fetch?: FetchLike;
8
+ }
9
+ export declare function createDefaultMcpServerClientFactory(options?: DefaultMcpServerClientFactoryOptions): McpServerClientFactory;
@@ -1,4 +1,4 @@
1
- import type { McpManager, McpServerRegistration } from "./types";
1
+ import type { McpManager, McpServerOAuthState, McpServerOAuthStatus, McpServerRegistration } from "./types";
2
2
  export interface McpSettingsFile {
3
3
  mcpServers: Record<string, Omit<McpServerRegistration, "name">>;
4
4
  }
@@ -8,8 +8,18 @@ export interface LoadMcpSettingsOptions {
8
8
  export interface RegisterMcpServersFromSettingsOptions {
9
9
  filePath?: string;
10
10
  }
11
+ export interface SetMcpServerDisabledOptions {
12
+ filePath?: string;
13
+ name: string;
14
+ disabled: boolean;
15
+ }
11
16
  export declare function resolveDefaultMcpSettingsPath(): string;
12
17
  export declare function loadMcpSettingsFile(options?: LoadMcpSettingsOptions): McpSettingsFile;
18
+ export declare function normalizeMcpServerOAuthState(value: McpServerOAuthState | undefined): McpServerOAuthState | undefined;
13
19
  export declare function hasMcpSettingsFile(options?: LoadMcpSettingsOptions): boolean;
14
20
  export declare function resolveMcpServerRegistrations(options?: LoadMcpSettingsOptions): McpServerRegistration[];
21
+ export declare function setMcpServerDisabled(options: SetMcpServerDisabledOptions): void;
22
+ export declare function getMcpServerOAuthState(serverName: string, options?: LoadMcpSettingsOptions): McpServerOAuthState | undefined;
23
+ export declare function updateMcpServerOAuthState(serverName: string, updater: (current: McpServerOAuthState) => McpServerOAuthState, options?: LoadMcpSettingsOptions): McpServerOAuthState;
24
+ export declare function listMcpServerOAuthStatuses(options?: LoadMcpSettingsOptions): McpServerOAuthStatus[];
15
25
  export declare function registerMcpServersFromSettingsFile(manager: Pick<McpManager, "registerServer">, options?: RegisterMcpServersFromSettingsOptions): Promise<McpServerRegistration[]>;
@@ -1,8 +1,11 @@
1
+ export type { DefaultMcpServerClientFactoryOptions } from "./client";
1
2
  export { createDefaultMcpServerClientFactory } from "./client";
2
- export type { LoadMcpSettingsOptions, McpSettingsFile, RegisterMcpServersFromSettingsOptions, } from "./config-loader";
3
- export { hasMcpSettingsFile, loadMcpSettingsFile, registerMcpServersFromSettingsFile, resolveDefaultMcpSettingsPath, resolveMcpServerRegistrations, } from "./config-loader";
3
+ export type { LoadMcpSettingsOptions, McpSettingsFile, RegisterMcpServersFromSettingsOptions, SetMcpServerDisabledOptions, } from "./config-loader";
4
+ export { getMcpServerOAuthState, hasMcpSettingsFile, listMcpServerOAuthStatuses, loadMcpSettingsFile, registerMcpServersFromSettingsFile, resolveDefaultMcpSettingsPath, resolveMcpServerRegistrations, setMcpServerDisabled, updateMcpServerOAuthState, } from "./config-loader";
4
5
  export { InMemoryMcpManager } from "./manager";
6
+ export type { AuthorizeMcpServerOAuthOptions, AuthorizeMcpServerOAuthResult, CreateMcpOAuthProviderContextOptions, McpOAuthProviderContext, } from "./oauth";
7
+ export { authorizeMcpServerOAuth } from "./oauth";
5
8
  export type { CreateDisabledMcpToolPoliciesOptions, CreateDisabledMcpToolPolicyOptions, } from "./policies";
6
9
  export { createDisabledMcpToolPolicies, createDisabledMcpToolPolicy, } from "./policies";
7
10
  export { createMcpTools } from "./tools";
8
- export type { CreateMcpToolsOptions, McpConnectionStatus, McpManager, McpManagerOptions, McpServerClient, McpServerClientFactory, McpServerRegistration, McpServerSnapshot, McpServerTransportConfig, McpSseTransportConfig, McpStdioTransportConfig, McpStreamableHttpTransportConfig, McpToolCallRequest, McpToolCallResult, McpToolDescriptor, McpToolNameTransform, McpToolProvider, } from "./types";
11
+ export type { CreateMcpToolsOptions, McpConnectionStatus, McpManager, McpManagerOptions, McpServerClient, McpServerClientFactory, McpServerOAuthState, McpServerOAuthStatus, McpServerRegistration, McpServerSnapshot, McpServerTransportConfig, McpSseTransportConfig, McpStdioTransportConfig, McpStreamableHttpTransportConfig, McpToolCallRequest, McpToolCallResult, McpToolDescriptor, McpToolNameTransform, McpToolProvider, } from "./types";
@@ -0,0 +1,48 @@
1
+ import type { OAuthClientProvider } from "@modelcontextprotocol/sdk/client/auth.js";
2
+ import { SSEClientTransport } from "@modelcontextprotocol/sdk/client/sse.js";
3
+ import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js";
4
+ import type { FetchLike } from "@modelcontextprotocol/sdk/shared/transport.js";
5
+ import { type OAuthServerCloseInfo, type OAuthServerListeningInfo } from "../../auth/server";
6
+ import type { McpServerRegistration } from "./types";
7
+ export type McpSdkAuthCapableTransport = SSEClientTransport | StreamableHTTPClientTransport;
8
+ export interface CreateMcpOAuthProviderContextOptions {
9
+ settingsPath?: string;
10
+ serverName: string;
11
+ redirectUrl: string;
12
+ onAuthorizationUrl?: (url: string) => void | Promise<void>;
13
+ }
14
+ export interface McpOAuthProviderContext {
15
+ provider: OAuthClientProvider;
16
+ getLastAuthorizationUrl(): string | undefined;
17
+ getLastOAuthState(): string | undefined;
18
+ resetInteractiveState(): Promise<void>;
19
+ markError(errorMessage: string): Promise<void>;
20
+ clearError(): Promise<void>;
21
+ }
22
+ export interface AuthorizeMcpServerOAuthOptions {
23
+ serverName: string;
24
+ filePath?: string;
25
+ clientName?: string;
26
+ clientVersion?: string;
27
+ fetch?: FetchLike;
28
+ openUrl?: (url: string) => void | Promise<void>;
29
+ callbackHost?: string;
30
+ callbackPorts?: number[];
31
+ callbackPath?: string;
32
+ timeoutMs?: number;
33
+ successHtml?: string;
34
+ onServerListening?: (info: OAuthServerListeningInfo) => void | Promise<void>;
35
+ onServerClose?: (info: OAuthServerCloseInfo) => void | Promise<void>;
36
+ }
37
+ export interface AuthorizeMcpServerOAuthResult {
38
+ serverName: string;
39
+ authorized: true;
40
+ message: string;
41
+ }
42
+ export declare function createMcpOAuthProviderContext(options: CreateMcpOAuthProviderContextOptions): McpOAuthProviderContext;
43
+ export declare function createMcpSdkTransport(input: {
44
+ registration: McpServerRegistration;
45
+ oauthProvider?: OAuthClientProvider;
46
+ fetch?: FetchLike;
47
+ }): McpSdkAuthCapableTransport;
48
+ export declare function authorizeMcpServerOAuth(options: AuthorizeMcpServerOAuthOptions): Promise<AuthorizeMcpServerOAuthResult>;
@@ -46,11 +46,21 @@ export interface McpStreamableHttpTransportConfig {
46
46
  headers?: Record<string, string>;
47
47
  }
48
48
  export type McpServerTransportConfig = McpStdioTransportConfig | McpSseTransportConfig | McpStreamableHttpTransportConfig;
49
+ export interface McpServerOAuthState {
50
+ clientInformation?: Record<string, unknown>;
51
+ tokens?: Record<string, unknown>;
52
+ codeVerifier?: string;
53
+ discoveryState?: Record<string, unknown>;
54
+ redirectUrl?: string;
55
+ lastError?: string;
56
+ lastAuthenticatedAt?: number;
57
+ }
49
58
  export interface McpServerRegistration {
50
59
  name: string;
51
60
  transport: McpServerTransportConfig;
52
61
  disabled?: boolean;
53
62
  metadata?: Record<string, unknown>;
63
+ oauth?: McpServerOAuthState;
54
64
  }
55
65
  export interface McpServerSnapshot {
56
66
  name: string;
@@ -72,6 +82,13 @@ export interface McpServerClient {
72
82
  }): Promise<McpToolCallResult>;
73
83
  }
74
84
  export type McpServerClientFactory = (registration: McpServerRegistration) => Promise<McpServerClient> | McpServerClient;
85
+ export interface McpServerOAuthStatus {
86
+ serverName: string;
87
+ oauthSupported: boolean;
88
+ oauthConfigured: boolean;
89
+ lastError?: string;
90
+ lastAuthenticatedAt?: number;
91
+ }
75
92
  export interface McpManagerOptions {
76
93
  clientFactory: McpServerClientFactory;
77
94
  /**
@@ -1 +1 @@
1
- import{createRequire as GG}from"node:module";var QG=GG(import.meta.url);import{normalizePluginManifest as JG}from"@cline/shared";import{existsSync as L,readFileSync as B}from"node:fs";import{builtinModules as UG,createRequire as m}from"node:module";import{dirname as D,extname as y,isAbsolute as XG,resolve as K}from"node:path";import{fileURLToPath as h}from"node:url";import{PLUGIN_FILE_EXTENSIONS as YG}from"@cline/shared";var d=D(h(import.meta.url)),ZG=m(import.meta.url),$G=K(d,"..","..","..","..",".."),V=WG($G),qG=["@cline/agents","@cline/core","@cline/core/hub","@cline/core/hub/daemon-entry","@cline/core/telemetry","@cline/llms","@cline/llms/browser","@cline/shared","@cline/shared/automation","@cline/shared/browser","@cline/shared/storage","@cline/shared/db","@cline/shared/types"],R=new Set(UG.flatMap((G)=>[G,G.replace(/^node:/,"")])),j=new Set(YG),KG=["development","node","import","require","default"];function WG(G){let Q={},U={"@cline/agents":K(G,"packages/agents/src/index.ts"),"@cline/core":K(G,"packages/core/src/index.ts"),"@cline/llms":K(G,"packages/llms/src/index.ts"),"@cline/shared":K(G,"packages/shared/src/index.ts"),"@cline/shared/storage":K(G,"packages/shared/src/storage/index.ts"),"@cline/shared/db":K(G,"packages/shared/src/db/index.ts")};for(let[Y,X]of Object.entries(U))if(L(X))Q[Y]=X;for(let Y of["agents","core","llms","shared"]){let X=K(G,"packages",Y),q=K(X,"package.json");if(!L(q))continue;try{let Z=JSON.parse(B(q,"utf8"));if(typeof Z.name!=="string"||!Z.exports)continue;if(typeof Z.exports==="string"){let w=K(X,Z.exports);if(L(w))Q[Z.name]=w;continue}if(typeof Z.exports!=="object")continue;for(let[w,A]of Object.entries(Z.exports)){let W=wG(X,A);if(!W)continue;let _=w==="."?Z.name:`${Z.name}/${w.replace(/^\.\//,"")}`;Q[_]=W}}catch{}}return Q}function wG(G,Q){let U=k(Q);if(!U)return null;let Y=u(G,U);for(let X of Y)if(L(X))return X;return null}function k(G,Q=new Set){if(typeof G==="string")return G;if(!G||typeof G!=="object")return null;if(Q.has(G))return null;Q.add(G);let U=G;for(let Y of KG){let X=k(U[Y],Q);if(X)return X}return null}function u(G,Q){let U=Q.replace(/^\.\//,""),Y=[K(G,Q)];if(U.startsWith("dist/")){let X=U.replace(/^dist\//,"src/").replace(/\.(mjs|cjs|js)$/,"");return[K(G,`${X}.ts`),K(G,`${X}.tsx`),K(G,`${X}.mts`),K(G,`${X}.cts`),...Y]}return Y}function _G(G){return Object.fromEntries(Object.entries(G).sort(([Q],[U])=>U.length-Q.length))}function H(G){return!(G.startsWith(".")||G.startsWith("/")||G.startsWith("file:")||G.startsWith("data:")||G.startsWith("http:")||G.startsWith("https:"))}function C(G){if(G.startsWith("@")){let[Q,U]=G.split("/",3);return U?`${Q}/${U}`:G}return G.split("/",1)[0]??G}function LG(G){let Q=C(G);if(G===Q)return".";return`.${G.slice(Q.length)}`}function c(G){return C(G).startsWith("@cline/")}function b(G,Q){let U=C(Q),Y=D(G);while(!0){let X=K(Y,"node_modules",U);if(L(X)||L(K(X,"package.json")))return!0;let q=K(Y,"..");if(q===Y)return!1;Y=q}}function P(G){return T(G)!==null}function T(G){try{return ZG.resolve(G)}catch{}return AG(G)}function AG(G){let Q=C(G),U=MG(Q);if(!U)return null;let Y=K(U,"package.json");try{let X=JSON.parse(B(Y,"utf8")),q=LG(G),Z=q==="."&&typeof X.exports==="string"?X.exports:X.exports&&typeof X.exports==="object"&&Object.hasOwn(X.exports,q)?X.exports[q]:void 0,w=k(Z)??(q==="."&&typeof X.main==="string"?X.main:null);if(!w)return null;let A=K(U,w),W=[A,...u(U,w).filter((_)=>_!==A)];for(let _ of W)if(L(_))return _;return null}catch{return null}}function MG(G){let Q=d;while(!0){let U=K(Q,"package.json");if(L(U))try{if(JSON.parse(B(U,"utf8")).name===G)return Q}catch{}let Y=K(Q,"node_modules",G,"package.json");if(L(Y))return D(Y);let X=K(Q,"..");if(X===Q)return null;Q=X}}function zG(G){let U=D(G);for(let Y=0;Y<4;Y++){let X=K(U,"package.json");if(L(X))try{let Z=JSON.parse(B(X,"utf8"));return Z!=null&&typeof Z==="object"&&"cline"in Z}catch{return!1}let q=K(U,"..");if(q===U)return!1;U=q}return!1}function l(G,Q){let U=Q.startsWith("file:")?h(Q):XG(Q)?Q:K(D(G),Q);if(L(U)&&j.has(y(U)))return U;for(let Y of j){let X=`${U}${Y}`;if(L(X))return X}for(let Y of j){let X=K(U,`index${Y}`);if(L(X))return X}return null}function g(G){let Q=new Set,U=[/\bimport\s+(?:type\s+)?[^"'`]*?\bfrom\s*["'`]([^"'`]+)["'`]/g,/\bexport\s+[^"'`]*?\bfrom\s*["'`]([^"'`]+)["'`]/g,/\bimport\s*\(\s*["'`]([^"'`]+)["'`]\s*\)/g,/\brequire\s*\(\s*["'`]([^"'`]+)["'`]\s*\)/g];for(let Y of U)for(let X of G.matchAll(Y)){let q=X[1];if(q)Q.add(q)}return[...Q]}function o(G,Q,U=new Set){if(U.has(G)||!L(G))return;if(U.add(G),!j.has(y(G)))return;let Y=B(G,"utf8");for(let X of g(Y)){if(X.startsWith("node:")||R.has(X))continue;if(H(X)){if(Object.hasOwn(V,X)||Object.hasOwn(V,C(X))||b(G,X)||c(X)&&P(X)||Q&&P(X))continue;throw Error(`Cannot find module '${C(X)}'`)}let q=l(G,X);if(q)o(q,Q,U)}}function n(G,Q=new Set,U=new Set){if(Q.has(G)||!L(G))return U;if(Q.add(G),!j.has(y(G)))return U;let Y=B(G,"utf8");for(let X of g(Y)){if(U.add(X),H(X))continue;let q=l(G,X);if(q)n(q,Q,U)}return U}function FG(G,Q){let U=m(G),Y={},X=n(G),q=new Set(qG);for(let[Z,w]of Object.entries(V)){try{U.resolve(Z);continue}catch{}Y[Z]=w}for(let Z of X)if(H(Z)&&(c(Z)||Q))q.add(Z);for(let Z of q){if(Object.hasOwn(Y,Z)||b(G,Z))continue;let w=T(Z);if(w)Y[Z]=w}if(!Q)return Y;for(let Z of X){if(!H(Z)||Object.hasOwn(Y,Z)||b(G,Z)||Z.startsWith("node:")||R.has(Z))continue;let w=T(Z);if(w)Y[Z]=w}return Y}async function p(G,Q={}){let U=!zG(G);o(G,U);let Y=FG(G,U),X=_G(Y),q=await import("jiti"),Z=typeof q==="function"?q:typeof q.default==="function"?q.default:void 0;if(!Z)throw Error("Unable to load jiti");return await Z(G,{alias:X,cache:Q.useCache,requireCache:Q.useCache,esmResolve:!0,interopDefault:!1,nativeModules:[...R],transformModules:Object.keys(X)}).import(G,{})}function s(G,Q){if(!G)return!0;if(G.providerIds?.length){if(!Q?.providerId||!G.providerIds.includes(Q.providerId))return!1}if(G.modelIds?.length){if(!Q?.modelId||!G.modelIds.includes(Q.modelId))return!1}return!0}function z(G){return typeof G==="object"&&G!==null}function r(G){return Array.isArray(G)&&G.every((Q)=>typeof Q==="string")}function CG(G,Q){if(!z(G))throw Error(`Invalid plugin module: ${Q}`);if(typeof G.name!=="string"||!G.name)throw Error(`Invalid plugin name: ${Q}`);if(!z(G.manifest))throw Error(`Invalid plugin manifest: ${Q}`);if(Object.hasOwn(G.manifest,"providerIds")&&!r(G.manifest.providerIds))throw Error(`Invalid plugin manifest.providerIds: ${Q}`);if(Object.hasOwn(G.manifest,"modelIds")&&!r(G.manifest.modelIds))throw Error(`Invalid plugin manifest.modelIds: ${Q}`)}function BG(G){if(!z(G))throw Error("Plugin setup context must be an object");if(G.session!==void 0&&!z(G.session))throw Error("Plugin setup context session must be an object");if(G.client!==void 0&&!z(G.client))throw Error("Plugin setup context client must be an object");if(G.user!==void 0&&!z(G.user))throw Error("Plugin setup context user must be an object");if(G.workspaceInfo!==void 0&&!z(G.workspaceInfo))throw Error("Plugin setup context workspaceInfo must be an object");if(G.automation!==void 0&&!z(G.automation))throw Error("Plugin setup context automation must be an object");if(G.automation!==void 0&&typeof G.automation.ingestEvent!=="function")throw Error("Plugin setup context automation.ingestEvent must be a function");if(G.logger!==void 0&&!z(G.logger))throw Error("Plugin setup context logger must be an object")}var t=0,E=new Map,x=new Map;function jG(G){let Q=G instanceof Error?G.message:String(G),U=G instanceof Error?G.stack:void 0;return{message:Q,stack:U}}function v(G,Q,U,Y){if(!process.send)return;process.send({type:"response",id:G,ok:Q,result:U,error:Y})}function f(G,Q){if(!process.send)return;process.send({type:"event",name:G,payload:Q})}globalThis.__clinePluginHost={emitEvent:f};globalThis.__clineSessionEnv={cwd:void 0,workspaceInfo:void 0};function a(G){if(!G||typeof G!=="object")return{};return G}function DG(G){if(!G||typeof G!=="object")return;let Q={...G};if(Q.error instanceof Error)Q.error={name:Q.error.name,message:Q.error.message,stack:Q.error.stack};return Q}function OG(G){let Q=(U,Y,X)=>{f("plugin_log",{level:U,pluginName:G,message:Y,metadata:DG(X)})};return{debug:(U,Y)=>Q("debug",U,Y),log:(U,Y)=>Q("log",U,Y),error:(U,Y)=>Q("error",U,Y)}}function O(G,Q){let U=`${G}:${Q}`,Y=(x.get(U)??0)+1;return x.set(U,Y),`${G}_${Q}_${Y}`}function NG(G){let Q=typeof G.eventType==="string"?G.eventType.trim():"",U=typeof G.source==="string"?G.source.trim():"";if(!Q)throw Error("Automation event type contribution requires eventType");if(!U)throw Error("Automation event type contribution requires source");return{...G,eventType:Q,source:U,examples:G.examples?[...G.examples]:void 0,metadata:G.metadata?a(G.metadata):void 0}}function I(G){let Q=E.get(G);if(!Q)throw Error(`Unknown sandbox plugin id: ${G}`);return Q}async function HG(G){if(E.clear(),t=0,x.clear(),G.cwd)try{process.chdir(G.cwd)}catch{}let Q=globalThis.__clineSessionEnv;if(Q)Q.cwd=G.cwd,Q.workspaceInfo=G.workspaceInfo;let U=[],Y=[],X=[],q=G.exportName||"plugin",Z=new Map,w={providerId:G.providerId,modelId:G.modelId};for(let A of G.pluginPaths||[]){let W;try{let _=await p(A);if(W=_.default??_[q],CG(W,A),W.manifest=JG(W.manifest),!s(W.manifest,w))continue;let F=`plugin_${++t}`,J={tools:[],commands:[],messageBuilders:[],providers:[],automationEventTypes:[],shortcuts:[],flags:[]},N={tools:new Map,commands:new Map,messageBuilders:new Map},i={registerTool:($)=>{let M=O(F,"tool");N.tools.set(M,$.execute),J.tools.push({id:M,name:$.name,description:$.description,inputSchema:$.inputSchema,timeoutMs:$.timeoutMs,retryable:$.retryable})},registerCommand:($)=>{let M=O(F,"command");if(typeof $.handler==="function")N.commands.set(M,$.handler);J.commands.push({id:M,name:$.name,description:$.description})},registerMessageBuilder:($)=>{let M=O(F,"builder");N.messageBuilders.set(M,$.build),J.messageBuilders.push({id:M,name:$.name})},registerProvider:($)=>{J.providers.push({id:O(F,"provider"),name:$.name,description:$.description,metadata:a($.metadata)})},registerAutomationEventType:($)=>{J.automationEventTypes.push({id:O(F,"automation_event"),...NG($)})}};if(typeof W.setup==="function")try{let $={session:G.session,client:G.client,user:G.user,workspaceInfo:G.workspaceInfo,...G.loggerEnabled?{logger:OG(W.name)}:{},...W.manifest.capabilities.includes("automationEvents")?{automation:{ingestEvent:(M)=>{f("automation_event",M)}}}:{}};BG($),await W.setup(i,$)}catch($){Y.push({pluginPath:A,pluginName:W.name,phase:"setup",message:$ instanceof Error?$.message:String($),stack:$ instanceof Error?$.stack:void 0});continue}let S=Z.get(W.name);if(S!==void 0){let $=U[S];if(!$)Z.delete(W.name);else{X.push({type:"duplicate_plugin_override",pluginName:W.name,pluginPath:A,overriddenPluginPath:$.pluginPath,message:`Plugin "${W.name}" from ${A} overrides ${$.pluginPath}`}),E.delete($.pluginId),U.splice(S,1),Z.clear();for(let[M,e]of U.entries())Z.set(e.name,M)}}E.set(F,{plugin:W,handlers:N}),Z.set(W.name,U.length),U.push({pluginId:F,pluginPath:A,name:W.name,manifest:W.manifest,hooks:W.hooks?Object.entries(W.hooks).filter(([,$])=>typeof $==="function").map(([$])=>$):void 0,contributions:J})}catch(_){Y.push({pluginPath:A,pluginName:W?.name,phase:"load",message:_ instanceof Error?_.message:String(_),stack:_ instanceof Error?_.stack:void 0})}}return{plugins:U,failures:Y,warnings:X}}async function EG(G){let U=I(G.pluginId).plugin.hooks?.[G.hookName];if(typeof U!=="function")return;return await U(G.payload)}async function IG(G){let U=I(G.pluginId).handlers.tools.get(G.contributionId);if(typeof U!=="function")throw Error("Unknown sandbox tool contribution");return await U(G.input,G.context)}async function SG(G){let U=I(G.pluginId).handlers.commands.get(G.contributionId);if(typeof U!=="function")return"";return await U(G.input)}async function VG(G){let U=I(G.pluginId).handlers.messageBuilders.get(G.contributionId);if(typeof U!=="function")return[];return await U(G.messages)}var bG={initialize:HG,invokeHook:EG,executeTool:IG,executeCommand:SG,buildMessages:VG};process.on("message",async(G)=>{if(!G||G.type!=="call")return;let Q=bG[G.method];if(!Q){v(G.id,!1,void 0,{message:`Unknown method: ${String(G.method)}`});return}try{let U=await Q(G.args||{});v(G.id,!0,U)}catch(U){v(G.id,!1,void 0,jG(U))}});
1
+ import{createRequire as GG}from"node:module";var QG=GG(import.meta.url);import{normalizePluginManifest as CG}from"@cline/shared";import{existsSync as L,readFileSync as j}from"node:fs";import{builtinModules as UG,createRequire as m}from"node:module";import{dirname as D,extname as E,isAbsolute as XG,resolve as K}from"node:path";import{fileURLToPath as h}from"node:url";import{PLUGIN_FILE_EXTENSIONS as YG}from"@cline/shared";var d=D(h(import.meta.url)),ZG=m(import.meta.url),$G=K(d,"..","..","..","..",".."),b=WG($G),qG=["@cline/agents","@cline/core","@cline/core/hub","@cline/core/hub/daemon-entry","@cline/core/telemetry","@cline/llms","@cline/llms/browser","@cline/shared","@cline/shared/automation","@cline/shared/browser","@cline/shared/storage","@cline/shared/db","@cline/shared/types"],R=new Set(UG.flatMap((G)=>[G,G.replace(/^node:/,"")])),B=new Set(YG),KG=["development","node","import","require","default"];function WG(G){let Q={},U={"@cline/agents":K(G,"packages/agents/src/index.ts"),"@cline/core":K(G,"packages/core/src/index.ts"),"@cline/llms":K(G,"packages/llms/src/index.ts"),"@cline/shared":K(G,"packages/shared/src/index.ts"),"@cline/shared/storage":K(G,"packages/shared/src/storage/index.ts"),"@cline/shared/db":K(G,"packages/shared/src/db/index.ts")};for(let[X,Y]of Object.entries(U))if(L(Y))Q[X]=Y;for(let X of["agents","core","llms","shared"]){let Y=K(G,"packages",X),$=K(Y,"package.json");if(!L($))continue;try{let Z=JSON.parse(j($,"utf8"));if(typeof Z.name!=="string"||!Z.exports)continue;if(typeof Z.exports==="string"){let w=K(Y,Z.exports);if(L(w))Q[Z.name]=w;continue}if(typeof Z.exports!=="object")continue;for(let[w,A]of Object.entries(Z.exports)){let W=wG(Y,A);if(!W)continue;let _=w==="."?Z.name:`${Z.name}/${w.replace(/^\.\//,"")}`;Q[_]=W}}catch{}}return Q}function wG(G,Q){let U=k(Q);if(!U)return null;let X=u(G,U);for(let Y of X)if(L(Y))return Y;return null}function k(G,Q=new Set){if(typeof G==="string")return G;if(!G||typeof G!=="object")return null;if(Q.has(G))return null;Q.add(G);let U=G;for(let X of KG){let Y=k(U[X],Q);if(Y)return Y}return null}function u(G,Q){let U=Q.replace(/^\.\//,""),X=[K(G,Q)];if(U.startsWith("dist/")){let Y=U.replace(/^dist\//,"src/").replace(/\.(mjs|cjs|js)$/,"");return[K(G,`${Y}.ts`),K(G,`${Y}.tsx`),K(G,`${Y}.mts`),K(G,`${Y}.cts`),...X]}return X}function _G(G){return Object.fromEntries(Object.entries(G).sort(([Q],[U])=>U.length-Q.length))}function H(G){return!(G.startsWith(".")||G.startsWith("/")||G.startsWith("file:")||G.startsWith("data:")||G.startsWith("http:")||G.startsWith("https:"))}function C(G){if(G.startsWith("@")){let[Q,U]=G.split("/",3);return U?`${Q}/${U}`:G}return G.split("/",1)[0]??G}function LG(G){let Q=C(G);if(G===Q)return".";return`.${G.slice(Q.length)}`}function c(G){return C(G).startsWith("@cline/")}function T(G,Q){let U=C(Q),X=D(G);while(!0){let Y=K(X,"node_modules",U);if(L(Y)||L(K(Y,"package.json")))return!0;let $=K(X,"..");if($===X)return!1;X=$}}function P(G){return y(G)!==null}function y(G){try{return ZG.resolve(G)}catch{}return AG(G)}function AG(G){let Q=C(G),U=MG(Q);if(!U)return null;let X=K(U,"package.json");try{let Y=JSON.parse(j(X,"utf8")),$=LG(G),Z=$==="."&&typeof Y.exports==="string"?Y.exports:Y.exports&&typeof Y.exports==="object"&&Object.hasOwn(Y.exports,$)?Y.exports[$]:void 0,w=k(Z)??($==="."&&typeof Y.main==="string"?Y.main:null);if(!w)return null;let A=K(U,w),W=[A,...u(U,w).filter((_)=>_!==A)];for(let _ of W)if(L(_))return _;return null}catch{return null}}function MG(G){let Q=d;while(!0){let U=K(Q,"package.json");if(L(U))try{if(JSON.parse(j(U,"utf8")).name===G)return Q}catch{}let X=K(Q,"node_modules",G,"package.json");if(L(X))return D(X);let Y=K(Q,"..");if(Y===Q)return null;Q=Y}}function zG(G){let U=D(G);for(let X=0;X<4;X++){let Y=K(U,"package.json");if(L(Y))try{let Z=JSON.parse(j(Y,"utf8"));return Z!=null&&typeof Z==="object"&&"cline"in Z}catch{return!1}let $=K(U,"..");if($===U)return!1;U=$}return!1}function l(G,Q){let U=Q.startsWith("file:")?h(Q):XG(Q)?Q:K(D(G),Q);if(L(U)&&B.has(E(U)))return U;for(let X of B){let Y=`${U}${X}`;if(L(Y))return Y}for(let X of B){let Y=K(U,`index${X}`);if(L(Y))return Y}return null}function g(G){let Q=new Set,U=[/\bimport\s+(?:type\s+)?[^"'`]*?\bfrom\s*["'`]([^"'`]+)["'`]/g,/\bexport\s+[^"'`]*?\bfrom\s*["'`]([^"'`]+)["'`]/g,/\bimport\s*\(\s*["'`]([^"'`]+)["'`]\s*\)/g,/\brequire\s*\(\s*["'`]([^"'`]+)["'`]\s*\)/g];for(let X of U)for(let Y of G.matchAll(X)){let $=Y[1];if($)Q.add($)}return[...Q]}function FG(G){return E(G)!==".ts"}function o(G,Q,U=new Set){if(U.has(G)||!L(G))return;if(U.add(G),!B.has(E(G)))return;let X=j(G,"utf8"),Y=FG(G);for(let $ of g(X)){if($.startsWith("node:")||R.has($))continue;if(H($)){if(!Y)continue;if(Object.hasOwn(b,$)||Object.hasOwn(b,C($))||T(G,$)||c($)&&P($)||Q&&P($))continue;throw Error(`Cannot find module '${C($)}'`)}let Z=l(G,$);if(Z)o(Z,Q,U)}}function n(G,Q=new Set,U=new Set){if(Q.has(G)||!L(G))return U;if(Q.add(G),!B.has(E(G)))return U;let X=j(G,"utf8");for(let Y of g(X)){if(U.add(Y),H(Y))continue;let $=l(G,Y);if($)n($,Q,U)}return U}function JG(G,Q){let U=m(G),X={},Y=n(G),$=new Set(qG);for(let[Z,w]of Object.entries(b)){try{U.resolve(Z);continue}catch{}X[Z]=w}for(let Z of Y)if(H(Z)&&(c(Z)||Q))$.add(Z);for(let Z of $){if(Object.hasOwn(X,Z)||T(G,Z))continue;let w=y(Z);if(w)X[Z]=w}if(!Q)return X;for(let Z of Y){if(!H(Z)||Object.hasOwn(X,Z)||T(G,Z)||Z.startsWith("node:")||R.has(Z))continue;let w=y(Z);if(w)X[Z]=w}return X}async function p(G,Q={}){let U=!zG(G);o(G,U);let X=JG(G,U),Y=_G(X),$=await import("jiti"),Z=typeof $==="function"?$:typeof $.default==="function"?$.default:void 0;if(!Z)throw Error("Unable to load jiti");return await Z(G,{alias:Y,cache:Q.useCache,requireCache:Q.useCache,esmResolve:!0,interopDefault:!1,nativeModules:[...R],transformModules:Object.keys(Y)}).import(G,{})}function s(G,Q){if(!G)return!0;if(G.providerIds?.length){if(!Q?.providerId||!G.providerIds.includes(Q.providerId))return!1}if(G.modelIds?.length){if(!Q?.modelId||!G.modelIds.includes(Q.modelId))return!1}return!0}function z(G){return typeof G==="object"&&G!==null}function r(G){return Array.isArray(G)&&G.every((Q)=>typeof Q==="string")}function jG(G,Q){if(!z(G))throw Error(`Invalid plugin module: ${Q}`);if(typeof G.name!=="string"||!G.name)throw Error(`Invalid plugin name: ${Q}`);if(!z(G.manifest))throw Error(`Invalid plugin manifest: ${Q}`);if(Object.hasOwn(G.manifest,"providerIds")&&!r(G.manifest.providerIds))throw Error(`Invalid plugin manifest.providerIds: ${Q}`);if(Object.hasOwn(G.manifest,"modelIds")&&!r(G.manifest.modelIds))throw Error(`Invalid plugin manifest.modelIds: ${Q}`)}function BG(G){if(!z(G))throw Error("Plugin setup context must be an object");if(G.session!==void 0&&!z(G.session))throw Error("Plugin setup context session must be an object");if(G.client!==void 0&&!z(G.client))throw Error("Plugin setup context client must be an object");if(G.user!==void 0&&!z(G.user))throw Error("Plugin setup context user must be an object");if(G.workspaceInfo!==void 0&&!z(G.workspaceInfo))throw Error("Plugin setup context workspaceInfo must be an object");if(G.automation!==void 0&&!z(G.automation))throw Error("Plugin setup context automation must be an object");if(G.automation!==void 0&&typeof G.automation.ingestEvent!=="function")throw Error("Plugin setup context automation.ingestEvent must be a function");if(G.logger!==void 0&&!z(G.logger))throw Error("Plugin setup context logger must be an object")}var t=0,I=new Map,x=new Map;function DG(G){let Q=G instanceof Error?G.message:String(G),U=G instanceof Error?G.stack:void 0;return{message:Q,stack:U}}function v(G,Q,U,X){if(!process.send)return;process.send({type:"response",id:G,ok:Q,result:U,error:X})}function f(G,Q){if(!process.send)return;process.send({type:"event",name:G,payload:Q})}globalThis.__clinePluginHost={emitEvent:f};globalThis.__clineSessionEnv={cwd:void 0,workspaceInfo:void 0};function a(G){if(!G||typeof G!=="object")return{};return G}function OG(G){if(!G||typeof G!=="object")return;let Q={...G};if(Q.error instanceof Error)Q.error={name:Q.error.name,message:Q.error.message,stack:Q.error.stack};return Q}function NG(G){let Q=(U,X,Y)=>{f("plugin_log",{level:U,pluginName:G,message:X,metadata:OG(Y)})};return{debug:(U,X)=>Q("debug",U,X),log:(U,X)=>Q("log",U,X),error:(U,X)=>Q("error",U,X)}}function O(G,Q){let U=`${G}:${Q}`,X=(x.get(U)??0)+1;return x.set(U,X),`${G}_${Q}_${X}`}function HG(G){let Q=typeof G.eventType==="string"?G.eventType.trim():"",U=typeof G.source==="string"?G.source.trim():"";if(!Q)throw Error("Automation event type contribution requires eventType");if(!U)throw Error("Automation event type contribution requires source");return{...G,eventType:Q,source:U,examples:G.examples?[...G.examples]:void 0,metadata:G.metadata?a(G.metadata):void 0}}function S(G){let Q=I.get(G);if(!Q)throw Error(`Unknown sandbox plugin id: ${G}`);return Q}async function EG(G){if(I.clear(),t=0,x.clear(),G.cwd)try{process.chdir(G.cwd)}catch{}let Q=globalThis.__clineSessionEnv;if(Q)Q.cwd=G.cwd,Q.workspaceInfo=G.workspaceInfo;let U=[],X=[],Y=[],$=G.exportName||"plugin",Z=new Map,w={providerId:G.providerId,modelId:G.modelId};for(let A of G.pluginPaths||[]){let W;try{let _=await p(A);if(W=_.default??_[$],jG(W,A),W.manifest=CG(W.manifest),!s(W.manifest,w))continue;let F=`plugin_${++t}`,J={tools:[],commands:[],messageBuilders:[],providers:[],automationEventTypes:[],shortcuts:[],flags:[]},N={tools:new Map,commands:new Map,messageBuilders:new Map},i={registerTool:(q)=>{let M=O(F,"tool");N.tools.set(M,q.execute),J.tools.push({id:M,name:q.name,description:q.description,inputSchema:q.inputSchema,timeoutMs:q.timeoutMs,retryable:q.retryable})},registerCommand:(q)=>{let M=O(F,"command");if(typeof q.handler==="function")N.commands.set(M,q.handler);J.commands.push({id:M,name:q.name,description:q.description})},registerMessageBuilder:(q)=>{let M=O(F,"builder");N.messageBuilders.set(M,q.build),J.messageBuilders.push({id:M,name:q.name})},registerProvider:(q)=>{J.providers.push({id:O(F,"provider"),name:q.name,description:q.description,metadata:a(q.metadata)})},registerAutomationEventType:(q)=>{J.automationEventTypes.push({id:O(F,"automation_event"),...HG(q)})}};if(typeof W.setup==="function")try{let q={session:G.session,client:G.client,user:G.user,workspaceInfo:G.workspaceInfo,...G.loggerEnabled?{logger:NG(W.name)}:{},...W.manifest.capabilities.includes("automationEvents")?{automation:{ingestEvent:(M)=>{f("automation_event",M)}}}:{}};BG(q),await W.setup(i,q)}catch(q){X.push({pluginPath:A,pluginName:W.name,phase:"setup",message:q instanceof Error?q.message:String(q),stack:q instanceof Error?q.stack:void 0});continue}let V=Z.get(W.name);if(V!==void 0){let q=U[V];if(!q)Z.delete(W.name);else{Y.push({type:"duplicate_plugin_override",pluginName:W.name,pluginPath:A,overriddenPluginPath:q.pluginPath,message:`Plugin "${W.name}" from ${A} overrides ${q.pluginPath}`}),I.delete(q.pluginId),U.splice(V,1),Z.clear();for(let[M,e]of U.entries())Z.set(e.name,M)}}I.set(F,{plugin:W,handlers:N}),Z.set(W.name,U.length),U.push({pluginId:F,pluginPath:A,name:W.name,manifest:W.manifest,hooks:W.hooks?Object.entries(W.hooks).filter(([,q])=>typeof q==="function").map(([q])=>q):void 0,contributions:J})}catch(_){X.push({pluginPath:A,pluginName:W?.name,phase:"load",message:_ instanceof Error?_.message:String(_),stack:_ instanceof Error?_.stack:void 0})}}return{plugins:U,failures:X,warnings:Y}}async function IG(G){let U=S(G.pluginId).plugin.hooks?.[G.hookName];if(typeof U!=="function")return;return await U(G.payload)}async function SG(G){let U=S(G.pluginId).handlers.tools.get(G.contributionId);if(typeof U!=="function")throw Error("Unknown sandbox tool contribution");return await U(G.input,G.context)}async function VG(G){let U=S(G.pluginId).handlers.commands.get(G.contributionId);if(typeof U!=="function")return"";return await U(G.input)}async function bG(G){let U=S(G.pluginId).handlers.messageBuilders.get(G.contributionId);if(typeof U!=="function")return[];return await U(G.messages)}var TG={initialize:EG,invokeHook:IG,executeTool:SG,executeCommand:VG,buildMessages:bG};process.on("message",async(G)=>{if(!G||G.type!=="call")return;let Q=TG[G.method];if(!Q){v(G.id,!1,void 0,{message:`Unknown method: ${String(G.method)}`});return}try{let U=await Q(G.args||{});v(G.id,!0,U)}catch(U){v(G.id,!1,void 0,DG(U))}});