@cline/core 0.0.39 → 0.0.40
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/README.md +2 -0
- package/dist/extensions/context/compaction-shared.d.ts +6 -5
- package/dist/extensions/mcp/client.d.ts +8 -1
- package/dist/extensions/mcp/config-loader.d.ts +11 -1
- package/dist/extensions/mcp/index.d.ts +6 -3
- package/dist/extensions/mcp/oauth.d.ts +48 -0
- package/dist/extensions/mcp/types.d.ts +17 -0
- package/dist/extensions/plugin-sandbox-bootstrap.js +1 -1
- package/dist/hub/daemon/entry.js +201 -199
- package/dist/hub/index.js +200 -198
- package/dist/hub/runtime-host/hub-runtime-host.d.ts +3 -1
- package/dist/hub/server/browser-websocket.d.ts +3 -1
- package/dist/hub/server/handlers/context.d.ts +2 -1
- package/dist/hub/server/hub-server-transport.d.ts +3 -0
- package/dist/index.d.ts +3 -3
- package/dist/index.js +201 -199
- package/dist/runtime/config/agent-runtime-config-builder.d.ts +2 -9
- package/dist/runtime/host/history.d.ts +1 -0
- package/dist/runtime/host/runtime-host.d.ts +3 -1
- package/dist/runtime/turn-queue/pending-prompt-service.d.ts +6 -1
- package/dist/services/llms/handler-factory.d.ts +2 -2
- package/dist/services/llms/provider-settings.d.ts +1 -0
- package/dist/services/providers/local-provider-registry.d.ts +3 -0
- package/dist/services/providers/local-provider-service.d.ts +4 -2
- package/dist/services/telemetry/core-events.d.ts +4 -1
- package/dist/services/telemetry/index.js +1 -1
- package/dist/session/services/file-session-service.d.ts +2 -0
- package/dist/session/services/persistence-service.d.ts +2 -1
- package/dist/session/services/session-service.d.ts +2 -0
- package/dist/session/stores/session-manifest-store.d.ts +3 -1
- package/dist/settings/types.d.ts +3 -2
- package/dist/types/config.d.ts +2 -2
- package/dist/types/session.d.ts +2 -1
- package/package.json +9 -8
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
* consumed by `SessionRuntime` / `MistakeTracker` /
|
|
12
12
|
* `LoopDetectionTracker` — not passed through here.
|
|
13
13
|
*/
|
|
14
|
-
import type { AgentConfig, AgentMessage, AgentModel, AgentRuntimeConfig, AgentRuntimeHooks, AgentRuntimePlugin, AgentRuntimePrepareTurnContext, AgentRuntimePrepareTurnResult,
|
|
14
|
+
import type { AgentConfig, AgentMessage, AgentModel, AgentRuntimeConfig, AgentRuntimeHooks, AgentRuntimePlugin, AgentRuntimePrepareTurnContext, AgentRuntimePrepareTurnResult, AgentTool, BasicLogger, ITelemetryService } from "@cline/shared";
|
|
15
15
|
/**
|
|
16
16
|
* Inputs required to assemble an `AgentRuntimeConfig`. Distinct from
|
|
17
17
|
* `AgentConfig` because some of these (the model adapter, the hook
|
|
@@ -37,7 +37,7 @@ export interface CreateAgentRuntimeConfigInput {
|
|
|
37
37
|
/** Pre-built model adapter (produced by `apiHandlerToAgentModel`). */
|
|
38
38
|
readonly model: AgentModel;
|
|
39
39
|
readonly logger?: BasicLogger;
|
|
40
|
-
readonly telemetry?:
|
|
40
|
+
readonly telemetry?: ITelemetryService;
|
|
41
41
|
/** Pre-built tool array (builtins + plugin-contributed + session extras). */
|
|
42
42
|
readonly tools?: readonly AgentTool<unknown, unknown>[];
|
|
43
43
|
readonly toolContextMetadata?: Record<string, unknown>;
|
|
@@ -78,10 +78,3 @@ export declare function buildMessageModelInfo(config: AgentConfig): AgentMessage
|
|
|
78
78
|
* `1`, `undefined` when the caller did not specify.
|
|
79
79
|
*/
|
|
80
80
|
export declare function resolveToolExecution(maxParallelToolCalls: number | undefined): "sequential" | "parallel" | undefined;
|
|
81
|
-
/**
|
|
82
|
-
* Adapt the full `ITelemetryService` to the minimal `AgentTelemetry`
|
|
83
|
-
* shape. The runtime only calls `capture(event, properties)`; the
|
|
84
|
-
* remaining methods are host concerns and stay on the
|
|
85
|
-
* `ITelemetryService` instance owned by `SessionRuntime`.
|
|
86
|
-
*/
|
|
87
|
-
export declare function mapTelemetry(telemetry: AgentConfig["telemetry"]): AgentTelemetry | undefined;
|
|
@@ -6,6 +6,7 @@ export interface SessionHistoryListOptions {
|
|
|
6
6
|
limit?: number;
|
|
7
7
|
includeManifestFallback?: boolean;
|
|
8
8
|
hydrate?: boolean;
|
|
9
|
+
includeSubagents?: boolean;
|
|
9
10
|
}
|
|
10
11
|
export declare function manifestToSessionRecord(manifest: SessionManifest): SessionRecord;
|
|
11
12
|
export declare function hydrateSessionHistory(host: Pick<RuntimeHost, "readSessionMessages">, rows: SessionRecord[]): Promise<SessionHistoryRecord[]>;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type * as LlmsProviders from "@cline/llms";
|
|
2
|
-
import type { AgentResult, RuntimeConfigExtensionKind } from "@cline/shared";
|
|
2
|
+
import type { AgentMode, AgentResult, RuntimeConfigExtensionKind } from "@cline/shared";
|
|
3
3
|
import type { HookEventPayload } from "../../hooks";
|
|
4
4
|
import type { CheckpointEntry } from "../../hooks/checkpoint-hooks";
|
|
5
5
|
import type { ProviderSettings } from "../../services/llms/provider-settings";
|
|
@@ -66,6 +66,7 @@ export interface StartSessionResult {
|
|
|
66
66
|
export interface SendSessionInput {
|
|
67
67
|
sessionId: string;
|
|
68
68
|
prompt: string;
|
|
69
|
+
mode?: AgentMode;
|
|
69
70
|
userImages?: string[];
|
|
70
71
|
userFiles?: string[];
|
|
71
72
|
delivery?: "queue" | "steer";
|
|
@@ -96,6 +97,7 @@ export interface PendingPromptsUpdateInput {
|
|
|
96
97
|
sessionId: string;
|
|
97
98
|
promptId: string;
|
|
98
99
|
prompt?: string;
|
|
100
|
+
mode?: AgentMode;
|
|
99
101
|
delivery?: "queue" | "steer";
|
|
100
102
|
}
|
|
101
103
|
export interface PendingPromptsDeleteInput {
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type AgentMode } from "@cline/shared";
|
|
1
2
|
import type { CoreSessionEvent, SessionPendingPrompt } from "../../types/events";
|
|
2
3
|
import type { ActiveSession } from "../../types/session";
|
|
3
4
|
import type { PendingPromptMutationResult, PendingPromptsDeleteInput, PendingPromptsUpdateInput } from "../host/runtime-host";
|
|
@@ -5,6 +6,7 @@ export type PendingPromptDelivery = "queue" | "steer";
|
|
|
5
6
|
export interface PendingPromptEntry {
|
|
6
7
|
id: string;
|
|
7
8
|
prompt: string;
|
|
9
|
+
mode?: AgentMode;
|
|
8
10
|
delivery: PendingPromptDelivery;
|
|
9
11
|
userImages?: string[];
|
|
10
12
|
userFiles?: string[];
|
|
@@ -18,12 +20,14 @@ export interface PendingPromptsControllerDeps {
|
|
|
18
20
|
send(input: {
|
|
19
21
|
sessionId: string;
|
|
20
22
|
prompt: string;
|
|
23
|
+
mode?: AgentMode;
|
|
21
24
|
userImages?: string[];
|
|
22
25
|
userFiles?: string[];
|
|
23
26
|
}): Promise<unknown>;
|
|
24
27
|
}
|
|
25
28
|
export interface PendingPromptEnqueueInput {
|
|
26
29
|
prompt: string;
|
|
30
|
+
mode?: AgentMode;
|
|
27
31
|
delivery: PendingPromptDelivery;
|
|
28
32
|
userImages?: string[];
|
|
29
33
|
userFiles?: string[];
|
|
@@ -51,11 +55,12 @@ export declare class PendingPromptsController {
|
|
|
51
55
|
delete(input: PendingPromptsDeleteInput): PendingPromptMutationResult;
|
|
52
56
|
enqueue(sessionId: string, entry: {
|
|
53
57
|
prompt: string;
|
|
58
|
+
mode?: AgentMode;
|
|
54
59
|
delivery: "queue" | "steer";
|
|
55
60
|
userImages?: string[];
|
|
56
61
|
userFiles?: string[];
|
|
57
62
|
}): void;
|
|
58
|
-
consumeSteer(sessionId: string):
|
|
63
|
+
consumeSteer(sessionId: string): PendingPromptEntry | undefined;
|
|
59
64
|
clearAborted(session: ActiveSession): void;
|
|
60
65
|
emitPrompts(session: ActiveSession): void;
|
|
61
66
|
scheduleDrain(sessionId: string, session: ActiveSession): void;
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import type { AgentConfig, AgentModel, BasicLogger, ModelInfo } from "@cline/shared";
|
|
1
|
+
import type { AgentConfig, AgentModel, BasicLogger, ITelemetryService, ModelInfo } from "@cline/shared";
|
|
2
2
|
export declare function resolveKnownModelsFromConfig(config: AgentConfig): Record<string, ModelInfo> | undefined;
|
|
3
|
-
export declare function createAgentModelFromConfig(config: AgentConfig, logger: BasicLogger | undefined): AgentModel;
|
|
3
|
+
export declare function createAgentModelFromConfig(config: AgentConfig, logger: BasicLogger | undefined, telemetry?: ITelemetryService): AgentModel;
|
|
@@ -221,6 +221,7 @@ export declare const ProviderSettingsSchema: z.ZodObject<{
|
|
|
221
221
|
"computer-use": "computer-use";
|
|
222
222
|
oauth: "oauth";
|
|
223
223
|
vision: "vision";
|
|
224
|
+
popular: "popular";
|
|
224
225
|
}>>>;
|
|
225
226
|
modelCatalog: z.ZodOptional<z.ZodObject<{
|
|
226
227
|
loadLatestOnInit: z.ZodOptional<z.ZodBoolean>;
|
|
@@ -60,6 +60,7 @@ export declare const StoredProviderMetadataSchema: z.ZodObject<{
|
|
|
60
60
|
oauth: "oauth";
|
|
61
61
|
vision: "vision";
|
|
62
62
|
"local-auth": "local-auth";
|
|
63
|
+
popular: "popular";
|
|
63
64
|
}>>>;
|
|
64
65
|
modelsSourceUrl: z.ZodOptional<z.ZodString>;
|
|
65
66
|
}, z.core.$loose>;
|
|
@@ -101,6 +102,7 @@ export declare const StoredProviderEntrySchema: z.ZodObject<{
|
|
|
101
102
|
oauth: "oauth";
|
|
102
103
|
vision: "vision";
|
|
103
104
|
"local-auth": "local-auth";
|
|
105
|
+
popular: "popular";
|
|
104
106
|
}>>>;
|
|
105
107
|
modelsSourceUrl: z.ZodOptional<z.ZodString>;
|
|
106
108
|
}, z.core.$loose>>;
|
|
@@ -166,6 +168,7 @@ export declare const StoredModelsFileSchema: z.ZodObject<{
|
|
|
166
168
|
oauth: "oauth";
|
|
167
169
|
vision: "vision";
|
|
168
170
|
"local-auth": "local-auth";
|
|
171
|
+
popular: "popular";
|
|
169
172
|
}>>>;
|
|
170
173
|
modelsSourceUrl: z.ZodOptional<z.ZodString>;
|
|
171
174
|
}, z.core.$loose>>;
|
|
@@ -74,13 +74,13 @@ export interface ProviderConfigFieldRequirement {
|
|
|
74
74
|
}
|
|
75
75
|
export interface ProviderConfigFields {
|
|
76
76
|
providerId: string;
|
|
77
|
-
authMethod: "api-key" | "oauth";
|
|
77
|
+
authMethod: "api-key" | "oauth" | "local";
|
|
78
78
|
fields: Partial<Record<ProviderConfigFieldKey, ProviderConfigFieldRequirement>>;
|
|
79
79
|
}
|
|
80
80
|
/**
|
|
81
81
|
* Project a provider into the inputs a configure-dialog should render.
|
|
82
82
|
*
|
|
83
|
-
* No fields are marked "required"
|
|
83
|
+
* No fields are marked "required". `llms` no longer pre-flights credentials,
|
|
84
84
|
* so a missing API key surfaces as the provider's own auth error rather than
|
|
85
85
|
* a synthetic SDK failure. UIs may still require fields client-side if they
|
|
86
86
|
* want, but the runtime does not.
|
|
@@ -88,6 +88,8 @@ export interface ProviderConfigFields {
|
|
|
88
88
|
* - OAuth providers (`cline`, `oca`, `openai-codex`) return `authMethod:
|
|
89
89
|
* "oauth"` with no fields; the configure UI should route to the OAuth
|
|
90
90
|
* login flow instead.
|
|
91
|
+
* - Local auth providers return `authMethod: "local"` with no fields. The
|
|
92
|
+
* configure UI should show provider-specific local readiness instead.
|
|
91
93
|
* - All other providers return `apiKey`. Built-in local/proxy-style providers
|
|
92
94
|
* with user-supplied endpoints, plus user-added providers with saved
|
|
93
95
|
* endpoints, also return a pre-filled `baseUrl` field.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { 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;
|
|
@@ -54,6 +54,9 @@ export declare const CORE_TELEMETRY_EVENTS: {
|
|
|
54
54
|
readonly INIT_ERROR: "workspace.init_error";
|
|
55
55
|
readonly PATH_RESOLVED: "workspace.path_resolved";
|
|
56
56
|
};
|
|
57
|
+
readonly SDK: {
|
|
58
|
+
readonly ERROR: "sdk.error";
|
|
59
|
+
};
|
|
57
60
|
};
|
|
58
61
|
export interface WorkspaceInitializedProperties {
|
|
59
62
|
root_count: number;
|
|
@@ -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,r,l,a=!1){if(!this.meter||!a&&!this.isEnabled())return;let i=this.counters.get(e);if(!i)i=this.meter.createCounter(e,l?{description:l}:void 0),this.counters.set(e,i);i.add(t,this.flattenProperties(this.buildAttributes(r)))}recordHistogram(e,t,r,l,a=!1){if(!this.meter||!a&&!this.isEnabled())return;let i=this.histograms.get(e);if(!i)i=this.meter.createHistogram(e,l?{description:l}:void 0),this.histograms.set(e,i);i.record(t,this.flattenProperties(this.buildAttributes(r)))}recordGauge(e,t,r,l,a=!1){if(!this.meter||!a&&!this.isEnabled())return;let i=this.buildAttributes(r),s=JSON.stringify(i),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 d=g;if(!d)d=new Map,this.gaugeValues.set(e,d);if(!this.gauges.has(e)){let n=this.meter.createObservableGauge(e,l?{description:l}:void 0);n.addCallback((m)=>{for(let v of this.snapshotGaugeSeries(e))m.observe(v.value,this.flattenProperties(v.attributes))}),this.gauges.set(e,n)}d.set(s,{value:t,attributes:i})}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,r){if(!this.logger)return;let l=this.flattenProperties(this.buildAttributes(t,r));this.logger.emit({severityText:"INFO",body:e,attributes:l})}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(),(r)=>({value:r.value,attributes:r.attributes?{...r.attributes}:void 0}))}flattenProperties(e,t="",r=new WeakSet,l=0){if(!e)return{};let a={},i=100,s=10;for(let[g,d]of Object.entries(e)){if(g==="__proto__"||g==="constructor"||g==="prototype")continue;let n=t?`${t}.${g}`:g;if(d===null||d===void 0){a[n]=String(d);continue}if(Array.isArray(d)){let m=d.length>i?d.slice(0,i):d;try{a[n]=JSON.stringify(m)}catch{a[n]="[UnserializableArray]"}if(d.length>i)a[`${n}_truncated`]=!0,a[`${n}_original_length`]=d.length;continue}if(typeof d==="object"){if(d instanceof Date){a[n]=d.toISOString();continue}if(d instanceof Error){a[n]=d.message;continue}if(r.has(d)){a[n]="[Circular]";continue}if(l>=s){a[n]="[MaxDepthExceeded]";continue}r.add(d),Object.assign(a,this.flattenProperties(d,n,r,l+1));continue}if(z(d)){a[n]=d;continue}try{a[n]=JSON.stringify(d)}catch{a[n]=String(d)}}return a}}function z(e){return typeof e==="string"||typeof e==="number"||typeof e==="boolean"}import{metrics as M,trace as L}from"@opentelemetry/api";import{logs as C}from"@opentelemetry/api-logs";import{OTLPLogExporter as N}from"@opentelemetry/exporter-logs-otlp-http";import{OTLPMetricExporter as V}from"@opentelemetry/exporter-metrics-otlp-http";import{OTLPTraceExporter as Y}from"@opentelemetry/exporter-trace-otlp-http";import{resourceFromAttributes as R}from"@opentelemetry/resources";import{BatchLogRecordProcessor as _,ConsoleLogRecordExporter as p,LoggerProvider as E}from"@opentelemetry/sdk-logs";import{ConsoleMetricExporter as ee,MeterProvider as te,PeriodicExportingMetricReader as w}from"@opentelemetry/sdk-metrics";import{BatchSpanProcessor as re,ConsoleSpanExporter as ae,SimpleSpanProcessor as le}from"@opentelemetry/sdk-trace-base";import{NodeTracerProvider as ie}from"@opentelemetry/sdk-trace-node";import{ATTR_SERVICE_NAME as de,ATTR_SERVICE_VERSION as ne}from"@opentelemetry/semantic-conventions";import{mkdirSync as ye,readFileSync as J,writeFileSync as ce}from"node:fs";import{resolveGlobalSettingsPath as W}from"@cline/shared/storage";import{z as f}from"zod";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((r,l)=>r.localeCompare(l));return t.length>0?t:void 0}),O=f.object({telemetryOptOut:f.boolean().default(!1).catch(!1),disabledTools:o.optional(),disabledPlugins:o.optional()}).strip().transform((e)=>{let t={telemetryOptOut:e.telemetryOptOut};if(e.disabledTools?.length)t.disabledTools=e.disabledTools;if(e.disabledPlugins?.length)t.disabledPlugins=e.disabledPlugins;return t});function G(){return O.parse({})}function $(){let e=W(),t;try{t=JSON.parse(J(e,"utf8"))}catch{return G()}let r=O.safeParse(t);return r.success?r.data:G()}function S(){return $().telemetryOptOut}import{existsSync as F,mkdirSync as B,readFileSync as I,writeFileSync as K}from"node:fs";import{resolve as U}from"node:path";import{resolveSessionDataDir as Q}from"@cline/shared/storage";import{nanoid as X}from"nanoid";import*as Z from"node-machine-id";var k="machine-id";function P(e){let t=e?.trim();if(t)return t;let r=D();if(r)return r;return q()}function x(){let e=Z;return e.machineIdSync??e.default?.machineIdSync}function D(){try{let e=x();if(!e)return;return e().trim()||void 0}catch{return}}function q(){let e=Q(),t=U(e,k);try{if(F(t)){let l=I(t,"utf8").trim();if(l.length>0)return l}}catch{}let r=`cl-${X()}`;try{B(e,{recursive:!0}),K(t,r,"utf8")}catch{}return r}class h{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,r,l,a){if(!a&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"counter",name:e,value:t,attributes:r,description:l,required:a===!0})}recordHistogram(e,t,r,l,a){if(!a&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"histogram",name:e,value:t,attributes:r,description:l,required:a===!0})}recordGauge(e,t,r,l,a){if(!a&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"gauge",name:e,value:t,attributes:r,description:l,required:a===!0})}isEnabled(){return typeof this.enabled==="function"?this.enabled():this.enabled}async flush(){}async dispose(){}}class b{adapters;metadata;distinctId;commonProperties;constructor(e={}){if(this.adapters=[...e.adapters??[]],e.logger)this.adapters.push(new h({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 r of this.adapters)r.emit(e.event,t)}captureRequired(e,t){let r=this.buildAttributes(t);for(let l of this.adapters)l.emitRequired(e,r)}recordCounter(e,t,r,l,a=!1){let i=this.buildAttributes(r);for(let s of this.adapters)s.recordCounter(e,t,i,l,a)}recordHistogram(e,t,r,l,a=!1){let i=this.buildAttributes(r);for(let s of this.adapters)s.recordHistogram(e,t,i,l,a)}recordGauge(e,t,r,l,a=!1){let i=this.buildAttributes(r);for(let s of this.adapters)s.recordGauge(e,t,i,l,a)}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 T{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 c{meterProvider;loggerProvider;tracerProvider;options;constructor(e={}){this.options=e;let t=R({[de]:e.serviceName??"cline",...e.serviceVersion?{[ne]:e.serviceVersion}:{}});if(this.meterProvider=this.createMeterProvider(t),this.loggerProvider=this.createLoggerProvider(t),this.tracerProvider=this.createTracerProvider(t),this.meterProvider)M.setGlobalMeterProvider(this.meterProvider);if(this.loggerProvider)C.setGlobalLoggerProvider(this.loggerProvider);if(this.tracerProvider)this.tracerProvider.register()}getTracer(e="cline",t){return L.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 b({...e,adapters:[t],distinctId:P(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 r=Math.max(1000,this.options.metricExportIntervalMs??this.options.metricExportInterval??60000),l=Math.min(30000,Math.floor(r*0.8)),a=t.map((i)=>ue(i,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json",interval:r,timeout:l})).filter((i)=>i!==null);if(a.length===0)return null;return new te({resource:e,readers:a})}createTracerProvider(e){let t=y(this.options.tracesExporter);if(t.length===0)return null;let r=this.options.otlpTracesEndpoint??this.options.otlpEndpoint,l=this.options.otlpTracesHeaders??this.options.otlpHeaders,a=[];for(let i of t){let s=fe(i,{endpoint:r,headers:l,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if(s)a.push(s)}if(a.length===0)return null;return new ie({resource:e,spanProcessors:a})}createLoggerProvider(e){let t=y(this.options.logsExporter);if(t.length===0)return null;let r=t.map((l)=>{let a=ge(l,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if(!a)return null;return new _(a,{maxQueueSize:this.options.logMaxQueueSize??2048,maxExportBatchSize:this.options.logBatchSize??512,scheduledDelayMillis:this.options.logBatchTimeoutMs??this.options.logBatchTimeout??5000})}).filter((l)=>l!==null);if(r.length===0)return null;return new E({resource:e,processors:r})}}function H(e){let t=new c(e),r=t.createTelemetryService(e);return r.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:r}}function j(e){if(S())return{telemetry:new T(e)};if(e.enabled!==!0)return{telemetry:new b({...e,distinctId:P(e.distinctId)})};return H(e)}function se(e){let{telemetry:t,provider:r}=j(e);return{telemetry:t,provider:r,flush:async()=>{let i=r;if(i&&typeof i.forceFlush==="function")try{await i.forceFlush()}catch{}},dispose:async()=>{await Promise.allSettled([t.dispose(),r?.dispose()])}}}function y(e){if(!e)return[];return(Array.isArray(e)?e:e.split(",")).map((r)=>r.trim()).filter((r)=>r==="console"||r==="otlp")}function ge(e,t){if(e==="console")return new p;if(!t.endpoint)return null;let r=A(t.endpoint,"/v1/logs");return new N({url:r,headers:t.headers})}function fe(e,t){if(e==="console")return new le(new ae);if(!t.endpoint)return null;let r=A(t.endpoint,"/v1/traces");return new re(new Y({url:r,headers:t.headers}))}function ue(e,t){if(e==="console")return new w({exporter:new ee,exportIntervalMillis:t.interval,exportTimeoutMillis:t.timeout});if(!t.endpoint)return null;let r=A(t.endpoint,"/v1/metrics");return new w({exporter:new V({url:r,headers:t.headers}),exportIntervalMillis:t.interval,exportTimeoutMillis:t.timeout})}function A(e,t){let r=new URL(e),l=r.pathname.endsWith("/")?r.pathname.slice(0,-1):r.pathname;return r.pathname=l.endsWith(t)?l:`${l}${t}`,r.toString()}export{H as createOpenTelemetryTelemetryService,j as createConfiguredTelemetryService,se as createConfiguredTelemetryHandle,c as OpenTelemetryProvider,u as OpenTelemetryAdapter};
|
|
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,r,l,a=!1){if(!this.meter||!a&&!this.isEnabled())return;let i=this.counters.get(e);if(!i)i=this.meter.createCounter(e,l?{description:l}:void 0),this.counters.set(e,i);i.add(t,this.flattenProperties(this.buildAttributes(r)))}recordHistogram(e,t,r,l,a=!1){if(!this.meter||!a&&!this.isEnabled())return;let i=this.histograms.get(e);if(!i)i=this.meter.createHistogram(e,l?{description:l}:void 0),this.histograms.set(e,i);i.record(t,this.flattenProperties(this.buildAttributes(r)))}recordGauge(e,t,r,l,a=!1){if(!this.meter||!a&&!this.isEnabled())return;let i=this.buildAttributes(r),s=JSON.stringify(i),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 d=g;if(!d)d=new Map,this.gaugeValues.set(e,d);if(!this.gauges.has(e)){let n=this.meter.createObservableGauge(e,l?{description:l}:void 0);n.addCallback((m)=>{for(let v of this.snapshotGaugeSeries(e))m.observe(v.value,this.flattenProperties(v.attributes))}),this.gauges.set(e,n)}d.set(s,{value:t,attributes:i})}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,r){if(!this.logger)return;let l=this.flattenProperties(this.buildAttributes(t,r));this.logger.emit({severityText:"INFO",body:e,attributes:l})}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(),(r)=>({value:r.value,attributes:r.attributes?{...r.attributes}:void 0}))}flattenProperties(e,t="",r=new WeakSet,l=0){if(!e)return{};let a={},i=100,s=10;for(let[g,d]of Object.entries(e)){if(g==="__proto__"||g==="constructor"||g==="prototype")continue;let n=t?`${t}.${g}`:g;if(d===null||d===void 0){a[n]=String(d);continue}if(Array.isArray(d)){let m=d.length>i?d.slice(0,i):d;try{a[n]=JSON.stringify(m)}catch{a[n]="[UnserializableArray]"}if(d.length>i)a[`${n}_truncated`]=!0,a[`${n}_original_length`]=d.length;continue}if(typeof d==="object"){if(d instanceof Date){a[n]=d.toISOString();continue}if(d instanceof Error){a[n]=d.message;continue}if(r.has(d)){a[n]="[Circular]";continue}if(l>=s){a[n]="[MaxDepthExceeded]";continue}r.add(d),Object.assign(a,this.flattenProperties(d,n,r,l+1));continue}if(H(d)){a[n]=d;continue}try{a[n]=JSON.stringify(d)}catch{a[n]=String(d)}}return a}}function H(e){return typeof e==="string"||typeof e==="number"||typeof e==="boolean"}import{metrics as L,trace as M}from"@opentelemetry/api";import{logs as C}from"@opentelemetry/api-logs";import{OTLPLogExporter as V}from"@opentelemetry/exporter-logs-otlp-http";import{OTLPMetricExporter as N}from"@opentelemetry/exporter-metrics-otlp-http";import{OTLPTraceExporter as Y}from"@opentelemetry/exporter-trace-otlp-http";import{resourceFromAttributes as R}from"@opentelemetry/resources";import{BatchLogRecordProcessor as _,ConsoleLogRecordExporter as p,LoggerProvider as E}from"@opentelemetry/sdk-logs";import{ConsoleMetricExporter as ee,MeterProvider as te,PeriodicExportingMetricReader as w}from"@opentelemetry/sdk-metrics";import{BatchSpanProcessor as re,ConsoleSpanExporter as ae,SimpleSpanProcessor as le}from"@opentelemetry/sdk-trace-base";import{NodeTracerProvider as ie}from"@opentelemetry/sdk-trace-node";import{ATTR_SERVICE_NAME as de,ATTR_SERVICE_VERSION as ne}from"@opentelemetry/semantic-conventions";import{mkdirSync as Ae,readFileSync as J,writeFileSync as ve}from"node:fs";import{resolveGlobalSettingsPath as W}from"@cline/shared/storage";import{z as f}from"zod";import{SDK_ERROR_TELEMETRY_EVENT as Pe}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((r,l)=>r.localeCompare(l));return t.length>0?t:void 0}),O=f.object({telemetryOptOut:f.boolean().default(!1).catch(!1),disabledTools:o.optional(),disabledPlugins:o.optional()}).strip().transform((e)=>{let t={telemetryOptOut:e.telemetryOptOut};if(e.disabledTools?.length)t.disabledTools=e.disabledTools;if(e.disabledPlugins?.length)t.disabledPlugins=e.disabledPlugins;return t});function G(){return O.parse({})}function $(){let e=W(),t;try{t=JSON.parse(J(e,"utf8"))}catch{return G()}let r=O.safeParse(t);return r.success?r.data:G()}function S(){return $().telemetryOptOut}import{existsSync as F,mkdirSync as B,readFileSync as I,writeFileSync as K}from"node:fs";import{resolve as U}from"node:path";import{resolveSessionDataDir as Q}from"@cline/shared/storage";import{nanoid as Z}from"nanoid";import*as k from"node-machine-id";var X="machine-id";function P(e){let t=e?.trim();if(t)return t;let r=D();if(r)return r;return q()}function x(){let e=k;return e.machineIdSync??e.default?.machineIdSync}function D(){try{let e=x();if(!e)return;return e().trim()||void 0}catch{return}}function q(){let e=Q(),t=U(e,X);try{if(F(t)){let l=I(t,"utf8").trim();if(l.length>0)return l}}catch{}let r=`cl-${Z()}`;try{B(e,{recursive:!0}),K(t,r,"utf8")}catch{}return r}class h{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,r,l,a){if(!a&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"counter",name:e,value:t,attributes:r,description:l,required:a===!0})}recordHistogram(e,t,r,l,a){if(!a&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"histogram",name:e,value:t,attributes:r,description:l,required:a===!0})}recordGauge(e,t,r,l,a){if(!a&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"gauge",name:e,value:t,attributes:r,description:l,required:a===!0})}isEnabled(){return typeof this.enabled==="function"?this.enabled():this.enabled}async flush(){}async dispose(){}}class b{adapters;metadata;distinctId;commonProperties;constructor(e={}){if(this.adapters=[...e.adapters??[]],e.logger)this.adapters.push(new h({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 r of this.adapters)r.emit(e.event,t)}captureRequired(e,t){let r=this.buildAttributes(t);for(let l of this.adapters)l.emitRequired(e,r)}recordCounter(e,t,r,l,a=!1){let i=this.buildAttributes(r);for(let s of this.adapters)s.recordCounter(e,t,i,l,a)}recordHistogram(e,t,r,l,a=!1){let i=this.buildAttributes(r);for(let s of this.adapters)s.recordHistogram(e,t,i,l,a)}recordGauge(e,t,r,l,a=!1){let i=this.buildAttributes(r);for(let s of this.adapters)s.recordGauge(e,t,i,l,a)}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 T{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 c{meterProvider;loggerProvider;tracerProvider;options;constructor(e={}){this.options=e;let t=R({[de]:e.serviceName??"cline",...e.serviceVersion?{[ne]:e.serviceVersion}:{}});if(this.meterProvider=this.createMeterProvider(t),this.loggerProvider=this.createLoggerProvider(t),this.tracerProvider=this.createTracerProvider(t),this.meterProvider)L.setGlobalMeterProvider(this.meterProvider);if(this.loggerProvider)C.setGlobalLoggerProvider(this.loggerProvider);if(this.tracerProvider)this.tracerProvider.register()}getTracer(e="cline",t){return M.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 b({...e,adapters:[t],distinctId:P(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 r=Math.max(1000,this.options.metricExportIntervalMs??this.options.metricExportInterval??60000),l=Math.min(30000,Math.floor(r*0.8)),a=t.map((i)=>ue(i,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json",interval:r,timeout:l})).filter((i)=>i!==null);if(a.length===0)return null;return new te({resource:e,readers:a})}createTracerProvider(e){let t=y(this.options.tracesExporter);if(t.length===0)return null;let r=this.options.otlpTracesEndpoint??this.options.otlpEndpoint,l=this.options.otlpTracesHeaders??this.options.otlpHeaders,a=[];for(let i of t){let s=fe(i,{endpoint:r,headers:l,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if(s)a.push(s)}if(a.length===0)return null;return new ie({resource:e,spanProcessors:a})}createLoggerProvider(e){let t=y(this.options.logsExporter);if(t.length===0)return null;let r=t.map((l)=>{let a=ge(l,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if(!a)return null;return new _(a,{maxQueueSize:this.options.logMaxQueueSize??2048,maxExportBatchSize:this.options.logBatchSize??512,scheduledDelayMillis:this.options.logBatchTimeoutMs??this.options.logBatchTimeout??5000})}).filter((l)=>l!==null);if(r.length===0)return null;return new E({resource:e,processors:r})}}function j(e){let t=new c(e),r=t.createTelemetryService(e);return r.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:r}}function z(e){if(S())return{telemetry:new T(e)};if(e.enabled!==!0)return{telemetry:new b({...e,distinctId:P(e.distinctId)})};return j(e)}function se(e){let{telemetry:t,provider:r}=z(e);return{telemetry:t,provider:r,flush:async()=>{let i=r;if(i&&typeof i.forceFlush==="function")try{await i.forceFlush()}catch{}},dispose:async()=>{await Promise.allSettled([t.dispose(),r?.dispose()])}}}function y(e){if(!e)return[];return(Array.isArray(e)?e:e.split(",")).map((r)=>r.trim()).filter((r)=>r==="console"||r==="otlp")}function ge(e,t){if(e==="console")return new p;if(!t.endpoint)return null;let r=A(t.endpoint,"/v1/logs");return new V({url:r,headers:t.headers})}function fe(e,t){if(e==="console")return new le(new ae);if(!t.endpoint)return null;let r=A(t.endpoint,"/v1/traces");return new re(new Y({url:r,headers:t.headers}))}function ue(e,t){if(e==="console")return new w({exporter:new ee,exportIntervalMillis:t.interval,exportTimeoutMillis:t.timeout});if(!t.endpoint)return null;let r=A(t.endpoint,"/v1/metrics");return new w({exporter:new N({url:r,headers:t.headers}),exportIntervalMillis:t.interval,exportTimeoutMillis:t.timeout})}function A(e,t){let r=new URL(e),l=r.pathname.endsWith("/")?r.pathname.slice(0,-1):r.pathname;return r.pathname=l.endsWith(t)?l:`${l}${t}`,r.toString()}export{j as createOpenTelemetryTelemetryService,z as createConfiguredTelemetryService,se as createConfiguredTelemetryHandle,c as OpenTelemetryProvider,u as OpenTelemetryAdapter};
|
|
@@ -1,8 +1,10 @@
|
|
|
1
|
+
import type { BasicLogger } from "@cline/shared";
|
|
1
2
|
import type { SessionMessagesArtifactUploader } from "../../types/session";
|
|
2
3
|
import { UnifiedSessionPersistenceService } from "./persistence-service";
|
|
3
4
|
export declare class FileSessionService extends UnifiedSessionPersistenceService {
|
|
4
5
|
constructor(sessionsDir?: string, options?: {
|
|
5
6
|
messagesArtifactUploader?: SessionMessagesArtifactUploader;
|
|
7
|
+
logger?: BasicLogger;
|
|
6
8
|
});
|
|
7
9
|
ensureSessionsDir(): string;
|
|
8
10
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type * as LlmsProviders from "@cline/llms";
|
|
2
|
-
import type { AgentResult } from "@cline/shared";
|
|
2
|
+
import type { AgentResult, BasicLogger } from "@cline/shared";
|
|
3
3
|
import type { SubAgentEndContext, SubAgentStartContext } from "../../extensions/tools/team";
|
|
4
4
|
import type { HookEventPayload } from "../../hooks";
|
|
5
5
|
import type { SessionStatus } from "../../types/common";
|
|
@@ -15,6 +15,7 @@ export declare class UnifiedSessionPersistenceService {
|
|
|
15
15
|
private static readonly TEAM_HEARTBEAT_LOG_INTERVAL_MS;
|
|
16
16
|
constructor(adapter: SessionPersistenceAdapter, options?: {
|
|
17
17
|
messagesArtifactUploader?: SessionMessagesArtifactUploader;
|
|
18
|
+
logger?: BasicLogger;
|
|
18
19
|
});
|
|
19
20
|
private toPersistedMessages;
|
|
20
21
|
ensureSessionsDir(): string;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { BasicLogger } from "@cline/shared";
|
|
1
2
|
import type { SqliteSessionStore } from "../../services/storage/sqlite-session-store";
|
|
2
3
|
import type { SessionMessagesArtifactUploader } from "../../types/session";
|
|
3
4
|
import { type CreateRootSessionInput } from "../models/session-row";
|
|
@@ -7,6 +8,7 @@ export declare class CoreSessionService extends UnifiedSessionPersistenceService
|
|
|
7
8
|
constructor(store: SqliteSessionStore, options?: {
|
|
8
9
|
sessionArtifactsDir?: string;
|
|
9
10
|
messagesArtifactUploader?: SessionMessagesArtifactUploader;
|
|
11
|
+
logger?: BasicLogger;
|
|
10
12
|
});
|
|
11
13
|
createRootSession(input: CreateRootSessionInput): void;
|
|
12
14
|
}
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
import type * as LlmsProviders from "@cline/llms";
|
|
2
|
+
import type { BasicLogger } from "@cline/shared";
|
|
2
3
|
import { SessionArtifacts } from "../../services/session-artifacts";
|
|
3
4
|
import type { SessionMessagesArtifactUploader, SessionPersistenceAdapter } from "../../types/session";
|
|
4
5
|
import { type SessionManifest } from "../models/session-manifest";
|
|
5
6
|
export declare class SessionManifestStore {
|
|
6
7
|
private readonly adapter;
|
|
7
8
|
private readonly messagesArtifactUploader?;
|
|
9
|
+
private readonly logger?;
|
|
8
10
|
readonly artifacts: SessionArtifacts;
|
|
9
|
-
constructor(adapter: SessionPersistenceAdapter, messagesArtifactUploader?: SessionMessagesArtifactUploader | undefined);
|
|
11
|
+
constructor(adapter: SessionPersistenceAdapter, messagesArtifactUploader?: SessionMessagesArtifactUploader | undefined, logger?: BasicLogger | undefined);
|
|
10
12
|
ensureSessionsDir(): string;
|
|
11
13
|
initializeMessagesFile(sessionId: string, path: string, startedAt: string): void;
|
|
12
14
|
writeSessionManifest(manifestPath: string, manifest: SessionManifest): void;
|
package/dist/settings/types.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { UserInstructionConfigService } from "../extensions/config";
|
|
2
2
|
import type { BuiltinToolAvailabilityContext } from "../extensions/tools";
|
|
3
|
-
export type CoreSettingsType = "skills" | "workflows" | "rules" | "tools";
|
|
4
|
-
export type CoreSettingsItemKind = "skill" | "workflow" | "rule" | "tool";
|
|
3
|
+
export type CoreSettingsType = "skills" | "workflows" | "rules" | "tools" | "mcp";
|
|
4
|
+
export type CoreSettingsItemKind = "skill" | "workflow" | "rule" | "tool" | "mcp";
|
|
5
5
|
export type CoreSettingsItemSource = "global" | "workspace" | "builtin" | "global-plugin" | "workspace-plugin";
|
|
6
6
|
export interface CoreSettingsItem {
|
|
7
7
|
id: string;
|
|
@@ -18,6 +18,7 @@ export interface CoreSettingsSnapshot {
|
|
|
18
18
|
rules: CoreSettingsItem[];
|
|
19
19
|
skills: CoreSettingsItem[];
|
|
20
20
|
tools: CoreSettingsItem[];
|
|
21
|
+
mcp: CoreSettingsItem[];
|
|
21
22
|
}
|
|
22
23
|
export interface CoreSettingsListInput {
|
|
23
24
|
cwd?: string;
|
package/dist/types/config.d.ts
CHANGED
|
@@ -39,7 +39,7 @@ export interface CoreCompactionContext {
|
|
|
39
39
|
provider: string;
|
|
40
40
|
info?: ModelInfo;
|
|
41
41
|
};
|
|
42
|
-
|
|
42
|
+
maxInputTokens: number;
|
|
43
43
|
triggerTokens: number;
|
|
44
44
|
thresholdRatio: number;
|
|
45
45
|
utilizationRatio: number;
|
|
@@ -64,7 +64,7 @@ export interface CoreCompactionConfig {
|
|
|
64
64
|
thresholdRatio?: number;
|
|
65
65
|
reserveTokens?: number;
|
|
66
66
|
preserveRecentTokens?: number;
|
|
67
|
-
|
|
67
|
+
maxInputTokens?: number;
|
|
68
68
|
summarizer?: CoreCompactionSummarizerConfig;
|
|
69
69
|
compact?: (context: CoreCompactionContext) => Promise<CoreCompactionResult | undefined> | CoreCompactionResult | undefined;
|
|
70
70
|
}
|
package/dist/types/session.d.ts
CHANGED
|
@@ -5,7 +5,7 @@ import type { SessionRuntime } from "../runtime/orchestration/session-runtime-or
|
|
|
5
5
|
import type { SessionRow } from "../session/models/session-row";
|
|
6
6
|
import type { RootSessionArtifacts } from "../session/services/session-service";
|
|
7
7
|
import type { SessionSource, SessionStatus } from "./common";
|
|
8
|
-
import type { CoreSessionConfig } from "./config";
|
|
8
|
+
import type { CoreAgentMode, CoreSessionConfig } from "./config";
|
|
9
9
|
export type ActiveSession = {
|
|
10
10
|
sessionId: string;
|
|
11
11
|
config: CoreSessionConfig;
|
|
@@ -54,6 +54,7 @@ export type ActiveSession = {
|
|
|
54
54
|
export type PendingPrompt = {
|
|
55
55
|
id: string;
|
|
56
56
|
prompt: string;
|
|
57
|
+
mode?: CoreAgentMode;
|
|
57
58
|
delivery: "queue" | "steer";
|
|
58
59
|
userImages?: string[];
|
|
59
60
|
userFiles?: string[];
|
package/package.json
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cline/core",
|
|
3
3
|
"description": "Cline Core SDK for Node Runtime",
|
|
4
|
-
"version": "0.0.
|
|
4
|
+
"version": "0.0.40",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
7
|
-
"url": "https://github.com/cline/
|
|
8
|
-
"directory": "packages/core"
|
|
7
|
+
"url": "https://github.com/cline/cline",
|
|
8
|
+
"directory": "sdk/packages/core"
|
|
9
9
|
},
|
|
10
10
|
"type": "module",
|
|
11
11
|
"types": "./dist/index.d.ts",
|
|
@@ -33,20 +33,21 @@
|
|
|
33
33
|
}
|
|
34
34
|
},
|
|
35
35
|
"scripts": {
|
|
36
|
-
"build": "
|
|
37
|
-
"clean": "rm -rf dist node_modules",
|
|
36
|
+
"build": "bun run ./bun.mts && bun tsc -p tsconfig.build.json",
|
|
38
37
|
"typecheck": "bun tsc -p tsconfig.dev.json --noEmit && bun run typecheck:smoke",
|
|
39
38
|
"typecheck:smoke": "bun tsc -p tsconfig.smoke.json --noEmit",
|
|
40
39
|
"test": "bun run test:unit && bun run test:e2e",
|
|
40
|
+
"test:live": "vitest run --config vitest.config.ts src/extensions/context/compaction.live.test.ts",
|
|
41
41
|
"test:unit": "vitest run --config vitest.config.ts",
|
|
42
42
|
"test:e2e": "vitest run --config vitest.e2e.config.ts",
|
|
43
43
|
"verify:routines": "zsh -lc 'bunx vitest run src/cron/schedule-service.test.ts --config vitest.config.ts'",
|
|
44
44
|
"test:watch": "vitest --config vitest.config.ts"
|
|
45
45
|
},
|
|
46
46
|
"dependencies": {
|
|
47
|
-
"@cline/agents": "0.0.
|
|
48
|
-
"@cline/shared": "0.0.
|
|
49
|
-
"@cline/llms": "0.0.
|
|
47
|
+
"@cline/agents": "0.0.40",
|
|
48
|
+
"@cline/shared": "0.0.40",
|
|
49
|
+
"@cline/llms": "0.0.40",
|
|
50
|
+
"@modelcontextprotocol/sdk": "^1.29.0",
|
|
50
51
|
"@opentelemetry/api": "^1.9.0",
|
|
51
52
|
"@opentelemetry/api-logs": "^0.214.0",
|
|
52
53
|
"@opentelemetry/exporter-logs-otlp-http": "^0.214.0",
|