@cline/core 0.0.41 → 0.0.42
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/cron/runner/cron-runner.d.ts +2 -0
- package/dist/cron/service/schedule-service.d.ts +1 -1
- package/dist/extensions/context/compaction.d.ts +15 -1
- package/dist/extensions/plugin-sandbox-bootstrap.js +1 -1
- package/dist/hub/daemon/entry.js +136 -136
- package/dist/hub/index.js +132 -132
- package/dist/hub/runtime-host/hub-runtime-host.d.ts +1 -0
- package/dist/index.d.ts +6 -5
- package/dist/index.js +135 -135
- package/dist/runtime/host/local-runtime-host.d.ts +4 -0
- package/dist/services/llms/provider-defaults.d.ts +1 -1
- package/dist/services/llms/provider-settings.d.ts +2 -0
- package/dist/services/plugin-tools.d.ts +13 -0
- package/dist/services/providers/local-provider-registry.d.ts +9 -0
- package/dist/services/providers/local-provider-service.d.ts +2 -33
- package/dist/services/providers/provider-config-fields.d.ts +37 -0
- package/dist/services/storage/sqlite-session-store.d.ts +1 -1
- package/dist/services/telemetry/core-events.d.ts +75 -0
- package/dist/services/telemetry/index.js +1 -1
- package/dist/session/models/session-manifest.d.ts +2 -0
- package/dist/session/services/persistence-service.d.ts +2 -2
- package/dist/session/team/team-child-session-manager.d.ts +2 -2
- package/dist/types/chat-schema.d.ts +2 -0
- package/dist/types/common.d.ts +6 -1
- package/dist/types/session.d.ts +2 -0
- package/dist/types.d.ts +2 -2
- package/package.json +6 -6
|
@@ -77,6 +77,8 @@ export declare class LocalRuntimeHost implements RuntimeHost {
|
|
|
77
77
|
}, fallbackAutomation?: NonNullable<CoreSessionConfig["extensionContext"]>["automation"]): Promise<void>;
|
|
78
78
|
private executeTurn;
|
|
79
79
|
private completeInteractiveTurn;
|
|
80
|
+
private resolveInteractiveStopStatus;
|
|
81
|
+
private resolveInteractiveStopExitCode;
|
|
80
82
|
private completeAbortedInteractiveTurn;
|
|
81
83
|
private executeAgentTurn;
|
|
82
84
|
/**
|
|
@@ -97,6 +99,8 @@ export declare class LocalRuntimeHost implements RuntimeHost {
|
|
|
97
99
|
private prepareTurnInput;
|
|
98
100
|
private ensureSessionPersisted;
|
|
99
101
|
private markTurnRunning;
|
|
102
|
+
private markTurnPending;
|
|
103
|
+
private markTurnIdle;
|
|
100
104
|
private persistSessionMetadata;
|
|
101
105
|
private finalizeSingleRun;
|
|
102
106
|
private failSession;
|
|
@@ -13,7 +13,7 @@ export interface BuiltInProviderManifest {
|
|
|
13
13
|
protocol?: Llms.ProviderProtocol;
|
|
14
14
|
}
|
|
15
15
|
export interface ProviderDefaults {
|
|
16
|
-
baseUrl
|
|
16
|
+
baseUrl?: string;
|
|
17
17
|
modelId: string;
|
|
18
18
|
knownModels?: Record<string, ModelInfo>;
|
|
19
19
|
capabilities?: ProviderCapability[];
|
|
@@ -65,6 +65,7 @@ export declare const AwsSettingsSchema: z.ZodObject<{
|
|
|
65
65
|
"api-key": "api-key";
|
|
66
66
|
profile: "profile";
|
|
67
67
|
iam: "iam";
|
|
68
|
+
apikey: "apikey";
|
|
68
69
|
}>>;
|
|
69
70
|
usePromptCache: z.ZodOptional<z.ZodBoolean>;
|
|
70
71
|
useCrossRegionInference: z.ZodOptional<z.ZodBoolean>;
|
|
@@ -173,6 +174,7 @@ export declare const ProviderSettingsSchema: z.ZodObject<{
|
|
|
173
174
|
"api-key": "api-key";
|
|
174
175
|
profile: "profile";
|
|
175
176
|
iam: "iam";
|
|
177
|
+
apikey: "apikey";
|
|
176
178
|
}>>;
|
|
177
179
|
usePromptCache: z.ZodOptional<z.ZodBoolean>;
|
|
178
180
|
useCrossRegionInference: z.ZodOptional<z.ZodBoolean>;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { PluginInitializationFailure, PluginInitializationWarning } from "../extensions/plugin/plugin-load-report";
|
|
1
2
|
export interface PluginToolSummary {
|
|
2
3
|
name: string;
|
|
3
4
|
pluginName: string;
|
|
@@ -6,6 +7,18 @@ export interface PluginToolSummary {
|
|
|
6
7
|
enabled: boolean;
|
|
7
8
|
description?: string;
|
|
8
9
|
}
|
|
10
|
+
export interface ListPluginToolsResult {
|
|
11
|
+
tools: PluginToolSummary[];
|
|
12
|
+
failures: PluginInitializationFailure[];
|
|
13
|
+
warnings: PluginInitializationWarning[];
|
|
14
|
+
}
|
|
15
|
+
export declare function listPluginToolsWithDiagnostics(input: {
|
|
16
|
+
workspacePath: string;
|
|
17
|
+
cwd?: string;
|
|
18
|
+
disabledToolNames?: ReadonlyArray<string>;
|
|
19
|
+
providerId?: string;
|
|
20
|
+
modelId?: string;
|
|
21
|
+
}): Promise<ListPluginToolsResult>;
|
|
9
22
|
export declare function listPluginTools(input: {
|
|
10
23
|
workspacePath: string;
|
|
11
24
|
cwd?: string;
|
|
@@ -5,6 +5,9 @@ import type { ProviderSettingsManager } from "../storage/provider-settings-manag
|
|
|
5
5
|
export declare const StoredModelEntrySchema: z.ZodObject<{
|
|
6
6
|
id: z.ZodOptional<z.ZodString>;
|
|
7
7
|
name: z.ZodOptional<z.ZodString>;
|
|
8
|
+
maxTokens: z.ZodOptional<z.ZodNumber>;
|
|
9
|
+
contextWindow: z.ZodOptional<z.ZodNumber>;
|
|
10
|
+
maxInputTokens: z.ZodOptional<z.ZodNumber>;
|
|
8
11
|
capabilities: z.ZodOptional<z.ZodArray<z.ZodEnum<{
|
|
9
12
|
images: "images";
|
|
10
13
|
tools: "tools";
|
|
@@ -109,6 +112,9 @@ export declare const StoredProviderEntrySchema: z.ZodObject<{
|
|
|
109
112
|
models: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
110
113
|
id: z.ZodOptional<z.ZodString>;
|
|
111
114
|
name: z.ZodOptional<z.ZodString>;
|
|
115
|
+
maxTokens: z.ZodOptional<z.ZodNumber>;
|
|
116
|
+
contextWindow: z.ZodOptional<z.ZodNumber>;
|
|
117
|
+
maxInputTokens: z.ZodOptional<z.ZodNumber>;
|
|
112
118
|
capabilities: z.ZodOptional<z.ZodArray<z.ZodEnum<{
|
|
113
119
|
images: "images";
|
|
114
120
|
tools: "tools";
|
|
@@ -175,6 +181,9 @@ export declare const StoredModelsFileSchema: z.ZodObject<{
|
|
|
175
181
|
models: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
176
182
|
id: z.ZodOptional<z.ZodString>;
|
|
177
183
|
name: z.ZodOptional<z.ZodString>;
|
|
184
|
+
maxTokens: z.ZodOptional<z.ZodNumber>;
|
|
185
|
+
contextWindow: z.ZodOptional<z.ZodNumber>;
|
|
186
|
+
maxInputTokens: z.ZodOptional<z.ZodNumber>;
|
|
178
187
|
capabilities: z.ZodOptional<z.ZodArray<z.ZodEnum<{
|
|
179
188
|
images: "images";
|
|
180
189
|
tools: "tools";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type AddProviderActionRequest, type OAuthProviderId, type ProviderCapability, type ProviderListItem, type ProviderModel, type SaveProviderSettingsActionRequest } from "@cline/shared";
|
|
1
|
+
import { type AddProviderActionRequest, type ITelemetryService, type OAuthProviderId, type ProviderCapability, type ProviderListItem, type ProviderModel, type SaveProviderSettingsActionRequest } from "@cline/shared";
|
|
2
2
|
import type { ProviderClient, ProviderConfig, ProviderProtocol, ProviderSettings } from "../../services/llms/provider-settings";
|
|
3
3
|
import type { ProviderSettingsManager } from "../storage/provider-settings-manager";
|
|
4
4
|
export { ensureCustomProvidersLoaded } from "./local-provider-registry";
|
|
@@ -55,7 +55,7 @@ export declare function refreshProviderModelsFromSource(manager: ProviderSetting
|
|
|
55
55
|
modelsCount?: number;
|
|
56
56
|
}>;
|
|
57
57
|
export declare function normalizeOAuthProvider(provider: string): OAuthProviderId;
|
|
58
|
-
export declare function loginLocalProvider(providerId: OAuthProviderId, existing: ProviderSettings | undefined, openUrl: (url: string) => void): Promise<{
|
|
58
|
+
export declare function loginLocalProvider(providerId: OAuthProviderId, existing: ProviderSettings | undefined, openUrl: (url: string) => void, telemetry?: ITelemetryService): Promise<{
|
|
59
59
|
access: string;
|
|
60
60
|
refresh: string;
|
|
61
61
|
expires: number;
|
|
@@ -68,34 +68,3 @@ export declare function saveLocalProviderOAuthCredentials(manager: ProviderSetti
|
|
|
68
68
|
accountId?: string;
|
|
69
69
|
}): ProviderSettings;
|
|
70
70
|
export declare function resolveLocalClineAuthToken(settings: ProviderSettings | undefined): string | undefined;
|
|
71
|
-
export type ProviderConfigFieldKey = "apiKey" | "baseUrl";
|
|
72
|
-
export interface ProviderConfigFieldRequirement {
|
|
73
|
-
defaultValue?: string;
|
|
74
|
-
}
|
|
75
|
-
export interface ProviderConfigFields {
|
|
76
|
-
providerId: string;
|
|
77
|
-
authMethod: "api-key" | "oauth" | "local";
|
|
78
|
-
fields: Partial<Record<ProviderConfigFieldKey, ProviderConfigFieldRequirement>>;
|
|
79
|
-
}
|
|
80
|
-
/**
|
|
81
|
-
* Project a provider into the inputs a configure-dialog should render.
|
|
82
|
-
*
|
|
83
|
-
* No fields are marked "required". `llms` no longer pre-flights credentials,
|
|
84
|
-
* so a missing API key surfaces as the provider's own auth error rather than
|
|
85
|
-
* a synthetic SDK failure. UIs may still require fields client-side if they
|
|
86
|
-
* want, but the runtime does not.
|
|
87
|
-
*
|
|
88
|
-
* - OAuth providers (`cline`, `oca`, `openai-codex`) return `authMethod:
|
|
89
|
-
* "oauth"` with no fields; the configure UI should route to the OAuth
|
|
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.
|
|
93
|
-
* - All other providers return `apiKey`. Built-in local/proxy-style providers
|
|
94
|
-
* with user-supplied endpoints, plus user-added providers with saved
|
|
95
|
-
* endpoints, also return a pre-filled `baseUrl` field.
|
|
96
|
-
*
|
|
97
|
-
* Returns the same fallback shape for unknown providers (single `apiKey`
|
|
98
|
-
* input, no default base URL) so callers can render a reasonable configure
|
|
99
|
-
* dialog without per-id branches.
|
|
100
|
-
*/
|
|
101
|
-
export declare function getProviderConfigFields(providerId: string): ProviderConfigFields;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
export type ProviderConfigFieldKey = "apiKey" | "baseUrl" | "awsRegion" | "awsProfile";
|
|
2
|
+
export interface ProviderConfigFieldRequirement {
|
|
3
|
+
defaultValue?: string;
|
|
4
|
+
label?: string;
|
|
5
|
+
note?: string;
|
|
6
|
+
placeholder?: string;
|
|
7
|
+
optional?: boolean;
|
|
8
|
+
}
|
|
9
|
+
export interface ProviderConfigFields {
|
|
10
|
+
providerId: string;
|
|
11
|
+
authMethod: "api-key" | "oauth" | "local";
|
|
12
|
+
fields: Partial<Record<ProviderConfigFieldKey, ProviderConfigFieldRequirement>>;
|
|
13
|
+
/** Optional description shown above the fields (e.g. AWS region auto-fill hint). */
|
|
14
|
+
description?: string;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Project a provider into the inputs a configure-dialog should render.
|
|
18
|
+
*
|
|
19
|
+
* No fields are marked "required". `llms` no longer pre-flights credentials,
|
|
20
|
+
* so a missing API key surfaces as the provider's own auth error rather than
|
|
21
|
+
* a synthetic SDK failure. UIs may still require fields client-side if they
|
|
22
|
+
* want, but the runtime does not.
|
|
23
|
+
*
|
|
24
|
+
* - OAuth providers (`cline`, `oca`, `openai-codex`) return `authMethod:
|
|
25
|
+
* "oauth"` with no fields; the configure UI should route to the OAuth
|
|
26
|
+
* login flow instead.
|
|
27
|
+
* - Local auth providers return `authMethod: "local"` with no fields. The
|
|
28
|
+
* configure UI should show provider-specific local readiness instead.
|
|
29
|
+
* - All other providers return `apiKey`. Built-in local/proxy-style providers
|
|
30
|
+
* with user-supplied endpoints, plus user-added providers with saved
|
|
31
|
+
* endpoints, also return a pre-filled `baseUrl` field.
|
|
32
|
+
*
|
|
33
|
+
* Returns the same fallback shape for unknown providers (single `apiKey`
|
|
34
|
+
* input, no default base URL) so callers can render a reasonable configure
|
|
35
|
+
* dialog without per-id branches.
|
|
36
|
+
*/
|
|
37
|
+
export declare function getProviderConfigFields(providerId: string): ProviderConfigFields;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type SqliteDb } from "@cline/shared/db";
|
|
2
|
-
import type
|
|
2
|
+
import { type SessionStatus } from "../../types/common";
|
|
3
3
|
import type { SessionRecord } from "../../types/sessions";
|
|
4
4
|
import type { SessionStore } from "../../types/storage";
|
|
5
5
|
export interface SqliteSessionStoreOptions {
|
|
@@ -25,6 +25,7 @@ export declare const CORE_TELEMETRY_EVENTS: {
|
|
|
25
25
|
readonly AUTH_SUCCEEDED: "user.auth_succeeded";
|
|
26
26
|
readonly AUTH_FAILED: "user.auth_failed";
|
|
27
27
|
readonly AUTH_LOGGED_OUT: "user.auth_logged_out";
|
|
28
|
+
readonly PROVIDER_CONFIGURED: "user.provider_configured";
|
|
28
29
|
readonly TELEMETRY_OPT_OUT: "user.opt_out";
|
|
29
30
|
};
|
|
30
31
|
readonly TASK: {
|
|
@@ -45,6 +46,8 @@ export declare const CORE_TELEMETRY_EVENTS: {
|
|
|
45
46
|
readonly AGENT_TEAM_CREATED: "task.agent_team_created";
|
|
46
47
|
readonly SUBAGENT_STARTED: "task.subagent_started";
|
|
47
48
|
readonly SUBAGENT_COMPLETED: "task.subagent_completed";
|
|
49
|
+
readonly COMPACTION_EXECUTED: "task.compaction_executed";
|
|
50
|
+
readonly COMPACTION_SKIPPED: "task.compaction_skipped";
|
|
48
51
|
};
|
|
49
52
|
readonly HOOKS: {
|
|
50
53
|
readonly DISCOVERY_COMPLETED: "hooks.discovery_completed";
|
|
@@ -86,6 +89,17 @@ export declare function captureAuthStarted(telemetry: ITelemetryService | undefi
|
|
|
86
89
|
export declare function captureAuthSucceeded(telemetry: ITelemetryService | undefined, provider?: string): void;
|
|
87
90
|
export declare function captureAuthFailed(telemetry: ITelemetryService | undefined, provider?: string, errorMessage?: string): void;
|
|
88
91
|
export declare function captureAuthLoggedOut(telemetry: ITelemetryService | undefined, provider?: string, reason?: string): void;
|
|
92
|
+
/**
|
|
93
|
+
* Fires when the user finishes configuring a "bring your own provider"
|
|
94
|
+
* (API-key based) provider during onboarding or via settings.
|
|
95
|
+
*
|
|
96
|
+
* Unlike the OAuth/device-code `captureAuth*` events, the configure step is a
|
|
97
|
+
* synchronous local credential save with no network roundtrip, so there is no
|
|
98
|
+
* start/fail counterpart — the credential is validated lazily on the first
|
|
99
|
+
* subsequent API call. Mirrors the `{ provider }` payload shape of
|
|
100
|
+
* {@link captureAuthSucceeded} for funnel consistency.
|
|
101
|
+
*/
|
|
102
|
+
export declare function captureProviderConfigured(telemetry: ITelemetryService | undefined, provider?: string): void;
|
|
89
103
|
export declare function captureTelemetryOptOut(telemetry: ITelemetryService | undefined, properties?: TelemetryProperties): void;
|
|
90
104
|
export declare function identifyAccount(telemetry: ITelemetryService | undefined, account: {
|
|
91
105
|
id?: string;
|
|
@@ -199,3 +213,64 @@ export declare function captureSubagentExecution(telemetry: ITelemetryService |
|
|
|
199
213
|
type?: "agent" | "team";
|
|
200
214
|
} & Partial<TelemetryAgentIdentityProperties>): void;
|
|
201
215
|
export declare function captureHookDiscovery(telemetry: ITelemetryService | undefined, hookName: string, globalCount: number, workspaceCount: number): void;
|
|
216
|
+
/**
|
|
217
|
+
* Identifies which compaction implementation produced a
|
|
218
|
+
* `task.compaction_executed` / `task.compaction_skipped` event.
|
|
219
|
+
*
|
|
220
|
+
* - `basic` — built-in token-budget truncation
|
|
221
|
+
* (see `extensions/context/basic-compaction.ts`).
|
|
222
|
+
* - `agentic` — built-in LLM-powered summarization
|
|
223
|
+
* (see `extensions/context/agentic-compaction.ts`).
|
|
224
|
+
* - `custom` — user-supplied `compaction.compact()` callback on
|
|
225
|
+
* `CoreSessionConfig`.
|
|
226
|
+
*/
|
|
227
|
+
export type TelemetryCompactionStrategy = "basic" | "agentic" | "custom";
|
|
228
|
+
/**
|
|
229
|
+
* Trigger mode for a compaction attempt.
|
|
230
|
+
*
|
|
231
|
+
* - `auto` — fired automatically by `createContextCompactionPrepareTurn`
|
|
232
|
+
* when input tokens exceed the configured threshold.
|
|
233
|
+
* - `manual` — user-initiated (e.g. CLI `/compact`).
|
|
234
|
+
*/
|
|
235
|
+
export type TelemetryCompactionMode = "auto" | "manual";
|
|
236
|
+
export interface CaptureCompactionExecutedProperties {
|
|
237
|
+
ulid: string;
|
|
238
|
+
strategy: TelemetryCompactionStrategy;
|
|
239
|
+
mode: TelemetryCompactionMode;
|
|
240
|
+
messagesBefore: number;
|
|
241
|
+
messagesAfter: number;
|
|
242
|
+
messagesRemoved: number;
|
|
243
|
+
tokensBefore: number;
|
|
244
|
+
tokensAfter: number;
|
|
245
|
+
tokensSaved: number;
|
|
246
|
+
triggerTokens: number;
|
|
247
|
+
maxInputTokens: number;
|
|
248
|
+
thresholdRatio: number;
|
|
249
|
+
durationMs: number;
|
|
250
|
+
provider?: string;
|
|
251
|
+
modelId?: string;
|
|
252
|
+
}
|
|
253
|
+
export declare function captureCompactionExecuted(telemetry: ITelemetryService | undefined, properties: CaptureCompactionExecutedProperties & Partial<TelemetryAgentIdentityProperties>): void;
|
|
254
|
+
export interface CaptureCompactionSkippedProperties {
|
|
255
|
+
ulid: string;
|
|
256
|
+
strategy: TelemetryCompactionStrategy;
|
|
257
|
+
mode: TelemetryCompactionMode;
|
|
258
|
+
/**
|
|
259
|
+
* Why the strategy decided not to compact. Currently only one value is
|
|
260
|
+
* emitted by the wrapper:
|
|
261
|
+
* - `no_result` — strategy returned `undefined` (e.g. there was nothing
|
|
262
|
+
* safe to remove). Strategy *exceptions* propagate up instead of
|
|
263
|
+
* firing telemetry, so no `strategy_error` value is emitted today.
|
|
264
|
+
* The field is kept loosely typed (`string`) so additional reasons can
|
|
265
|
+
* be introduced without changing the schema.
|
|
266
|
+
*/
|
|
267
|
+
reason: string;
|
|
268
|
+
tokensBefore: number;
|
|
269
|
+
triggerTokens: number;
|
|
270
|
+
maxInputTokens: number;
|
|
271
|
+
thresholdRatio: number;
|
|
272
|
+
durationMs: number;
|
|
273
|
+
provider?: string;
|
|
274
|
+
modelId?: string;
|
|
275
|
+
}
|
|
276
|
+
export declare function captureCompactionSkipped(telemetry: ITelemetryService | undefined, properties: CaptureCompactionSkippedProperties & Partial<TelemetryAgentIdentityProperties>): void;
|
|
@@ -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(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
|
+
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,l,i=!1){if(!this.meter||!i&&!this.isEnabled())return;let r=this.counters.get(e);if(!r)r=this.meter.createCounter(e,l?{description:l}:void 0),this.counters.set(e,r);r.add(t,this.flattenProperties(this.buildAttributes(a)))}recordHistogram(e,t,a,l,i=!1){if(!this.meter||!i&&!this.isEnabled())return;let r=this.histograms.get(e);if(!r)r=this.meter.createHistogram(e,l?{description:l}:void 0),this.histograms.set(e,r);r.record(t,this.flattenProperties(this.buildAttributes(a)))}recordGauge(e,t,a,l,i=!1){if(!this.meter||!i&&!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,l?{description:l}:void 0);s.addCallback((h)=>{for(let G of this.snapshotGaugeSeries(e))h.observe(G.value,this.flattenProperties(G.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 l=this.flattenProperties(this.buildAttributes(t,a));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(),(a)=>({value:a.value,attributes:a.attributes?{...a.attributes}:void 0}))}flattenProperties(e,t="",a=new WeakSet,l=0){if(!e)return{};let i={},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){i[s]=String(n);continue}if(Array.isArray(n)){let h=n.length>r?n.slice(0,r):n;try{i[s]=JSON.stringify(h)}catch{i[s]="[UnserializableArray]"}if(n.length>r)i[`${s}_truncated`]=!0,i[`${s}_original_length`]=n.length;continue}if(typeof n==="object"){if(n instanceof Date){i[s]=n.toISOString();continue}if(n instanceof Error){i[s]=n.message;continue}if(a.has(n)){i[s]="[Circular]";continue}if(l>=d){i[s]="[MaxDepthExceeded]";continue}a.add(n),Object.assign(i,this.flattenProperties(n,s,a,l+1));continue}if(J(n)){i[s]=n;continue}try{i[s]=JSON.stringify(n)}catch{i[s]=String(n)}}return i}}function J(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 ie,LoggerProvider as le}from"@opentelemetry/sdk-logs";import{ConsoleMetricExporter as re,MeterProvider as ne,PeriodicExportingMetricReader as z}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 Se,readFileSync as $,statSync as I,writeFileSync as we}from"node:fs";import{resolveGlobalSettingsPath as W}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,l)=>a.localeCompare(l));return t.length>0?t:void 0}),S=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 b(){return S.parse({})}var P;function B(e){if(e.disabledTools)Object.freeze(e.disabledTools);if(e.disabledPlugins)Object.freeze(e.disabledPlugins);return Object.freeze(e)}function K(e){let t;try{t=$(e,"utf8")}catch{return b()}try{let a=S.safeParse(JSON.parse(t));return a.success?a.data:b()}catch{return b()}}function U(){let e=W(),t=I(e,{throwIfNoEntry:!1}),a=t?.mtimeMs??0,l=t?.size??0,i=P;if(i&&i.path===e&&i.mtimeMs===a&&i.size===l)return i;let r=B(t?K(e):b());return P={path:e,mtimeMs:a,size:l,value:r},P}function k(){return U().value}function w(){return k().telemetryOptOut}import{existsSync as Q,mkdirSync as Z,readFileSync as X,writeFileSync as x}from"node:fs";import{resolve as T}from"node:path";import{resolveSessionDataDir as D}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=D(),t=T(e,M);try{if(Q(t)){let l=X(t,"utf8").trim();if(l.length>0)return l}}catch{}let a=`cl-${q()}`;try{Z(e,{recursive:!0}),x(t,a,"utf8")}catch{}return a}class y{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,l,i){if(!i&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"counter",name:e,value:t,attributes:a,description:l,required:i===!0})}recordHistogram(e,t,a,l,i){if(!i&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"histogram",name:e,value:t,attributes:a,description:l,required:i===!0})}recordGauge(e,t,a,l,i){if(!i&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"gauge",name:e,value:t,attributes:a,description:l,required:i===!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 y({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 l of this.adapters)l.emitRequired(e,a)}recordCounter(e,t,a,l,i=!1){let r=this.buildAttributes(a);for(let d of this.adapters)d.recordCounter(e,t,r,l,i)}recordHistogram(e,t,a,l,i=!1){let r=this.buildAttributes(a);for(let d of this.adapters)d.recordHistogram(e,t,r,l,i)}recordGauge(e,t,a,l,i=!1){let r=this.buildAttributes(a);for(let d of this.adapters)d.recordGauge(e,t,r,l,i)}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=o(this.options.metricsExporter);if(t.length===0)return null;let a=Math.max(1000,this.options.metricExportIntervalMs??this.options.metricExportInterval??60000),l=Math.min(30000,Math.floor(a*0.8)),i=t.map((r)=>ce(r,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json",interval:a,timeout:l})).filter((r)=>r!==null);if(i.length===0)return null;return new ne({resource:e,readers:i})}createTracerProvider(e){let t=o(this.options.tracesExporter);if(t.length===0)return null;let a=this.options.otlpTracesEndpoint??this.options.otlpEndpoint,l=this.options.otlpTracesHeaders??this.options.otlpHeaders,i=[];for(let r of t){let d=Pe(r,{endpoint:a,headers:l,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if(d)i.push(d)}if(i.length===0)return null;return new fe({resource:e,spanProcessors:i})}createLoggerProvider(e){let t=o(this.options.logsExporter);if(t.length===0)return null;let a=t.map((l)=>{let i=he(l,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if(!i)return null;return new ae(i,{maxQueueSize:this.options.logMaxQueueSize??2048,maxExportBatchSize:this.options.logBatchSize??512,scheduledDelayMillis:this.options.logBatchTimeoutMs??this.options.logBatchTimeout??5000})}).filter((l)=>l!==null);if(a.length===0)return null;return new le({resource:e,processors:a})}}function F(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 H(e){if(w())return{telemetry:new j(e)};if(e.enabled!==!0)return{telemetry:new m({...e,distinctId:c(e.distinctId)})};return F(e)}function me(e){let{telemetry:t,provider:a}=H(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 o(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 ie;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 de);if(!t.endpoint)return null;let a=v(t.endpoint,"/v1/traces");return new se(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),l=a.pathname.endsWith("/")?a.pathname.slice(0,-1):a.pathname;return a.pathname=l.endsWith(t)?l:`${l}${t}`,a.toString()}export{F as createOpenTelemetryTelemetryService,H as createConfiguredTelemetryService,me as createConfiguredTelemetryHandle,A as OpenTelemetryProvider,u as OpenTelemetryAdapter};
|
|
@@ -11,7 +11,9 @@ export declare const SessionManifestSchema: z.ZodObject<{
|
|
|
11
11
|
failed: "failed";
|
|
12
12
|
running: "running";
|
|
13
13
|
cancelled: "cancelled";
|
|
14
|
+
pending: "pending";
|
|
14
15
|
completed: "completed";
|
|
16
|
+
idle: "idle";
|
|
15
17
|
}>;
|
|
16
18
|
interactive: z.ZodBoolean;
|
|
17
19
|
provider: z.ZodString;
|
|
@@ -2,7 +2,7 @@ import type * as LlmsProviders from "@cline/llms";
|
|
|
2
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
|
-
import type
|
|
5
|
+
import { type SessionStatus, type TerminalSessionStatus } from "../../types/common";
|
|
6
6
|
import type { PersistedSessionUpdateInput, SessionMessagesArtifactUploader, SessionPersistenceAdapter } from "../../types/session";
|
|
7
7
|
import type { SessionRow } from "../models/session-row";
|
|
8
8
|
export type { PersistedSessionUpdateInput, SessionPersistenceAdapter };
|
|
@@ -41,7 +41,7 @@ export declare class UnifiedSessionPersistenceService {
|
|
|
41
41
|
persistSessionMessages(sessionId: string, messages: LlmsProviders.Message[], systemPrompt?: string): Promise<void>;
|
|
42
42
|
applySubagentStatus(subSessionId: string, event: HookEventPayload): Promise<void>;
|
|
43
43
|
applySubagentStatusBySessionId(subSessionId: string, status: SessionStatus): Promise<void>;
|
|
44
|
-
applyStatusToRunningChildSessions(parentSessionId: string, status:
|
|
44
|
+
applyStatusToRunningChildSessions(parentSessionId: string, status: TerminalSessionStatus): Promise<void>;
|
|
45
45
|
onTeamTaskStart(rootSessionId: string, agentId: string, message: string): Promise<void>;
|
|
46
46
|
onTeamTaskEnd(rootSessionId: string, agentId: string, status: SessionStatus, summary?: string, result?: AgentResult, messages?: LlmsProviders.Message[]): Promise<void>;
|
|
47
47
|
onTeamTaskProgress(rootSessionId: string, agentId: string, progress: string, options?: {
|
|
@@ -2,7 +2,7 @@ import type * as LlmsProviders from "@cline/llms";
|
|
|
2
2
|
import type { AgentResult } from "@cline/shared";
|
|
3
3
|
import type { SubAgentEndContext, SubAgentStartContext } from "../../extensions/tools/team";
|
|
4
4
|
import type { HookEventPayload } from "../../hooks";
|
|
5
|
-
import type
|
|
5
|
+
import { type SessionStatus, type TerminalSessionStatus } from "../../types/common";
|
|
6
6
|
import type { SessionPersistenceAdapter, StoredMessageWithMetadata } from "../../types/session";
|
|
7
7
|
import type { UpsertSubagentInput } from "../models/session-row";
|
|
8
8
|
import type { SessionManifestStore } from "../stores/session-manifest-store";
|
|
@@ -23,7 +23,7 @@ export declare class TeamChildSessionManager {
|
|
|
23
23
|
upsertSubagentSessionFromHook(event: HookEventPayload): Promise<string | undefined>;
|
|
24
24
|
applySubagentStatus(subSessionId: string, event: HookEventPayload): Promise<void>;
|
|
25
25
|
applySubagentStatusBySessionId(subSessionId: string, status: SessionStatus): Promise<void>;
|
|
26
|
-
applyStatusToRunningChildSessions(parentSessionId: string, status:
|
|
26
|
+
applyStatusToRunningChildSessions(parentSessionId: string, status: TerminalSessionStatus): Promise<void>;
|
|
27
27
|
onTeamTaskStart(rootSessionId: string, agentId: string, message: string): Promise<void>;
|
|
28
28
|
onTeamTaskEnd(rootSessionId: string, agentId: string, status: SessionStatus, _summary?: string, result?: AgentResult, messages?: LlmsProviders.Message[]): Promise<void>;
|
|
29
29
|
onTeamTaskProgress(rootSessionId: string, agentId: string, progress: string, options?: {
|
|
@@ -24,6 +24,7 @@ export declare const ChatSessionStatusSchema: z.ZodEnum<{
|
|
|
24
24
|
failed: "failed";
|
|
25
25
|
running: "running";
|
|
26
26
|
cancelled: "cancelled";
|
|
27
|
+
pending: "pending";
|
|
27
28
|
completed: "completed";
|
|
28
29
|
idle: "idle";
|
|
29
30
|
starting: "starting";
|
|
@@ -85,6 +86,7 @@ export declare const ChatViewStateSchema: z.ZodObject<{
|
|
|
85
86
|
failed: "failed";
|
|
86
87
|
running: "running";
|
|
87
88
|
cancelled: "cancelled";
|
|
89
|
+
pending: "pending";
|
|
88
90
|
completed: "completed";
|
|
89
91
|
idle: "idle";
|
|
90
92
|
starting: "starting";
|
package/dist/types/common.d.ts
CHANGED
|
@@ -1,5 +1,10 @@
|
|
|
1
|
-
export declare const SESSION_STATUSES: readonly ["running", "completed", "failed", "cancelled"];
|
|
1
|
+
export declare const SESSION_STATUSES: readonly ["idle", "running", "pending", "completed", "failed", "cancelled"];
|
|
2
2
|
export type SessionStatus = (typeof SESSION_STATUSES)[number];
|
|
3
|
+
export declare const NON_TERMINAL_SESSION_STATUSES: readonly ["idle", "running", "pending"];
|
|
4
|
+
export type NonTerminalSessionStatus = (typeof NON_TERMINAL_SESSION_STATUSES)[number];
|
|
5
|
+
export type TerminalSessionStatus = Exclude<SessionStatus, NonTerminalSessionStatus>;
|
|
6
|
+
export declare function isTerminalSessionStatus(status: SessionStatus): status is TerminalSessionStatus;
|
|
7
|
+
export declare function isNonTerminalSessionStatus(status: SessionStatus): status is NonTerminalSessionStatus;
|
|
3
8
|
export declare const SessionSource: {
|
|
4
9
|
readonly CORE: "core";
|
|
5
10
|
readonly CLI: "cli";
|
package/dist/types/session.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type * as LlmsProviders from "@cline/llms";
|
|
2
|
+
import type { AgentFinishReason } from "@cline/shared";
|
|
2
3
|
import type { SessionAccumulatedUsage } from "../runtime/host/runtime-host";
|
|
3
4
|
import type { BuiltRuntime } from "../runtime/orchestration/session-runtime";
|
|
4
5
|
import type { SessionRuntime } from "../runtime/orchestration/session-runtime-orchestrator";
|
|
@@ -34,6 +35,7 @@ export type ActiveSession = {
|
|
|
34
35
|
turnAggregateUsageBaseline?: SessionAccumulatedUsage;
|
|
35
36
|
turnPrimaryUsage?: SessionAccumulatedUsage;
|
|
36
37
|
turnUsageByAgent?: Map<string, SessionAccumulatedUsage>;
|
|
38
|
+
lastInteractiveTurnFinishReason?: AgentFinishReason;
|
|
37
39
|
/**
|
|
38
40
|
* Set to `true` once the assistant successfully invoked the canonical
|
|
39
41
|
* completion tool (`submit_and_exit`) for this session. Used to:
|
package/dist/types.d.ts
CHANGED
|
@@ -15,8 +15,8 @@ export type { SandboxCallOptions, SubprocessSandboxOptions, } from "./runtime/to
|
|
|
15
15
|
export { SubprocessSandbox } from "./runtime/tools/subprocess-sandbox";
|
|
16
16
|
export type { GlobalSettings } from "./services/global-settings";
|
|
17
17
|
export { filterDisabledPluginPaths, filterDisabledTools, filterExtensionToolRegistrations, GlobalSettingsSchema, isPluginDisabledGlobally, isTelemetryOptedOutGlobally, isToolDisabledGlobally, readGlobalSettings, resolveDisabledPluginPaths, resolveDisabledToolNames, setDisabledPlugin, setDisabledTools, setTelemetryOptOutGlobally, toggleDisabledTool, writeGlobalSettings, } from "./services/global-settings";
|
|
18
|
-
export type { PluginToolSummary } from "./services/plugin-tools";
|
|
19
|
-
export { listPluginTools } from "./services/plugin-tools";
|
|
18
|
+
export type { ListPluginToolsResult, PluginToolSummary, } from "./services/plugin-tools";
|
|
19
|
+
export { listPluginTools, listPluginToolsWithDiagnostics, } from "./services/plugin-tools";
|
|
20
20
|
export type { WorkspaceManager, WorkspaceManagerEvent, } from "./services/workspace/workspace-manager";
|
|
21
21
|
export type { SessionManifest } from "./session/models/session-manifest";
|
|
22
22
|
export type { SessionRow } from "./session/models/session-row";
|
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.42",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
7
7
|
"url": "https://github.com/cline/cline",
|
|
@@ -44,9 +44,9 @@
|
|
|
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.42",
|
|
48
|
+
"@cline/shared": "0.0.42",
|
|
49
|
+
"@cline/llms": "0.0.42",
|
|
50
50
|
"@modelcontextprotocol/sdk": "^1.29.0",
|
|
51
51
|
"@opentelemetry/api": "^1.9.0",
|
|
52
52
|
"@opentelemetry/api-logs": "^0.214.0",
|
|
@@ -59,10 +59,10 @@
|
|
|
59
59
|
"@opentelemetry/sdk-trace-base": "^2.6.1",
|
|
60
60
|
"@opentelemetry/sdk-trace-node": "^2.6.1",
|
|
61
61
|
"@opentelemetry/semantic-conventions": "^1.40.0",
|
|
62
|
-
"jiti": "^
|
|
62
|
+
"jiti": "^2.7.0",
|
|
63
63
|
"node-machine-id": "^1.1.12",
|
|
64
64
|
"nanoid": "^5.1.7",
|
|
65
|
-
"simple-git": "
|
|
65
|
+
"simple-git": "3.36.0",
|
|
66
66
|
"ws": "^8.20.0",
|
|
67
67
|
"yaml": "^2.8.2",
|
|
68
68
|
"zod": "^4.3.6"
|