@cline/core 0.0.51 → 0.0.52
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/ClineCore.d.ts +3 -2
- package/dist/cline-core/types.d.ts +7 -0
- package/dist/extensions/mcp/config-loader.d.ts +57 -0
- package/dist/extensions/mcp/index.d.ts +2 -2
- package/dist/extensions/tools/definitions.d.ts +6 -11
- package/dist/extensions/tools/executors/bash.d.ts +7 -7
- package/dist/extensions/tools/executors/index.d.ts +11 -3
- package/dist/extensions/tools/executors/output-limits.d.ts +4 -0
- package/dist/extensions/tools/index.d.ts +5 -4
- package/dist/extensions/tools/schemas.d.ts +7 -23
- package/dist/extensions/tools/team/delegated-agent.d.ts +1 -1
- package/dist/extensions/tools/types.d.ts +2 -2
- package/dist/hub/daemon/entry.js +201 -201
- package/dist/hub/index.js +198 -198
- package/dist/hub/server/handlers/connector-handlers.d.ts +14 -0
- package/dist/hub/server/hub-websocket-server.d.ts +4 -0
- package/dist/index.d.ts +8 -7
- package/dist/index.js +199 -199
- package/dist/services/llms/cline-recommended-models.d.ts +1 -0
- package/dist/services/telemetry/core-events.d.ts +5 -1
- package/dist/services/telemetry/index.js +1 -1
- package/dist/session/checkpoint-diff.d.ts +25 -0
- package/dist/session/checkpoint-restore.d.ts +1 -0
- package/dist/session/services/message-builder.d.ts +11 -0
- package/dist/types/config.d.ts +4 -0
- package/dist/types/events.d.ts +4 -0
- package/package.json +4 -4
|
@@ -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;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type ITelemetryService, type TelemetryProperties } from "@cline/shared";
|
|
1
|
+
import { type CaptureAgentUnexpectedReasoningTokensInput, captureAgentUnexpectedReasoningTokens, type ITelemetryService, type TelemetryProperties } from "@cline/shared";
|
|
2
2
|
export type TelemetryAgentKind = "root" | "subagent" | "team_lead" | "team_teammate";
|
|
3
3
|
export interface TelemetryAgentIdentityProperties {
|
|
4
4
|
agentId: string;
|
|
@@ -20,6 +20,9 @@ export declare const CORE_TELEMETRY_EVENTS: {
|
|
|
20
20
|
readonly STARTED: "session.started";
|
|
21
21
|
readonly ENDED: "session.ended";
|
|
22
22
|
};
|
|
23
|
+
readonly AGENT: {
|
|
24
|
+
readonly UNEXPECTED_REASONING_TOKENS: "agent.reasoning.unexpected_tokens";
|
|
25
|
+
};
|
|
23
26
|
readonly USER: {
|
|
24
27
|
readonly AUTH_STARTED: "user.auth_started";
|
|
25
28
|
readonly AUTH_SUCCEEDED: "user.auth_succeeded";
|
|
@@ -81,6 +84,7 @@ export interface RunCommandsTimeoutTelemetryProperties {
|
|
|
81
84
|
iteration?: number;
|
|
82
85
|
tool_call_id?: string;
|
|
83
86
|
}
|
|
87
|
+
export { captureAgentUnexpectedReasoningTokens, type CaptureAgentUnexpectedReasoningTokensInput, };
|
|
84
88
|
export interface WorkspaceInitializedProperties {
|
|
85
89
|
root_count: number;
|
|
86
90
|
vcs_types: ReadonlyArray<string>;
|
|
@@ -1 +1 @@
|
|
|
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};
|
|
1
|
+
import{existsSync as j,mkdirSync as L,readFileSync as R,writeFileSync as U}from"node:fs";import{resolve as W}from"node:path";import{resolveSessionDataDir as F}from"@cline/shared/storage";import{nanoid as H}from"nanoid";import*as I from"node-machine-id";var J="machine-id";function u(e){let t=e?.trim();if(t)return t;let a=$();if(a)return a;return B()}function V(){let e=I;return e.machineIdSync??e.default?.machineIdSync}function $(){try{let e=V();if(!e)return;return e().trim()||void 0}catch{return}}function B(){let e=F(),t=W(e,J);try{if(j(t)){let i=R(t,"utf8").trim();if(i.length>0)return i}}catch{}let a=`cl-${H()}`;try{L(e,{recursive:!0}),U(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),d=JSON.stringify(r),g=this.gaugeValues.get(e);if(t===null){if(g){if(g.delete(d),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 s=this.meter.createObservableGauge(e,i?{description:i}:void 0);s.addCallback((o)=>{for(let S of this.snapshotGaugeSeries(e))o.observe(S.value,this.flattenProperties(S.attributes))}),this.gauges.set(e,s)}n.set(d,{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,d=10;for(let[g,n]of Object.entries(e)){if(g==="__proto__"||g==="constructor"||g==="prototype")continue;let s=t?`${t}.${g}`:g;if(n===null||n===void 0){l[s]=String(n);continue}if(Array.isArray(n)){let o=n.length>r?n.slice(0,r):n;try{l[s]=JSON.stringify(o)}catch{l[s]="[UnserializableArray]"}if(n.length>r)l[`${s}_truncated`]=!0,l[`${s}_original_length`]=n.length;continue}if(typeof n==="object"){if(n instanceof Date){l[s]=n.toISOString();continue}if(n instanceof Error){l[s]=n.message;continue}if(a.has(n)){l[s]="[Circular]";continue}if(i>=d){l[s]="[MaxDepthExceeded]";continue}a.add(n),Object.assign(l,this.flattenProperties(n,s,a,i+1));continue}if(N(n)){l[s]=n;continue}try{l[s]=JSON.stringify(n)}catch{l[s]=String(n)}}return l}}function N(e){return typeof e==="string"||typeof e==="number"||typeof e==="boolean"}import{metrics as X,trace as Y}from"@opentelemetry/api";import{logs as D}from"@opentelemetry/api-logs";import{OTLPLogExporter as q}from"@opentelemetry/exporter-logs-otlp-http";import{OTLPMetricExporter as p}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 w}from"@opentelemetry/sdk-metrics";import{BatchSpanProcessor as se,ConsoleSpanExporter as de,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 Le,readFileSync as x,statSync as K,writeFileSync as Re}from"node:fs";import{resolveGlobalSettingsPath as Q}from"@cline/shared/storage";import{z as f}from"zod";import{AGENT_UNEXPECTED_REASONING_TOKENS_EVENT as Ge,captureAgentUnexpectedReasoningTokens as we,SDK_ERROR_TELEMETRY_EVENT as ze}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}),v=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 v.parse({})}var c;function Z(e){if(e.disabledTools)Object.freeze(e.disabledTools);if(e.disabledPlugins)Object.freeze(e.disabledPlugins);return Object.freeze(e)}function _(e){let t;try{t=x(e,"utf8")}catch{return m()}try{let a=v.safeParse(JSON.parse(t));return a.success?a.data:m()}catch{return m()}}function k(){let e=Q(),t=K(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=Z(t?_(e):m());return c={path:e,mtimeMs:a,size:i,value:r},c}function E(){return k().value}function G(){return E().telemetryOptOut}class P{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 P({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 d of this.adapters)d.recordCounter(e,t,r,i,l)}recordHistogram(e,t,a,i,l=!1){let r=this.buildAttributes(a);for(let d of this.adapters)d.recordHistogram(e,t,r,i,l)}recordGauge(e,t,a,i,l=!1){let r=this.buildAttributes(a);for(let d of this.adapters)d.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 z{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 y{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)X.setGlobalMeterProvider(this.meterProvider);if(this.loggerProvider)D.setGlobalLoggerProvider(this.loggerProvider);if(this.tracerProvider)this.tracerProvider.register()}getTracer(e="cline",t){return Y.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=T(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=T(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 d=oe(r,{endpoint:a,headers:i,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if(d)l.push(d)}if(l.length===0)return null;return new fe({resource:e,spanProcessors:l})}createLoggerProvider(e){let t=T(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 C(e){let t=new y(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 M(e){if(G())return{telemetry:new z(e)};if(e.enabled!==!0)return{telemetry:new h({...e,distinctId:u(e.distinctId)})};return C(e)}function me(e){let{telemetry:t,provider:a}=M(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 T(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=A(t.endpoint,"/v1/logs");return new q({url:a,headers:t.headers})}function oe(e,t){if(e==="console")return new ge(new de);if(!t.endpoint)return null;let a=A(t.endpoint,"/v1/traces");return new se(new ee({url:a,headers:t.headers}))}function ce(e,t){if(e==="console")return new w({exporter:new re,exportIntervalMillis:t.interval,exportTimeoutMillis:t.timeout});if(!t.endpoint)return null;let a=A(t.endpoint,"/v1/metrics");return new w({exporter:new p({url:a,headers:t.headers}),exportIntervalMillis:t.interval,exportTimeoutMillis:t.timeout})}function A(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,C as createOpenTelemetryTelemetryService,M as createConfiguredTelemetryService,me as createConfiguredTelemetryHandle,y as OpenTelemetryProvider,b as OpenTelemetryAdapter};
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { CheckpointEntry } from "../hooks/checkpoint-hooks";
|
|
2
|
+
import type { SessionRecord } from "../types/sessions";
|
|
3
|
+
export interface CheckpointContentDiff {
|
|
4
|
+
filePath: string;
|
|
5
|
+
leftContent: string;
|
|
6
|
+
rightContent: string;
|
|
7
|
+
}
|
|
8
|
+
export interface CheckpointComparePlan {
|
|
9
|
+
checkpoint: CheckpointEntry;
|
|
10
|
+
cwd: string;
|
|
11
|
+
}
|
|
12
|
+
export interface CheckpointWorkspaceCompareResult extends CheckpointComparePlan {
|
|
13
|
+
diffs: CheckpointContentDiff[];
|
|
14
|
+
}
|
|
15
|
+
export declare function createCheckpointComparePlan(input: {
|
|
16
|
+
session: SessionRecord;
|
|
17
|
+
checkpointRunCount: number;
|
|
18
|
+
cwd?: string;
|
|
19
|
+
}): CheckpointComparePlan;
|
|
20
|
+
export declare function buildCheckpointWorkspaceDiff(cwd: string, checkpoint: CheckpointEntry): Promise<CheckpointContentDiff[]>;
|
|
21
|
+
export declare function compareCheckpointToWorkspace(input: {
|
|
22
|
+
session: SessionRecord;
|
|
23
|
+
checkpointRunCount: number;
|
|
24
|
+
cwd?: string;
|
|
25
|
+
}): Promise<CheckpointWorkspaceCompareResult>;
|
|
@@ -8,6 +8,7 @@ export interface CheckpointRestorePlan {
|
|
|
8
8
|
}
|
|
9
9
|
export declare function readSessionCheckpointHistory(session: Pick<SessionRecord, "metadata"> | undefined): CheckpointEntry[];
|
|
10
10
|
export declare function createRestoredCheckpointMetadata(session: Pick<SessionRecord, "metadata"> | undefined, runCount: number): CheckpointMetadata | undefined;
|
|
11
|
+
export declare function findCheckpointForRun(history: readonly CheckpointEntry[], runCount: number): CheckpointEntry | undefined;
|
|
11
12
|
export declare function trimMessagesToCheckpoint(messages: LlmsProviders.Message[], runCount: number): LlmsProviders.Message[];
|
|
12
13
|
export declare function trimMessagesBeforeCheckpoint(messages: LlmsProviders.Message[], runCount: number): LlmsProviders.Message[];
|
|
13
14
|
export declare function createCheckpointRestorePlan(input: {
|
|
@@ -14,9 +14,11 @@ export declare const DEFAULT_MAX_FILE_CONTENT_CHARS = 50000;
|
|
|
14
14
|
export declare const DEFAULT_MAX_TOTAL_TEXT_BYTES = 6000000;
|
|
15
15
|
export declare const DEFAULT_MAX_ASSISTANT_TEXT_CHARS = 200000;
|
|
16
16
|
export declare const DEFAULT_MAX_ASSISTANT_TOOL_MARKUP_CHARS = 12000;
|
|
17
|
+
export declare const DEFAULT_MIN_OUTDATED_REWRITE_BYTES = 65536;
|
|
17
18
|
export declare const MESSAGE_BUILDER_LIMIT_ENV: {
|
|
18
19
|
readonly maxToolResultChars: "CLINE_MESSAGE_BUILDER_MAX_TOOL_RESULT_CHARS";
|
|
19
20
|
readonly maxTotalTextBytes: "CLINE_MESSAGE_BUILDER_MAX_TOTAL_TEXT_BYTES";
|
|
21
|
+
readonly minOutdatedRewriteBytes: "CLINE_MESSAGE_BUILDER_MIN_OUTDATED_REWRITE_BYTES";
|
|
20
22
|
};
|
|
21
23
|
export interface MessageBuilderOptions {
|
|
22
24
|
maxToolResultChars?: number;
|
|
@@ -25,6 +27,7 @@ export interface MessageBuilderOptions {
|
|
|
25
27
|
mediaBudget?: MediaBudgetOptions;
|
|
26
28
|
maxAssistantTextChars?: number;
|
|
27
29
|
maxAssistantToolMarkupChars?: number;
|
|
30
|
+
minOutdatedRewriteBytes?: number;
|
|
28
31
|
}
|
|
29
32
|
export declare function getMessageBuilderOptionsFromEnv(env?: Record<string, string | undefined>): MessageBuilderOptions;
|
|
30
33
|
/**
|
|
@@ -44,10 +47,18 @@ export declare class MessageBuilder {
|
|
|
44
47
|
private readonly mediaBudget;
|
|
45
48
|
private readonly maxAssistantTextChars;
|
|
46
49
|
private readonly maxAssistantToolMarkupChars;
|
|
50
|
+
private readonly minOutdatedRewriteBytes;
|
|
51
|
+
private readonly committedOutdatedRewrites;
|
|
47
52
|
constructor(options?: MessageBuilderOptions);
|
|
53
|
+
resetConversationState(): void;
|
|
48
54
|
buildForApi(messages: Message[]): Message[];
|
|
49
55
|
private transformBlock;
|
|
50
56
|
private reindex;
|
|
57
|
+
/** Commits pending stale-read rewrites once reclaimable bytes cross the threshold. */
|
|
58
|
+
private commitOutdatedRewrites;
|
|
59
|
+
/** Estimates reclaimable bytes for stale locators inside one tool-result block. */
|
|
60
|
+
private estimateOutdatedReclaimBytes;
|
|
61
|
+
private providerBoundEntryBytes;
|
|
51
62
|
private addMissingToolResults;
|
|
52
63
|
private appendMissingToolResults;
|
|
53
64
|
private shouldMergeUserAfterToolResults;
|
package/dist/types/config.d.ts
CHANGED
|
@@ -20,6 +20,10 @@ export interface CoreModelConfig {
|
|
|
20
20
|
* Explicit reasoning effort override for capable models.
|
|
21
21
|
*/
|
|
22
22
|
reasoningEffort?: ProviderConfig["reasoningEffort"];
|
|
23
|
+
/**
|
|
24
|
+
* Maximum output tokens per API call.
|
|
25
|
+
*/
|
|
26
|
+
maxTokensPerTurn?: number;
|
|
23
27
|
}
|
|
24
28
|
export interface CoreRuntimeFeatures {
|
|
25
29
|
enableTools: boolean;
|
package/dist/types/events.d.ts
CHANGED
|
@@ -33,6 +33,8 @@ export interface SessionPendingPrompt {
|
|
|
33
33
|
prompt: string;
|
|
34
34
|
delivery: "queue" | "steer";
|
|
35
35
|
attachmentCount: number;
|
|
36
|
+
userImages?: string[];
|
|
37
|
+
userFiles?: string[];
|
|
36
38
|
}
|
|
37
39
|
export interface SessionPendingPromptsEvent {
|
|
38
40
|
sessionId: string;
|
|
@@ -44,6 +46,8 @@ export interface SessionPendingPromptSubmittedEvent {
|
|
|
44
46
|
prompt: string;
|
|
45
47
|
delivery: "queue" | "steer";
|
|
46
48
|
attachmentCount: number;
|
|
49
|
+
userImages?: string[];
|
|
50
|
+
userFiles?: string[];
|
|
47
51
|
}
|
|
48
52
|
export interface SessionSnapshotEvent {
|
|
49
53
|
sessionId: string;
|
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.52",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
7
7
|
"url": "https://github.com/cline/cline",
|
|
@@ -48,9 +48,9 @@
|
|
|
48
48
|
"test:watch": "vitest --config vitest.config.ts"
|
|
49
49
|
},
|
|
50
50
|
"dependencies": {
|
|
51
|
-
"@cline/agents": "0.0.
|
|
52
|
-
"@cline/shared": "0.0.
|
|
53
|
-
"@cline/llms": "0.0.
|
|
51
|
+
"@cline/agents": "0.0.52",
|
|
52
|
+
"@cline/shared": "0.0.52",
|
|
53
|
+
"@cline/llms": "0.0.52",
|
|
54
54
|
"@modelcontextprotocol/sdk": "^1.29.0",
|
|
55
55
|
"@opentelemetry/api": "^1.9.0",
|
|
56
56
|
"@opentelemetry/api-logs": "^0.214.0",
|