@cline/core 0.0.47 → 0.0.48
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cline-core/types.d.ts +4 -4
- package/dist/extensions/mcp/index.d.ts +2 -0
- package/dist/extensions/mcp/plugin-server-registration.d.ts +18 -0
- package/dist/extensions/plugin-sandbox-bootstrap.js +1 -1
- package/dist/extensions/tools/executors/bash.d.ts +16 -2
- package/dist/extensions/tools/executors/output-limits.d.ts +25 -0
- package/dist/hub/daemon/entry.js +199 -189
- package/dist/hub/index.js +197 -187
- package/dist/index.d.ts +5 -2
- package/dist/index.js +199 -189
- package/dist/runtime/host/local-runtime-host.d.ts +1 -0
- package/dist/runtime/orchestration/runtime-oauth-token-manager.d.ts +0 -1
- package/dist/services/feature-flags/FeatureFlagsService.d.ts +20 -1
- package/dist/services/feature-flags/posthog.d.ts +24 -0
- package/dist/services/feature-flags/posthog.js +1 -0
- package/dist/services/llms/cline-recommended-models.d.ts +1 -0
- package/dist/services/plugin-mcp-settings.d.ts +31 -0
- package/dist/services/providers/local-provider-service.d.ts +4 -1
- package/dist/services/storage/provider-settings-manager.d.ts +7 -2
- package/dist/services/telemetry/index.d.ts +1 -0
- package/dist/services/telemetry/index.js +1 -1
- package/dist/session/services/message-builder.d.ts +9 -2
- package/package.json +18 -5
|
@@ -50,6 +50,7 @@ export declare class LocalRuntimeHost implements RuntimeHost {
|
|
|
50
50
|
private readonly eventBridge;
|
|
51
51
|
private readonly sessionVersioning;
|
|
52
52
|
constructor(options: LocalRuntimeHostOptions);
|
|
53
|
+
private applyInitialOAuthCredentials;
|
|
53
54
|
startSession(input: StartSessionInput): Promise<StartSessionResult>;
|
|
54
55
|
restoreSession(input: RestoreSessionInput): Promise<RestoreSessionResult>;
|
|
55
56
|
runTurn(input: SendSessionInput): Promise<AgentResult | undefined>;
|
|
@@ -1,10 +1,18 @@
|
|
|
1
|
-
import type { BasicLogger, FeatureFlagPayload, FeatureFlagsContext, IFeatureFlagsProvider, ITelemetryService } from "@cline/shared";
|
|
1
|
+
import type { BasicLogger, FeatureFlagPayload, FeatureFlagsAndPayloads, FeatureFlagsContext, IFeatureFlagsProvider, ITelemetryService } from "@cline/shared";
|
|
2
2
|
import { type FeatureFlag } from "@cline/shared";
|
|
3
|
+
type CacheInfo = {
|
|
4
|
+
updateTime: number;
|
|
5
|
+
userId: string | null;
|
|
6
|
+
flagsPayload?: FeatureFlagsAndPayloads;
|
|
7
|
+
};
|
|
8
|
+
export type FeatureFlagsCacheSnapshot = CacheInfo;
|
|
3
9
|
export interface FeatureFlagsServiceOptions {
|
|
4
10
|
provider: IFeatureFlagsProvider;
|
|
5
11
|
telemetry?: ITelemetryService;
|
|
6
12
|
logger?: BasicLogger;
|
|
7
13
|
cacheTtlMs?: number;
|
|
14
|
+
cacheFilePath?: string;
|
|
15
|
+
persistentCacheMaxAgeMs?: number;
|
|
8
16
|
context?: FeatureFlagsContext;
|
|
9
17
|
}
|
|
10
18
|
export declare class FeatureFlagsService {
|
|
@@ -12,13 +20,23 @@ export declare class FeatureFlagsService {
|
|
|
12
20
|
private readonly telemetry?;
|
|
13
21
|
private readonly logger?;
|
|
14
22
|
private readonly cacheTtlMs;
|
|
23
|
+
private readonly cacheFilePath?;
|
|
24
|
+
private readonly persistentCacheMaxAgeMs;
|
|
15
25
|
private context;
|
|
16
26
|
private cache;
|
|
17
27
|
private cacheInfo;
|
|
18
28
|
constructor(options: FeatureFlagsServiceOptions);
|
|
19
29
|
setContext(context: FeatureFlagsContext): void;
|
|
30
|
+
hydrateCache(snapshot: FeatureFlagsCacheSnapshot): void;
|
|
31
|
+
getCacheSnapshot(): FeatureFlagsCacheSnapshot;
|
|
20
32
|
poll(userId?: string | null): Promise<void>;
|
|
33
|
+
private hydrateFromPersistentCache;
|
|
34
|
+
private isFeatureFlagPayload;
|
|
35
|
+
private readPayloadRecord;
|
|
36
|
+
private readPersistentCache;
|
|
37
|
+
private writePersistentCache;
|
|
21
38
|
private getReturnedFlagKeys;
|
|
39
|
+
private rebuildCacheFromSnapshot;
|
|
22
40
|
private getFeatureFlag;
|
|
23
41
|
getBooleanFlagEnabled(flagName: FeatureFlag): boolean;
|
|
24
42
|
getFlagPayload(flagName: FeatureFlag): FeatureFlagPayload | undefined;
|
|
@@ -28,3 +46,4 @@ export declare class FeatureFlagsService {
|
|
|
28
46
|
test(flagName: FeatureFlag, value: boolean): void;
|
|
29
47
|
dispose(): Promise<void>;
|
|
30
48
|
}
|
|
49
|
+
export {};
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { BasicLogger, FeatureFlagsAndPayloads, FeatureFlagsContext, FeatureFlagsSettings, IFeatureFlagsProvider } from "@cline/shared";
|
|
2
|
+
import { PostHog, type PostHogOptions } from "posthog-node";
|
|
3
|
+
export interface PostHogFeatureFlagsProviderConfig {
|
|
4
|
+
logger?: BasicLogger;
|
|
5
|
+
}
|
|
6
|
+
export interface PostHogFeatureFlagsProviderOptions {
|
|
7
|
+
config: PostHogFeatureFlagsProviderConfig;
|
|
8
|
+
client: PostHog;
|
|
9
|
+
}
|
|
10
|
+
export declare function buildClinePostHogClient(apiKey: string, options?: PostHogOptions | undefined): PostHog;
|
|
11
|
+
export declare class PostHogFeatureFlagsProvider implements IFeatureFlagsProvider {
|
|
12
|
+
private readonly client;
|
|
13
|
+
private readonly settings;
|
|
14
|
+
private readonly logger?;
|
|
15
|
+
constructor(options: PostHogFeatureFlagsProviderOptions);
|
|
16
|
+
getAllFlagsAndPayloads(options: {
|
|
17
|
+
flagKeys?: readonly string[];
|
|
18
|
+
context: FeatureFlagsContext;
|
|
19
|
+
}): Promise<FeatureFlagsAndPayloads | undefined>;
|
|
20
|
+
get enabled(): boolean;
|
|
21
|
+
getSettings(): FeatureFlagsSettings;
|
|
22
|
+
dispose(): Promise<void>;
|
|
23
|
+
private resolveDistinctId;
|
|
24
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{PostHog as s}from"posthog-node";function a(e,t){return new s(e,{host:"https://data.cline.bot",...t})}class o{client;settings;logger;constructor(e){if(!e.client)throw Error("PostHog client is required for feature flags");this.logger=e.config.logger,this.settings={enabled:!0},this.client=e.client}async getAllFlagsAndPayloads(e){if(!this.enabled)return;let t=this.resolveDistinctId(e.context);if(!t)return this.logger?.log?.("PostHog feature flags requested without a distinct ID"),{};try{return await this.client.getAllFlagsAndPayloads(t,{flagKeys:e.flagKeys?[...e.flagKeys]:void 0})}catch(r){return this.logger?.error?.("Error getting PostHog feature flags",{error:r}),{}}}get enabled(){return this.settings.enabled}getSettings(){return{...this.settings}}async dispose(){try{await this.client.shutdown()}catch(e){this.logger?.error?.("Error shutting down PostHog feature flags client",{error:e})}}resolveDistinctId(e){return e?.distinctId?.trim()||e?.userId?.trim()||void 0}}export{a as buildClinePostHogClient,o as PostHogFeatureFlagsProvider};
|
|
@@ -8,6 +8,7 @@ export interface ClineRecommendedModel {
|
|
|
8
8
|
export interface ClineRecommendedModelsData {
|
|
9
9
|
recommended: ClineRecommendedModel[];
|
|
10
10
|
free: ClineRecommendedModel[];
|
|
11
|
+
clinePass: ClineRecommendedModel[];
|
|
11
12
|
}
|
|
12
13
|
export interface FetchClineRecommendedModelsOptions {
|
|
13
14
|
baseUrl?: string;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
export interface PluginMcpSettingsMutation {
|
|
2
|
+
name: string;
|
|
3
|
+
pluginName: string;
|
|
4
|
+
pluginPath: string;
|
|
5
|
+
action: "created" | "updated" | "skipped" | "removed" | "disabled";
|
|
6
|
+
reason?: string;
|
|
7
|
+
}
|
|
8
|
+
export interface PluginMcpSettingsSyncResult {
|
|
9
|
+
mutations: PluginMcpSettingsMutation[];
|
|
10
|
+
failures: Array<{
|
|
11
|
+
pluginPath: string;
|
|
12
|
+
pluginName?: string;
|
|
13
|
+
message: string;
|
|
14
|
+
}>;
|
|
15
|
+
}
|
|
16
|
+
export interface SyncPluginMcpServersToSettingsOptions {
|
|
17
|
+
pluginPaths: ReadonlyArray<string>;
|
|
18
|
+
cwd?: string;
|
|
19
|
+
workspacePath?: string;
|
|
20
|
+
settingsPath?: string;
|
|
21
|
+
providerId?: string;
|
|
22
|
+
modelId?: string;
|
|
23
|
+
}
|
|
24
|
+
export interface RemovePluginMcpServersFromSettingsOptions {
|
|
25
|
+
pluginPaths?: ReadonlyArray<string>;
|
|
26
|
+
pluginNames?: ReadonlyArray<string>;
|
|
27
|
+
settingsPath?: string;
|
|
28
|
+
}
|
|
29
|
+
export declare function syncPluginMcpServersToSettings(options: SyncPluginMcpServersToSettingsOptions): Promise<PluginMcpSettingsSyncResult>;
|
|
30
|
+
export declare function disablePluginMcpServersInSettings(options: RemovePluginMcpServersFromSettingsOptions): PluginMcpSettingsMutation[];
|
|
31
|
+
export declare function removePluginMcpServersFromSettings(options: RemovePluginMcpServersFromSettingsOptions): PluginMcpSettingsMutation[];
|
|
@@ -3,6 +3,9 @@ import { type ProviderOAuthCredentials } from "../../auth/provider-auth-registry
|
|
|
3
3
|
import type { ProviderClient, ProviderConfig, ProviderProtocol, ProviderSettings } from "../../services/llms/provider-settings";
|
|
4
4
|
import type { ProviderSettingsManager } from "../storage/provider-settings-manager";
|
|
5
5
|
export { ensureCustomProvidersLoaded } from "./local-provider-registry";
|
|
6
|
+
export interface ListLocalProvidersOptions {
|
|
7
|
+
isClinePassEnabled?: boolean;
|
|
8
|
+
}
|
|
6
9
|
export interface UpdateLocalProviderRequest {
|
|
7
10
|
providerId: string;
|
|
8
11
|
name?: string;
|
|
@@ -37,7 +40,7 @@ export declare function deleteLocalProvider(manager: ProviderSettingsManager, re
|
|
|
37
40
|
settingsPath: string;
|
|
38
41
|
modelsPath: string;
|
|
39
42
|
}>;
|
|
40
|
-
export declare function listLocalProviders(manager: ProviderSettingsManager): Promise<{
|
|
43
|
+
export declare function listLocalProviders(manager: ProviderSettingsManager, options?: ListLocalProvidersOptions): Promise<{
|
|
41
44
|
providers: ProviderListItem[];
|
|
42
45
|
settingsPath: string;
|
|
43
46
|
}>;
|
|
@@ -7,6 +7,9 @@ export interface SaveProviderSettingsOptions {
|
|
|
7
7
|
setLastUsed?: boolean;
|
|
8
8
|
tokenSource?: ProviderTokenSource;
|
|
9
9
|
}
|
|
10
|
+
export interface ResolveLastUsedProviderSettingsOptions {
|
|
11
|
+
isClinePassEnabled?: boolean;
|
|
12
|
+
}
|
|
10
13
|
export declare class ProviderSettingsManager {
|
|
11
14
|
private readonly filePath;
|
|
12
15
|
private readonly dataDir?;
|
|
@@ -15,9 +18,11 @@ export declare class ProviderSettingsManager {
|
|
|
15
18
|
read(): StoredProviderSettings;
|
|
16
19
|
write(state: StoredProviderSettings): void;
|
|
17
20
|
saveProviderSettings(settings: unknown, options?: SaveProviderSettingsOptions): StoredProviderSettings;
|
|
21
|
+
private resolveProviderSettings;
|
|
18
22
|
getProviderSettings(providerId: string): ProviderSettings | undefined;
|
|
19
|
-
|
|
23
|
+
private resolveLastUsedProviderId;
|
|
24
|
+
getLastUsedProviderSettings(options?: ResolveLastUsedProviderSettingsOptions): ProviderSettings | undefined;
|
|
20
25
|
getProviderConfig(providerId: string, options?: ToProviderConfigOptions): ProviderConfig | undefined;
|
|
21
|
-
getLastUsedProviderConfig(options?: ToProviderConfigOptions): ProviderConfig | undefined;
|
|
26
|
+
getLastUsedProviderConfig(options?: ToProviderConfigOptions & ResolveLastUsedProviderSettingsOptions): ProviderConfig | undefined;
|
|
22
27
|
refreshCatalog(): Promise<void>;
|
|
23
28
|
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
export { resolveCoreDistinctId } from "./distinct-id";
|
|
1
2
|
export type { ITelemetryAdapter, TelemetryArray, TelemetryMetadata, TelemetryObject, TelemetryPrimitive, TelemetryProperties, TelemetryValue, } from "./ITelemetryAdapter";
|
|
2
3
|
export { OpenTelemetryAdapter, type OpenTelemetryAdapterOptions, } from "./OpenTelemetryAdapter";
|
|
3
4
|
export { type ConfiguredTelemetryHandle, type CreateOpenTelemetryTelemetryServiceOptions, createConfiguredTelemetryHandle, createConfiguredTelemetryService, createOpenTelemetryTelemetryService, OpenTelemetryProvider, type OpenTelemetryProviderOptions, } from "./OpenTelemetryProvider";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
class u{name;metadata;meter;logger;enabled;distinctId;commonProperties;counters=new Map;histograms=new Map;gauges=new Map;gaugeValues=new Map;meterProvider;loggerProvider;constructor(e){this.name=e.name??"OpenTelemetryAdapter",this.metadata={...e.metadata},this.meterProvider=e.meterProvider,this.loggerProvider=e.loggerProvider,this.meter=e.meterProvider?.getMeter("cline")??null,this.logger=e.loggerProvider?.getLogger("cline")??null,this.enabled=e.enabled??!0,this.distinctId=e.distinctId,this.commonProperties=e.commonProperties?{...e.commonProperties}:{}}emit(e,t){if(!this.isEnabled())return;this.emitLog(e,t,!1)}emitRequired(e,t){this.emitLog(e,t,!0)}recordCounter(e,t,a,i,l=!1){if(!this.meter||!l&&!this.isEnabled())return;let r=this.counters.get(e);if(!r)r=this.meter.createCounter(e,i?{description:i}:void 0),this.counters.set(e,r);r.add(t,this.flattenProperties(this.buildAttributes(a)))}recordHistogram(e,t,a,i,l=!1){if(!this.meter||!l&&!this.isEnabled())return;let r=this.histograms.get(e);if(!r)r=this.meter.createHistogram(e,i?{description:i}:void 0),this.histograms.set(e,r);r.record(t,this.flattenProperties(this.buildAttributes(a)))}recordGauge(e,t,a,i,l=!1){if(!this.meter||!l&&!this.isEnabled())return;let r=this.buildAttributes(a),s=JSON.stringify(r),g=this.gaugeValues.get(e);if(t===null){if(g){if(g.delete(s),g.size===0)this.gaugeValues.delete(e),this.gauges.delete(e)}return}let n=g;if(!n)n=new Map,this.gaugeValues.set(e,n);if(!this.gauges.has(e)){let d=this.meter.createObservableGauge(e,i?{description:i}:void 0);d.addCallback((h)=>{for(let G of this.snapshotGaugeSeries(e))h.observe(G.value,this.flattenProperties(G.attributes))}),this.gauges.set(e,d)}n.set(s,{value:t,attributes:r})}isEnabled(){return typeof this.enabled==="function"?this.enabled():this.enabled}setDistinctId(e){this.distinctId=e}setCommonProperties(e){this.commonProperties={...e}}updateCommonProperties(e){this.commonProperties={...this.commonProperties,...e}}async flush(){await Promise.all([this.meterProvider?.forceFlush?.(),this.loggerProvider?.forceFlush?.()])}async dispose(){await Promise.all([this.meterProvider?.shutdown?.(),this.loggerProvider?.shutdown?.()])}emitLog(e,t,a){if(!this.logger)return;let i=this.flattenProperties(this.buildAttributes(t,a));this.logger.emit({severityText:"INFO",body:e,attributes:i})}buildAttributes(e,t=!1){return{...this.commonProperties,...this.metadata,...e,...this.distinctId?{distinct_id:this.distinctId}:{},...t?{_required:!0}:{}}}snapshotGaugeSeries(e){let t=this.gaugeValues.get(e);if(!t)return[];return Array.from(t.values(),(a)=>({value:a.value,attributes:a.attributes?{...a.attributes}:void 0}))}flattenProperties(e,t="",a=new WeakSet,i=0){if(!e)return{};let l={},r=100,s=10;for(let[g,n]of Object.entries(e)){if(g==="__proto__"||g==="constructor"||g==="prototype")continue;let d=t?`${t}.${g}`:g;if(n===null||n===void 0){l[d]=String(n);continue}if(Array.isArray(n)){let h=n.length>r?n.slice(0,r):n;try{l[d]=JSON.stringify(h)}catch{l[d]="[UnserializableArray]"}if(n.length>r)l[`${d}_truncated`]=!0,l[`${d}_original_length`]=n.length;continue}if(typeof n==="object"){if(n instanceof Date){l[d]=n.toISOString();continue}if(n instanceof Error){l[d]=n.message;continue}if(a.has(n)){l[d]="[Circular]";continue}if(i>=s){l[d]="[MaxDepthExceeded]";continue}a.add(n),Object.assign(l,this.flattenProperties(n,d,a,i+1));continue}if(H(n)){l[d]=n;continue}try{l[d]=JSON.stringify(n)}catch{l[d]=String(n)}}return l}}function H(e){return typeof e==="string"||typeof e==="number"||typeof e==="boolean"}import{metrics as Y,trace as R}from"@opentelemetry/api";import{logs as _}from"@opentelemetry/api-logs";import{OTLPLogExporter as p}from"@opentelemetry/exporter-logs-otlp-http";import{OTLPMetricExporter as E}from"@opentelemetry/exporter-metrics-otlp-http";import{OTLPTraceExporter as ee}from"@opentelemetry/exporter-trace-otlp-http";import{resourceFromAttributes as te}from"@opentelemetry/resources";import{BatchLogRecordProcessor as ae,ConsoleLogRecordExporter as le,LoggerProvider as ie}from"@opentelemetry/sdk-logs";import{ConsoleMetricExporter as re,MeterProvider as ne,PeriodicExportingMetricReader as z}from"@opentelemetry/sdk-metrics";import{BatchSpanProcessor as de,ConsoleSpanExporter as se,SimpleSpanProcessor as ge}from"@opentelemetry/sdk-trace-base";import{NodeTracerProvider as fe}from"@opentelemetry/sdk-trace-node";import{ATTR_SERVICE_NAME as ue,ATTR_SERVICE_VERSION as be}from"@opentelemetry/semantic-conventions";import{mkdirSync as Se,readFileSync as J,statSync as W,writeFileSync as we}from"node:fs";import{resolveGlobalSettingsPath as $}from"@cline/shared/storage";import{z as f}from"zod";import{SDK_ERROR_TELEMETRY_EVENT as Ae}from"@cline/shared";var O=f.preprocess((e)=>Array.isArray(e)?e.filter((t)=>typeof t==="string").map((t)=>t.trim()).filter(Boolean):void 0,f.array(f.string()).optional()).transform((e)=>{if(!e)return;let t=[...new Set(e)].sort((a,i)=>a.localeCompare(i));return t.length>0?t:void 0}),S=f.object({telemetryOptOut:f.boolean().default(!1).catch(!1),autoUpdateEnabled:f.boolean().default(!0).catch(!0),disabledTools:O.optional(),disabledPlugins:O.optional()}).strip().transform((e)=>{let t={autoUpdateEnabled:e.autoUpdateEnabled,telemetryOptOut:e.telemetryOptOut};if(e.disabledTools?.length)t.disabledTools=e.disabledTools;if(e.disabledPlugins?.length)t.disabledPlugins=e.disabledPlugins;return t});function b(){return S.parse({})}var P;function I(e){if(e.disabledTools)Object.freeze(e.disabledTools);if(e.disabledPlugins)Object.freeze(e.disabledPlugins);return Object.freeze(e)}function B(e){let t;try{t=J(e,"utf8")}catch{return b()}try{let a=S.safeParse(JSON.parse(t));return a.success?a.data:b()}catch{return b()}}function K(){let e=$(),t=W(e,{throwIfNoEntry:!1}),a=t?.mtimeMs??0,i=t?.size??0,l=P;if(l&&l.path===e&&l.mtimeMs===a&&l.size===i)return l;let r=I(t?B(e):b());return P={path:e,mtimeMs:a,size:i,value:r},P}function x(){return K().value}function w(){return x().telemetryOptOut}import{existsSync as Q,mkdirSync as Z,readFileSync as k,writeFileSync as X}from"node:fs";import{resolve as D}from"node:path";import{resolveSessionDataDir as T}from"@cline/shared/storage";import{nanoid as q}from"nanoid";import*as C from"node-machine-id";var M="machine-id";function c(e){let t=e?.trim();if(t)return t;let a=N();if(a)return a;return V()}function L(){let e=C;return e.machineIdSync??e.default?.machineIdSync}function N(){try{let e=L();if(!e)return;return e().trim()||void 0}catch{return}}function V(){let e=T(),t=D(e,M);try{if(Q(t)){let i=k(t,"utf8").trim();if(i.length>0)return i}}catch{}let a=`cl-${q()}`;try{Z(e,{recursive:!0}),X(t,a,"utf8")}catch{}return a}class o{name;logger;enabled;constructor(e={}){this.name=e.name??"TelemetryLoggerSink",this.logger=e.logger,this.enabled=e.enabled??!0}emit(e,t){if(!this.isEnabled())return;this.logger?.log("telemetry.event",{telemetrySink:this.name,event:e,properties:t})}emitRequired(e,t){this.logger?.log("telemetry.required_event",{telemetrySink:this.name,severity:"warn",event:e,properties:t})}recordCounter(e,t,a,i,l){if(!l&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"counter",name:e,value:t,attributes:a,description:i,required:l===!0})}recordHistogram(e,t,a,i,l){if(!l&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"histogram",name:e,value:t,attributes:a,description:i,required:l===!0})}recordGauge(e,t,a,i,l){if(!l&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"gauge",name:e,value:t,attributes:a,description:i,required:l===!0})}isEnabled(){return typeof this.enabled==="function"?this.enabled():this.enabled}async flush(){}async dispose(){}}class m{adapters;metadata;distinctId;commonProperties;constructor(e={}){if(this.adapters=[...e.adapters??[]],e.logger)this.adapters.push(new o({logger:e.logger}));this.metadata={...e.metadata??{}},this.distinctId=e.distinctId,this.commonProperties={...e.commonProperties??{}}}addAdapter(e){this.adapters.push(e)}setDistinctId(e){this.distinctId=e}setMetadata(e){this.metadata={...e}}updateMetadata(e){this.metadata={...this.metadata,...e}}setCommonProperties(e){this.commonProperties={...e}}updateCommonProperties(e){this.commonProperties={...this.commonProperties,...e}}isEnabled(){return this.adapters.some((e)=>e.isEnabled())}capture(e){let t=this.buildAttributes(e.properties);for(let a of this.adapters)a.emit(e.event,t)}captureRequired(e,t){let a=this.buildAttributes(t);for(let i of this.adapters)i.emitRequired(e,a)}recordCounter(e,t,a,i,l=!1){let r=this.buildAttributes(a);for(let s of this.adapters)s.recordCounter(e,t,r,i,l)}recordHistogram(e,t,a,i,l=!1){let r=this.buildAttributes(a);for(let s of this.adapters)s.recordHistogram(e,t,r,i,l)}recordGauge(e,t,a,i,l=!1){let r=this.buildAttributes(a);for(let s of this.adapters)s.recordGauge(e,t,r,i,l)}async flush(){await Promise.all(this.adapters.map((e)=>e.flush()))}async dispose(){await Promise.all(this.adapters.map((e)=>e.dispose()))}buildAttributes(e){return{...this.commonProperties,...e,...this.metadata,...this.distinctId?{distinct_id:this.distinctId}:{}}}}class j{distinctId;metadata;commonProperties;constructor(e={}){this.distinctId=e.distinctId,this.metadata={...e.metadata??{}},this.commonProperties={...e.commonProperties??{}}}setDistinctId(e){this.distinctId=e}setMetadata(e){this.metadata={...e}}updateMetadata(e){this.metadata={...this.metadata,...e}}setCommonProperties(e){this.commonProperties={...e}}updateCommonProperties(e){this.commonProperties={...this.commonProperties,...e}}isEnabled(){return!1}capture(e){this.resolveProperties(e.properties)}captureRequired(e,t){this.resolveProperties(t)}recordCounter(){}recordHistogram(){}recordGauge(){}async flush(){}async dispose(){}resolveProperties(e){return{...this.commonProperties,...e,...this.metadata,...this.distinctId?{distinct_id:this.distinctId}:{}}}}class A{meterProvider;loggerProvider;tracerProvider;options;constructor(e={}){this.options=e;let t=te({[ue]:e.serviceName??"cline",...e.serviceVersion?{[be]:e.serviceVersion}:{}});if(this.meterProvider=this.createMeterProvider(t),this.loggerProvider=this.createLoggerProvider(t),this.tracerProvider=this.createTracerProvider(t),this.meterProvider)Y.setGlobalMeterProvider(this.meterProvider);if(this.loggerProvider)_.setGlobalLoggerProvider(this.loggerProvider);if(this.tracerProvider)this.tracerProvider.register()}getTracer(e="cline",t){return R.getTracer(e,t??this.options.serviceVersion)}createAdapter(e){return new u({...e,meterProvider:this.meterProvider,loggerProvider:this.loggerProvider})}createTelemetryService(e){let t=this.createAdapter({name:e.name,enabled:this.options.enabled,metadata:e.metadata});return new m({...e,adapters:[t],distinctId:c(e.distinctId)})}async forceFlush(){await Promise.all([this.meterProvider?.forceFlush?.(),this.loggerProvider?.forceFlush?.(),this.tracerProvider?.forceFlush?.()])}async dispose(){await Promise.all([this.meterProvider?.shutdown?.(),this.loggerProvider?.shutdown?.(),this.tracerProvider?.shutdown?.()])}createMeterProvider(e){let t=y(this.options.metricsExporter);if(t.length===0)return null;let a=Math.max(1000,this.options.metricExportIntervalMs??this.options.metricExportInterval??60000),i=Math.min(30000,Math.floor(a*0.8)),l=t.map((r)=>ce(r,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json",interval:a,timeout:i})).filter((r)=>r!==null);if(l.length===0)return null;return new ne({resource:e,readers:l})}createTracerProvider(e){let t=y(this.options.tracesExporter);if(t.length===0)return null;let a=this.options.otlpTracesEndpoint??this.options.otlpEndpoint,i=this.options.otlpTracesHeaders??this.options.otlpHeaders,l=[];for(let r of t){let s=Pe(r,{endpoint:a,headers:i,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if(s)l.push(s)}if(l.length===0)return null;return new fe({resource:e,spanProcessors:l})}createLoggerProvider(e){let t=y(this.options.logsExporter);if(t.length===0)return null;let a=t.map((i)=>{let l=he(i,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if(!l)return null;return new ae(l,{maxQueueSize:this.options.logMaxQueueSize??2048,maxExportBatchSize:this.options.logBatchSize??512,scheduledDelayMillis:this.options.logBatchTimeoutMs??this.options.logBatchTimeout??5000})}).filter((i)=>i!==null);if(a.length===0)return null;return new ie({resource:e,processors:a})}}function U(e){let t=new A(e),a=t.createTelemetryService(e);return a.captureRequired("telemetry.provider_created",{provider:"opentelemetry",enabled:e.enabled??!0,logsExporter:Array.isArray(e.logsExporter)?e.logsExporter.join(","):e.logsExporter,metricsExporter:Array.isArray(e.metricsExporter)?e.metricsExporter.join(","):e.metricsExporter,tracesExporter:Array.isArray(e.tracesExporter)?e.tracesExporter.join(","):e.tracesExporter,otlpProtocol:e.otlpProtocol,hasOtlpEndpoint:Boolean(e.otlpEndpoint),serviceName:e.serviceName,serviceVersion:e.serviceVersion}),{provider:t,telemetry:a}}function F(e){if(w())return{telemetry:new j(e)};if(e.enabled!==!0)return{telemetry:new m({...e,distinctId:c(e.distinctId)})};return U(e)}function me(e){let{telemetry:t,provider:a}=F(e);return{telemetry:t,provider:a,flush:async()=>{let r=a;if(r&&typeof r.forceFlush==="function")try{await r.forceFlush()}catch{}},dispose:async()=>{await Promise.allSettled([t.dispose(),a?.dispose()])}}}function y(e){if(!e)return[];return(Array.isArray(e)?e:e.split(",")).map((a)=>a.trim()).filter((a)=>a==="console"||a==="otlp")}function he(e,t){if(e==="console")return new le;if(!t.endpoint)return null;let a=v(t.endpoint,"/v1/logs");return new p({url:a,headers:t.headers})}function Pe(e,t){if(e==="console")return new ge(new se);if(!t.endpoint)return null;let a=v(t.endpoint,"/v1/traces");return new de(new ee({url:a,headers:t.headers}))}function ce(e,t){if(e==="console")return new z({exporter:new re,exportIntervalMillis:t.interval,exportTimeoutMillis:t.timeout});if(!t.endpoint)return null;let a=v(t.endpoint,"/v1/metrics");return new z({exporter:new E({url:a,headers:t.headers}),exportIntervalMillis:t.interval,exportTimeoutMillis:t.timeout})}function v(e,t){let a=new URL(e),i=a.pathname.endsWith("/")?a.pathname.slice(0,-1):a.pathname;return a.pathname=i.endsWith(t)?i:`${i}${t}`,a.toString()}export{U as createOpenTelemetryTelemetryService,F as createConfiguredTelemetryService,me as createConfiguredTelemetryHandle,A as OpenTelemetryProvider,u as OpenTelemetryAdapter};
|
|
1
|
+
import{existsSync as H,mkdirSync as I,readFileSync as J,writeFileSync as W}from"node:fs";import{resolve as $}from"node:path";import{resolveSessionDataDir as B}from"@cline/shared/storage";import{nanoid as x}from"nanoid";import*as K from"node-machine-id";var Q="machine-id";function u(e){let t=e?.trim();if(t)return t;let a=k();if(a)return a;return X()}function Z(){let e=K;return e.machineIdSync??e.default?.machineIdSync}function k(){try{let e=Z();if(!e)return;return e().trim()||void 0}catch{return}}function X(){let e=B(),t=$(e,Q);try{if(H(t)){let i=J(t,"utf8").trim();if(i.length>0)return i}}catch{}let a=`cl-${x()}`;try{I(e,{recursive:!0}),W(t,a,"utf8")}catch{}return a}class b{name;metadata;meter;logger;enabled;distinctId;commonProperties;counters=new Map;histograms=new Map;gauges=new Map;gaugeValues=new Map;meterProvider;loggerProvider;constructor(e){this.name=e.name??"OpenTelemetryAdapter",this.metadata={...e.metadata},this.meterProvider=e.meterProvider,this.loggerProvider=e.loggerProvider,this.meter=e.meterProvider?.getMeter("cline")??null,this.logger=e.loggerProvider?.getLogger("cline")??null,this.enabled=e.enabled??!0,this.distinctId=e.distinctId,this.commonProperties=e.commonProperties?{...e.commonProperties}:{}}emit(e,t){if(!this.isEnabled())return;this.emitLog(e,t,!1)}emitRequired(e,t){this.emitLog(e,t,!0)}recordCounter(e,t,a,i,l=!1){if(!this.meter||!l&&!this.isEnabled())return;let r=this.counters.get(e);if(!r)r=this.meter.createCounter(e,i?{description:i}:void 0),this.counters.set(e,r);r.add(t,this.flattenProperties(this.buildAttributes(a)))}recordHistogram(e,t,a,i,l=!1){if(!this.meter||!l&&!this.isEnabled())return;let r=this.histograms.get(e);if(!r)r=this.meter.createHistogram(e,i?{description:i}:void 0),this.histograms.set(e,r);r.record(t,this.flattenProperties(this.buildAttributes(a)))}recordGauge(e,t,a,i,l=!1){if(!this.meter||!l&&!this.isEnabled())return;let r=this.buildAttributes(a),s=JSON.stringify(r),g=this.gaugeValues.get(e);if(t===null){if(g){if(g.delete(s),g.size===0)this.gaugeValues.delete(e),this.gauges.delete(e)}return}let n=g;if(!n)n=new Map,this.gaugeValues.set(e,n);if(!this.gauges.has(e)){let d=this.meter.createObservableGauge(e,i?{description:i}:void 0);d.addCallback((P)=>{for(let G of this.snapshotGaugeSeries(e))P.observe(G.value,this.flattenProperties(G.attributes))}),this.gauges.set(e,d)}n.set(s,{value:t,attributes:r})}isEnabled(){return typeof this.enabled==="function"?this.enabled():this.enabled}setDistinctId(e){this.distinctId=e}setCommonProperties(e){this.commonProperties={...e}}updateCommonProperties(e){this.commonProperties={...this.commonProperties,...e}}async flush(){await Promise.all([this.meterProvider?.forceFlush?.(),this.loggerProvider?.forceFlush?.()])}async dispose(){await Promise.all([this.meterProvider?.shutdown?.(),this.loggerProvider?.shutdown?.()])}emitLog(e,t,a){if(!this.logger)return;let i=this.flattenProperties(this.buildAttributes(t,a));this.logger.emit({severityText:"INFO",body:e,attributes:i})}buildAttributes(e,t=!1){return{...this.commonProperties,...this.metadata,...e,...this.distinctId?{distinct_id:this.distinctId}:{},...t?{_required:!0}:{}}}snapshotGaugeSeries(e){let t=this.gaugeValues.get(e);if(!t)return[];return Array.from(t.values(),(a)=>({value:a.value,attributes:a.attributes?{...a.attributes}:void 0}))}flattenProperties(e,t="",a=new WeakSet,i=0){if(!e)return{};let l={},r=100,s=10;for(let[g,n]of Object.entries(e)){if(g==="__proto__"||g==="constructor"||g==="prototype")continue;let d=t?`${t}.${g}`:g;if(n===null||n===void 0){l[d]=String(n);continue}if(Array.isArray(n)){let P=n.length>r?n.slice(0,r):n;try{l[d]=JSON.stringify(P)}catch{l[d]="[UnserializableArray]"}if(n.length>r)l[`${d}_truncated`]=!0,l[`${d}_original_length`]=n.length;continue}if(typeof n==="object"){if(n instanceof Date){l[d]=n.toISOString();continue}if(n instanceof Error){l[d]=n.message;continue}if(a.has(n)){l[d]="[Circular]";continue}if(i>=s){l[d]="[MaxDepthExceeded]";continue}a.add(n),Object.assign(l,this.flattenProperties(n,d,a,i+1));continue}if(D(n)){l[d]=n;continue}try{l[d]=JSON.stringify(n)}catch{l[d]=String(n)}}return l}}function D(e){return typeof e==="string"||typeof e==="number"||typeof e==="boolean"}import{metrics as Y,trace as R}from"@opentelemetry/api";import{logs as _}from"@opentelemetry/api-logs";import{OTLPLogExporter as p}from"@opentelemetry/exporter-logs-otlp-http";import{OTLPMetricExporter as E}from"@opentelemetry/exporter-metrics-otlp-http";import{OTLPTraceExporter as ee}from"@opentelemetry/exporter-trace-otlp-http";import{resourceFromAttributes as te}from"@opentelemetry/resources";import{BatchLogRecordProcessor as ae,ConsoleLogRecordExporter as le,LoggerProvider as ie}from"@opentelemetry/sdk-logs";import{ConsoleMetricExporter as re,MeterProvider as ne,PeriodicExportingMetricReader as z}from"@opentelemetry/sdk-metrics";import{BatchSpanProcessor as de,ConsoleSpanExporter as se,SimpleSpanProcessor as ge}from"@opentelemetry/sdk-trace-base";import{NodeTracerProvider as fe}from"@opentelemetry/sdk-trace-node";import{ATTR_SERVICE_NAME as ue,ATTR_SERVICE_VERSION as be}from"@opentelemetry/semantic-conventions";import{mkdirSync as Fe,readFileSync as T,statSync as q,writeFileSync as He}from"node:fs";import{resolveGlobalSettingsPath as C}from"@cline/shared/storage";import{z as f}from"zod";import{SDK_ERROR_TELEMETRY_EVENT as we}from"@cline/shared";var O=f.preprocess((e)=>Array.isArray(e)?e.filter((t)=>typeof t==="string").map((t)=>t.trim()).filter(Boolean):void 0,f.array(f.string()).optional()).transform((e)=>{if(!e)return;let t=[...new Set(e)].sort((a,i)=>a.localeCompare(i));return t.length>0?t:void 0}),S=f.object({telemetryOptOut:f.boolean().default(!1).catch(!1),autoUpdateEnabled:f.boolean().default(!0).catch(!0),disabledTools:O.optional(),disabledPlugins:O.optional()}).strip().transform((e)=>{let t={autoUpdateEnabled:e.autoUpdateEnabled,telemetryOptOut:e.telemetryOptOut};if(e.disabledTools?.length)t.disabledTools=e.disabledTools;if(e.disabledPlugins?.length)t.disabledPlugins=e.disabledPlugins;return t});function m(){return S.parse({})}var c;function M(e){if(e.disabledTools)Object.freeze(e.disabledTools);if(e.disabledPlugins)Object.freeze(e.disabledPlugins);return Object.freeze(e)}function L(e){let t;try{t=T(e,"utf8")}catch{return m()}try{let a=S.safeParse(JSON.parse(t));return a.success?a.data:m()}catch{return m()}}function N(){let e=C(),t=q(e,{throwIfNoEntry:!1}),a=t?.mtimeMs??0,i=t?.size??0,l=c;if(l&&l.path===e&&l.mtimeMs===a&&l.size===i)return l;let r=M(t?L(e):m());return c={path:e,mtimeMs:a,size:i,value:r},c}function V(){return N().value}function w(){return V().telemetryOptOut}class o{name;logger;enabled;constructor(e={}){this.name=e.name??"TelemetryLoggerSink",this.logger=e.logger,this.enabled=e.enabled??!0}emit(e,t){if(!this.isEnabled())return;this.logger?.log("telemetry.event",{telemetrySink:this.name,event:e,properties:t})}emitRequired(e,t){this.logger?.log("telemetry.required_event",{telemetrySink:this.name,severity:"warn",event:e,properties:t})}recordCounter(e,t,a,i,l){if(!l&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"counter",name:e,value:t,attributes:a,description:i,required:l===!0})}recordHistogram(e,t,a,i,l){if(!l&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"histogram",name:e,value:t,attributes:a,description:i,required:l===!0})}recordGauge(e,t,a,i,l){if(!l&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"gauge",name:e,value:t,attributes:a,description:i,required:l===!0})}isEnabled(){return typeof this.enabled==="function"?this.enabled():this.enabled}async flush(){}async dispose(){}}class h{adapters;metadata;distinctId;commonProperties;constructor(e={}){if(this.adapters=[...e.adapters??[]],e.logger)this.adapters.push(new o({logger:e.logger}));this.metadata={...e.metadata??{}},this.distinctId=e.distinctId,this.commonProperties={...e.commonProperties??{}}}addAdapter(e){this.adapters.push(e)}setDistinctId(e){this.distinctId=e}setMetadata(e){this.metadata={...e}}updateMetadata(e){this.metadata={...this.metadata,...e}}setCommonProperties(e){this.commonProperties={...e}}updateCommonProperties(e){this.commonProperties={...this.commonProperties,...e}}isEnabled(){return this.adapters.some((e)=>e.isEnabled())}capture(e){let t=this.buildAttributes(e.properties);for(let a of this.adapters)a.emit(e.event,t)}captureRequired(e,t){let a=this.buildAttributes(t);for(let i of this.adapters)i.emitRequired(e,a)}recordCounter(e,t,a,i,l=!1){let r=this.buildAttributes(a);for(let s of this.adapters)s.recordCounter(e,t,r,i,l)}recordHistogram(e,t,a,i,l=!1){let r=this.buildAttributes(a);for(let s of this.adapters)s.recordHistogram(e,t,r,i,l)}recordGauge(e,t,a,i,l=!1){let r=this.buildAttributes(a);for(let s of this.adapters)s.recordGauge(e,t,r,i,l)}async flush(){await Promise.all(this.adapters.map((e)=>e.flush()))}async dispose(){await Promise.all(this.adapters.map((e)=>e.dispose()))}buildAttributes(e){return{...this.commonProperties,...e,...this.metadata,...this.distinctId?{distinct_id:this.distinctId}:{}}}}class j{distinctId;metadata;commonProperties;constructor(e={}){this.distinctId=e.distinctId,this.metadata={...e.metadata??{}},this.commonProperties={...e.commonProperties??{}}}setDistinctId(e){this.distinctId=e}setMetadata(e){this.metadata={...e}}updateMetadata(e){this.metadata={...this.metadata,...e}}setCommonProperties(e){this.commonProperties={...e}}updateCommonProperties(e){this.commonProperties={...this.commonProperties,...e}}isEnabled(){return!1}capture(e){this.resolveProperties(e.properties)}captureRequired(e,t){this.resolveProperties(t)}recordCounter(){}recordHistogram(){}recordGauge(){}async flush(){}async dispose(){}resolveProperties(e){return{...this.commonProperties,...e,...this.metadata,...this.distinctId?{distinct_id:this.distinctId}:{}}}}class A{meterProvider;loggerProvider;tracerProvider;options;constructor(e={}){this.options=e;let t=te({[ue]:e.serviceName??"cline",...e.serviceVersion?{[be]:e.serviceVersion}:{}});if(this.meterProvider=this.createMeterProvider(t),this.loggerProvider=this.createLoggerProvider(t),this.tracerProvider=this.createTracerProvider(t),this.meterProvider)Y.setGlobalMeterProvider(this.meterProvider);if(this.loggerProvider)_.setGlobalLoggerProvider(this.loggerProvider);if(this.tracerProvider)this.tracerProvider.register()}getTracer(e="cline",t){return R.getTracer(e,t??this.options.serviceVersion)}createAdapter(e){return new b({...e,meterProvider:this.meterProvider,loggerProvider:this.loggerProvider})}createTelemetryService(e){let t=this.createAdapter({name:e.name,enabled:this.options.enabled,metadata:e.metadata});return new h({...e,adapters:[t],distinctId:u(e.distinctId)})}async forceFlush(){await Promise.all([this.meterProvider?.forceFlush?.(),this.loggerProvider?.forceFlush?.(),this.tracerProvider?.forceFlush?.()])}async dispose(){await Promise.all([this.meterProvider?.shutdown?.(),this.loggerProvider?.shutdown?.(),this.tracerProvider?.shutdown?.()])}createMeterProvider(e){let t=y(this.options.metricsExporter);if(t.length===0)return null;let a=Math.max(1000,this.options.metricExportIntervalMs??this.options.metricExportInterval??60000),i=Math.min(30000,Math.floor(a*0.8)),l=t.map((r)=>ce(r,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json",interval:a,timeout:i})).filter((r)=>r!==null);if(l.length===0)return null;return new ne({resource:e,readers:l})}createTracerProvider(e){let t=y(this.options.tracesExporter);if(t.length===0)return null;let a=this.options.otlpTracesEndpoint??this.options.otlpEndpoint,i=this.options.otlpTracesHeaders??this.options.otlpHeaders,l=[];for(let r of t){let s=Pe(r,{endpoint:a,headers:i,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if(s)l.push(s)}if(l.length===0)return null;return new fe({resource:e,spanProcessors:l})}createLoggerProvider(e){let t=y(this.options.logsExporter);if(t.length===0)return null;let a=t.map((i)=>{let l=he(i,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if(!l)return null;return new ae(l,{maxQueueSize:this.options.logMaxQueueSize??2048,maxExportBatchSize:this.options.logBatchSize??512,scheduledDelayMillis:this.options.logBatchTimeoutMs??this.options.logBatchTimeout??5000})}).filter((i)=>i!==null);if(a.length===0)return null;return new ie({resource:e,processors:a})}}function U(e){let t=new A(e),a=t.createTelemetryService(e);return a.captureRequired("telemetry.provider_created",{provider:"opentelemetry",enabled:e.enabled??!0,logsExporter:Array.isArray(e.logsExporter)?e.logsExporter.join(","):e.logsExporter,metricsExporter:Array.isArray(e.metricsExporter)?e.metricsExporter.join(","):e.metricsExporter,tracesExporter:Array.isArray(e.tracesExporter)?e.tracesExporter.join(","):e.tracesExporter,otlpProtocol:e.otlpProtocol,hasOtlpEndpoint:Boolean(e.otlpEndpoint),serviceName:e.serviceName,serviceVersion:e.serviceVersion}),{provider:t,telemetry:a}}function F(e){if(w())return{telemetry:new j(e)};if(e.enabled!==!0)return{telemetry:new h({...e,distinctId:u(e.distinctId)})};return U(e)}function me(e){let{telemetry:t,provider:a}=F(e);return{telemetry:t,provider:a,flush:async()=>{let r=a;if(r&&typeof r.forceFlush==="function")try{await r.forceFlush()}catch{}},dispose:async()=>{await Promise.allSettled([t.dispose(),a?.dispose()])}}}function y(e){if(!e)return[];return(Array.isArray(e)?e:e.split(",")).map((a)=>a.trim()).filter((a)=>a==="console"||a==="otlp")}function he(e,t){if(e==="console")return new le;if(!t.endpoint)return null;let a=v(t.endpoint,"/v1/logs");return new p({url:a,headers:t.headers})}function Pe(e,t){if(e==="console")return new ge(new se);if(!t.endpoint)return null;let a=v(t.endpoint,"/v1/traces");return new de(new ee({url:a,headers:t.headers}))}function ce(e,t){if(e==="console")return new z({exporter:new re,exportIntervalMillis:t.interval,exportTimeoutMillis:t.timeout});if(!t.endpoint)return null;let a=v(t.endpoint,"/v1/metrics");return new z({exporter:new E({url:a,headers:t.headers}),exportIntervalMillis:t.interval,exportTimeoutMillis:t.timeout})}function v(e,t){let a=new URL(e),i=a.pathname.endsWith("/")?a.pathname.slice(0,-1):a.pathname;return a.pathname=i.endsWith(t)?i:`${i}${t}`,a.toString()}export{u as resolveCoreDistinctId,U as createOpenTelemetryTelemetryService,F as createConfiguredTelemetryService,me as createConfiguredTelemetryHandle,A as OpenTelemetryProvider,b as OpenTelemetryAdapter};
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* tool-result truncation and outdated-file-content rewrite for compaction.
|
|
9
9
|
* Per-instance caches make this host state.
|
|
10
10
|
*/
|
|
11
|
-
import { type Message } from "@cline/shared";
|
|
11
|
+
import { type MediaBudgetOptions, type Message } from "@cline/shared";
|
|
12
12
|
/**
|
|
13
13
|
* Builds an API-safe message copy without mutating original conversation history.
|
|
14
14
|
*/
|
|
@@ -16,6 +16,7 @@ export declare class MessageBuilder {
|
|
|
16
16
|
private readonly maxToolResultChars;
|
|
17
17
|
private readonly targetToolNames;
|
|
18
18
|
private readonly maxTotalTextBytes;
|
|
19
|
+
private readonly mediaBudget;
|
|
19
20
|
private indexedMessageCount;
|
|
20
21
|
private indexedTailRef;
|
|
21
22
|
private readonly toolNameByIdCache;
|
|
@@ -23,7 +24,7 @@ export declare class MessageBuilder {
|
|
|
23
24
|
private readonly latestReadToolUseByLocatorCache;
|
|
24
25
|
private readonly latestFullContentOwnerByPathCache;
|
|
25
26
|
private readResultLocatorCache;
|
|
26
|
-
constructor(maxToolResultChars?: number, targetToolNames?: Set<string>, maxTotalTextBytes?: number);
|
|
27
|
+
constructor(maxToolResultChars?: number, targetToolNames?: Set<string>, maxTotalTextBytes?: number, mediaBudget?: MediaBudgetOptions);
|
|
27
28
|
buildForApi(messages: Message[]): Message[];
|
|
28
29
|
private transformBlock;
|
|
29
30
|
private reindex;
|
|
@@ -70,4 +71,10 @@ export declare class MessageBuilder {
|
|
|
70
71
|
private truncateToTotalTextBudget;
|
|
71
72
|
private countMessageTextBytes;
|
|
72
73
|
private collectTruncationCandidates;
|
|
74
|
+
private applyMediaBudget;
|
|
75
|
+
private resolveMediaBudget;
|
|
76
|
+
private applyMediaBudgetToBlock;
|
|
77
|
+
private applyMediaBudgetToToolResultEntry;
|
|
78
|
+
private limitNestedMedia;
|
|
79
|
+
private limitImageContent;
|
|
73
80
|
}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cline/core",
|
|
3
3
|
"description": "Cline Core SDK for Node Runtime",
|
|
4
|
-
"version": "0.0.
|
|
4
|
+
"version": "0.0.48",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
7
7
|
"url": "https://github.com/cline/cline",
|
|
@@ -30,6 +30,10 @@
|
|
|
30
30
|
"./telemetry": {
|
|
31
31
|
"types": "./dist/services/telemetry/index.d.ts",
|
|
32
32
|
"import": "./dist/services/telemetry/index.js"
|
|
33
|
+
},
|
|
34
|
+
"./services/feature-flags/posthog": {
|
|
35
|
+
"types": "./dist/services/feature-flags/posthog.d.ts",
|
|
36
|
+
"import": "./dist/services/feature-flags/posthog.js"
|
|
33
37
|
}
|
|
34
38
|
},
|
|
35
39
|
"scripts": {
|
|
@@ -44,9 +48,9 @@
|
|
|
44
48
|
"test:watch": "vitest --config vitest.config.ts"
|
|
45
49
|
},
|
|
46
50
|
"dependencies": {
|
|
47
|
-
"@cline/agents": "0.0.
|
|
48
|
-
"@cline/shared": "0.0.
|
|
49
|
-
"@cline/llms": "0.0.
|
|
51
|
+
"@cline/agents": "0.0.48",
|
|
52
|
+
"@cline/shared": "0.0.48",
|
|
53
|
+
"@cline/llms": "0.0.48",
|
|
50
54
|
"@modelcontextprotocol/sdk": "^1.29.0",
|
|
51
55
|
"@opentelemetry/api": "^1.9.0",
|
|
52
56
|
"@opentelemetry/api-logs": "^0.214.0",
|
|
@@ -67,8 +71,17 @@
|
|
|
67
71
|
"yaml": "^2.8.2",
|
|
68
72
|
"zod": "^4.3.6"
|
|
69
73
|
},
|
|
74
|
+
"peerDependencies": {
|
|
75
|
+
"posthog-node": "^5.8.0"
|
|
76
|
+
},
|
|
77
|
+
"peerDependenciesMeta": {
|
|
78
|
+
"posthog-node": {
|
|
79
|
+
"optional": true
|
|
80
|
+
}
|
|
81
|
+
},
|
|
70
82
|
"devDependencies": {
|
|
71
|
-
"@types/ws": "^8.18.1"
|
|
83
|
+
"@types/ws": "^8.18.1",
|
|
84
|
+
"posthog-node": "^5.8.0"
|
|
72
85
|
},
|
|
73
86
|
"engines": {
|
|
74
87
|
"node": ">=22"
|