@sctg/cline-core 3.84.0-beta.20260524130712
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 +110 -0
- package/dist/ClineCore.d.ts +283 -0
- package/dist/account/cline-account-service.d.ts +37 -0
- package/dist/account/index.d.ts +3 -0
- package/dist/account/rpc.d.ts +40 -0
- package/dist/account/types.d.ts +98 -0
- package/dist/auth/bounded-ttl-cache.d.ts +13 -0
- package/dist/auth/client.d.ts +30 -0
- package/dist/auth/cline.d.ts +64 -0
- package/dist/auth/codex.d.ts +43 -0
- package/dist/auth/oca.d.ts +28 -0
- package/dist/auth/server.d.ts +54 -0
- package/dist/auth/types.d.ts +103 -0
- package/dist/auth/utils.d.ts +32 -0
- package/dist/cline-core/automation.d.ts +34 -0
- package/dist/cline-core/runtime-services.d.ts +5 -0
- package/dist/cline-core/start-input.d.ts +10 -0
- package/dist/cline-core/telemetry.d.ts +10 -0
- package/dist/cline-core/types.d.ts +221 -0
- package/dist/cron/events/cron-event-ingress.d.ts +37 -0
- package/dist/cron/reports/cron-report-writer.d.ts +40 -0
- package/dist/cron/runner/cron-materializer.d.ts +35 -0
- package/dist/cron/runner/cron-runner.d.ts +47 -0
- package/dist/cron/runner/resource-limiter.d.ts +8 -0
- package/dist/cron/schedule/scheduler.d.ts +12 -0
- package/dist/cron/service/cron-service.d.ts +56 -0
- package/dist/cron/service/schedule-command-service.d.ts +9 -0
- package/dist/cron/service/schedule-service.d.ts +98 -0
- package/dist/cron/specs/cron-reconciler.d.ts +61 -0
- package/dist/cron/specs/cron-spec-parser.d.ts +26 -0
- package/dist/cron/specs/cron-watcher.d.ts +22 -0
- package/dist/cron/store/cron-schema.d.ts +2 -0
- package/dist/cron/store/sqlite-cron-store.d.ts +240 -0
- package/dist/extensions/config/index.d.ts +7 -0
- package/dist/extensions/config/runtime-commands.d.ts +11 -0
- package/dist/extensions/config/skill-frontmatter-toggle.d.ts +11 -0
- package/dist/extensions/config/unified-config-file-watcher.d.ts +77 -0
- package/dist/extensions/config/user-instruction-config-loader.d.ts +64 -0
- package/dist/extensions/config/user-instruction-plugin.d.ts +25 -0
- package/dist/extensions/config/user-instruction-service.d.ts +23 -0
- package/dist/extensions/context/agentic-compaction.d.ts +12 -0
- package/dist/extensions/context/basic-compaction.d.ts +8 -0
- package/dist/extensions/context/compaction-shared.d.ts +61 -0
- package/dist/extensions/context/compaction.d.ts +38 -0
- package/dist/extensions/index.d.ts +5 -0
- package/dist/extensions/mcp/client.d.ts +9 -0
- package/dist/extensions/mcp/config-loader.d.ts +25 -0
- package/dist/extensions/mcp/index.d.ts +11 -0
- package/dist/extensions/mcp/manager.d.ts +23 -0
- package/dist/extensions/mcp/name-transform.d.ts +2 -0
- package/dist/extensions/mcp/oauth.d.ts +48 -0
- package/dist/extensions/mcp/policies.d.ts +14 -0
- package/dist/extensions/mcp/tools.d.ts +3 -0
- package/dist/extensions/mcp/types.d.ts +111 -0
- package/dist/extensions/plugin/plugin-config-loader.d.ts +40 -0
- package/dist/extensions/plugin/plugin-load-report.d.ts +18 -0
- package/dist/extensions/plugin/plugin-loader.d.ts +22 -0
- package/dist/extensions/plugin/plugin-module-import.d.ts +4 -0
- package/dist/extensions/plugin/plugin-sandbox.d.ts +36 -0
- package/dist/extensions/plugin/plugin-targeting.d.ts +6 -0
- package/dist/extensions/plugin-sandbox-bootstrap.js +1 -0
- package/dist/extensions/tools/constants.d.ts +24 -0
- package/dist/extensions/tools/definitions.d.ts +102 -0
- package/dist/extensions/tools/executors/apply-patch-parser.d.ts +68 -0
- package/dist/extensions/tools/executors/apply-patch.d.ts +28 -0
- package/dist/extensions/tools/executors/bash.d.ts +49 -0
- package/dist/extensions/tools/executors/editor.d.ts +31 -0
- package/dist/extensions/tools/executors/file-read.d.ts +40 -0
- package/dist/extensions/tools/executors/index.d.ts +50 -0
- package/dist/extensions/tools/executors/search.d.ts +50 -0
- package/dist/extensions/tools/executors/web-fetch.d.ts +58 -0
- package/dist/extensions/tools/helpers.d.ts +15 -0
- package/dist/extensions/tools/index.d.ts +59 -0
- package/dist/extensions/tools/model-tool-routing.d.ts +33 -0
- package/dist/extensions/tools/presets.d.ts +132 -0
- package/dist/extensions/tools/runtime.d.ts +24 -0
- package/dist/extensions/tools/schemas.d.ts +241 -0
- package/dist/extensions/tools/team/delegated-agent.d.ts +43 -0
- package/dist/extensions/tools/team/index.d.ts +2 -0
- package/dist/extensions/tools/team/multi-agent.d.ts +230 -0
- package/dist/extensions/tools/team/projections.d.ts +8 -0
- package/dist/extensions/tools/team/runtime.d.ts +4 -0
- package/dist/extensions/tools/team/spawn-agent-tool.d.ts +84 -0
- package/dist/extensions/tools/team/subagent-prompts.d.ts +3 -0
- package/dist/extensions/tools/team/team-tools.d.ts +35 -0
- package/dist/extensions/tools/types.d.ts +254 -0
- package/dist/hooks/checkpoint-hooks.d.ts +45 -0
- package/dist/hooks/hook-extension.d.ts +2 -0
- package/dist/hooks/hook-file-config.d.ts +24 -0
- package/dist/hooks/hook-file-hooks.d.ts +21 -0
- package/dist/hooks/index.d.ts +5 -0
- package/dist/hooks/subprocess-runner.d.ts +21 -0
- package/dist/hooks/subprocess.d.ts +68 -0
- package/dist/hub/client/connect.d.ts +14 -0
- package/dist/hub/client/index.d.ts +88 -0
- package/dist/hub/client/session-client.d.ts +118 -0
- package/dist/hub/client/ui-client.d.ts +45 -0
- package/dist/hub/daemon/entry.d.ts +1 -0
- package/dist/hub/daemon/entry.js +722 -0
- package/dist/hub/daemon/index.d.ts +9 -0
- package/dist/hub/daemon/runtime-handlers.d.ts +12 -0
- package/dist/hub/daemon/start-shared-server.d.ts +18 -0
- package/dist/hub/discovery/defaults.d.ts +16 -0
- package/dist/hub/discovery/index.d.ts +30 -0
- package/dist/hub/discovery/workspace.d.ts +3 -0
- package/dist/hub/index.d.ts +32 -0
- package/dist/hub/index.js +719 -0
- package/dist/hub/runtime-host/hub-runtime-host.d.ts +76 -0
- package/dist/hub/runtime-host/remote-runtime-host.d.ts +9 -0
- package/dist/hub/server/browser-websocket.d.ts +19 -0
- package/dist/hub/server/command-transport.d.ts +7 -0
- package/dist/hub/server/handlers/approval-handlers.d.ts +17 -0
- package/dist/hub/server/handlers/capability-handlers.d.ts +12 -0
- package/dist/hub/server/handlers/client-handlers.d.ts +6 -0
- package/dist/hub/server/handlers/context.d.ts +57 -0
- package/dist/hub/server/handlers/run-handlers.d.ts +5 -0
- package/dist/hub/server/handlers/session-event-projector.d.ts +7 -0
- package/dist/hub/server/handlers/session-handlers.d.ts +20 -0
- package/dist/hub/server/hub-client-contributions.d.ts +19 -0
- package/dist/hub/server/hub-notifications.d.ts +7 -0
- package/dist/hub/server/hub-schedule-events.d.ts +2 -0
- package/dist/hub/server/hub-server-logging.d.ts +2 -0
- package/dist/hub/server/hub-server-options.d.ts +55 -0
- package/dist/hub/server/hub-server-transport.d.ts +37 -0
- package/dist/hub/server/hub-session-records.d.ts +9 -0
- package/dist/hub/server/hub-websocket-server.d.ts +6 -0
- package/dist/hub/server/index.d.ts +4 -0
- package/dist/hub/server/native-transport.d.ts +16 -0
- package/dist/index.d.ts +104 -0
- package/dist/index.js +717 -0
- package/dist/remote-config/integration.d.ts +17 -0
- package/dist/runtime/capabilities/index.d.ts +2 -0
- package/dist/runtime/capabilities/normalize-runtime-capabilities.d.ts +2 -0
- package/dist/runtime/capabilities/runtime-capabilities.d.ts +6 -0
- package/dist/runtime/config/agent-message-codec.d.ts +6 -0
- package/dist/runtime/config/agent-runtime-config-builder.d.ts +80 -0
- package/dist/runtime/host/history.d.ts +19 -0
- package/dist/runtime/host/host.d.ts +7 -0
- package/dist/runtime/host/local/agent-event-bridge.d.ts +30 -0
- package/dist/runtime/host/local/session-record.d.ts +6 -0
- package/dist/runtime/host/local/session-service-invoker.d.ts +4 -0
- package/dist/runtime/host/local/spawn-tool.d.ts +15 -0
- package/dist/runtime/host/local/user-files.d.ts +1 -0
- package/dist/runtime/host/local-runtime-host.d.ts +127 -0
- package/dist/runtime/host/runtime-host-support.d.ts +20 -0
- package/dist/runtime/host/runtime-host.d.ts +169 -0
- package/dist/runtime/orchestration/runtime-builder.d.ts +6 -0
- package/dist/runtime/orchestration/runtime-event-adapter.d.ts +101 -0
- package/dist/runtime/orchestration/runtime-oauth-token-manager.d.ts +30 -0
- package/dist/runtime/orchestration/session-runtime-orchestrator.d.ts +218 -0
- package/dist/runtime/orchestration/session-runtime.d.ts +58 -0
- package/dist/runtime/orchestration/user-input-builder.d.ts +15 -0
- package/dist/runtime/safety/loop-detection.d.ts +58 -0
- package/dist/runtime/safety/mistake-tracker.d.ts +68 -0
- package/dist/runtime/safety/rules.d.ts +6 -0
- package/dist/runtime/tools/subprocess-sandbox.d.ts +43 -0
- package/dist/runtime/tools/tool-approval.d.ts +9 -0
- package/dist/runtime/turn-queue/pending-prompt-service.d.ts +69 -0
- package/dist/services/agent-events.d.ts +34 -0
- package/dist/services/config.d.ts +2 -0
- package/dist/services/global-settings.d.ts +34 -0
- package/dist/services/llms/cline-recommended-models.d.ts +19 -0
- package/dist/services/llms/configured-provider-registry.d.ts +27 -0
- package/dist/services/llms/handler-factory.d.ts +3 -0
- package/dist/services/llms/provider-defaults.d.ts +28 -0
- package/dist/services/llms/provider-settings.d.ts +250 -0
- package/dist/services/llms/runtime-config.d.ts +3 -0
- package/dist/services/llms/runtime-registry.d.ts +19 -0
- package/dist/services/llms/runtime-types.d.ts +84 -0
- package/dist/services/local-runtime-bootstrap.d.ts +45 -0
- package/dist/services/plugin-tools.d.ts +28 -0
- package/dist/services/providers/local-provider-registry.d.ts +230 -0
- package/dist/services/providers/local-provider-service.d.ts +70 -0
- package/dist/services/providers/model-source.d.ts +3 -0
- package/dist/services/providers/provider-config-fields.d.ts +37 -0
- package/dist/services/session-artifacts.d.ts +17 -0
- package/dist/services/session-data.d.ts +51 -0
- package/dist/services/session-telemetry.d.ts +15 -0
- package/dist/services/storage/file-team-store.d.ts +28 -0
- package/dist/services/storage/provider-settings-legacy-migration.d.ts +38 -0
- package/dist/services/storage/provider-settings-manager.d.ts +23 -0
- package/dist/services/storage/sqlite-session-store.d.ts +30 -0
- package/dist/services/storage/sqlite-team-store.d.ts +34 -0
- package/dist/services/storage/team-store.d.ts +15 -0
- package/dist/services/telemetry/ITelemetryAdapter.d.ts +54 -0
- package/dist/services/telemetry/OpenTelemetryAdapter.d.ts +43 -0
- package/dist/services/telemetry/OpenTelemetryProvider.d.ts +83 -0
- package/dist/services/telemetry/TelemetryLoggerSink.d.ts +27 -0
- package/dist/services/telemetry/TelemetryService.d.ts +34 -0
- package/dist/services/telemetry/core-events.d.ts +276 -0
- package/dist/services/telemetry/distinct-id.d.ts +1 -0
- package/dist/services/telemetry/index.d.ts +3 -0
- package/dist/services/telemetry/index.js +1 -0
- package/dist/services/usage.d.ts +19 -0
- package/dist/services/workspace/file-indexer.d.ts +5 -0
- package/dist/services/workspace/index.d.ts +4 -0
- package/dist/services/workspace/mention-enricher.d.ts +13 -0
- package/dist/services/workspace/workspace-manager.d.ts +27 -0
- package/dist/services/workspace/workspace-manifest.d.ts +31 -0
- package/dist/services/workspace/workspace-telemetry.d.ts +18 -0
- package/dist/session/checkpoint-restore.d.ts +20 -0
- package/dist/session/models/session-graph.d.ts +15 -0
- package/dist/session/models/session-manifest.d.ts +31 -0
- package/dist/session/models/session-row.d.ts +92 -0
- package/dist/session/services/file-session-service.d.ts +10 -0
- package/dist/session/services/message-builder.d.ts +66 -0
- package/dist/session/services/persistence-service.d.ts +59 -0
- package/dist/session/services/session-service.d.ts +15 -0
- package/dist/session/session-snapshot.d.ts +59 -0
- package/dist/session/session-versioning-service.d.ts +48 -0
- package/dist/session/stores/conversation-store.d.ts +29 -0
- package/dist/session/stores/session-manifest-store.d.ts +23 -0
- package/dist/session/stores/team-persistence-store.d.ts +23 -0
- package/dist/session/team/index.d.ts +2 -0
- package/dist/session/team/team-child-session-manager.d.ts +35 -0
- package/dist/session/team/team-session-coordinator.d.ts +13 -0
- package/dist/settings/index.d.ts +2 -0
- package/dist/settings/settings-service.d.ts +6 -0
- package/dist/settings/types.d.ts +43 -0
- package/dist/types/chat-schema.d.ts +163 -0
- package/dist/types/common.d.ts +24 -0
- package/dist/types/config.d.ts +167 -0
- package/dist/types/events.d.ts +89 -0
- package/dist/types/provider-settings.d.ts +19 -0
- package/dist/types/session.d.ts +122 -0
- package/dist/types/sessions.d.ts +38 -0
- package/dist/types/storage.d.ts +36 -0
- package/dist/types.d.ts +32 -0
- package/dist/version.d.ts +1 -0
- package/package.json +80 -0
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type { LoggerProvider } from "@opentelemetry/sdk-logs";
|
|
2
|
+
import type { MeterProvider } from "@opentelemetry/sdk-metrics";
|
|
3
|
+
import type { ITelemetryAdapter, TelemetryMetadata, TelemetryProperties } from "./ITelemetryAdapter";
|
|
4
|
+
export interface OpenTelemetryAdapterOptions {
|
|
5
|
+
readonly metadata: TelemetryMetadata;
|
|
6
|
+
readonly meterProvider?: MeterProvider | null;
|
|
7
|
+
readonly loggerProvider?: LoggerProvider | null;
|
|
8
|
+
readonly name?: string;
|
|
9
|
+
readonly enabled?: boolean | (() => boolean);
|
|
10
|
+
readonly distinctId?: string;
|
|
11
|
+
readonly commonProperties?: TelemetryProperties;
|
|
12
|
+
}
|
|
13
|
+
export declare class OpenTelemetryAdapter implements ITelemetryAdapter {
|
|
14
|
+
readonly name: string;
|
|
15
|
+
private readonly metadata;
|
|
16
|
+
private readonly meter;
|
|
17
|
+
private readonly logger;
|
|
18
|
+
private readonly enabled;
|
|
19
|
+
private distinctId?;
|
|
20
|
+
private commonProperties;
|
|
21
|
+
private counters;
|
|
22
|
+
private histograms;
|
|
23
|
+
private gauges;
|
|
24
|
+
private gaugeValues;
|
|
25
|
+
private readonly meterProvider?;
|
|
26
|
+
private readonly loggerProvider?;
|
|
27
|
+
constructor(options: OpenTelemetryAdapterOptions);
|
|
28
|
+
emit(event: string, properties?: TelemetryProperties): void;
|
|
29
|
+
emitRequired(event: string, properties?: TelemetryProperties): void;
|
|
30
|
+
recordCounter(name: string, value: number, attributes?: TelemetryProperties, description?: string, required?: boolean): void;
|
|
31
|
+
recordHistogram(name: string, value: number, attributes?: TelemetryProperties, description?: string, required?: boolean): void;
|
|
32
|
+
recordGauge(name: string, value: number | null, attributes?: TelemetryProperties, description?: string, required?: boolean): void;
|
|
33
|
+
isEnabled(): boolean;
|
|
34
|
+
setDistinctId(distinctId?: string): void;
|
|
35
|
+
setCommonProperties(properties: TelemetryProperties): void;
|
|
36
|
+
updateCommonProperties(properties: TelemetryProperties): void;
|
|
37
|
+
flush(): Promise<void>;
|
|
38
|
+
dispose(): Promise<void>;
|
|
39
|
+
private emitLog;
|
|
40
|
+
private buildAttributes;
|
|
41
|
+
private snapshotGaugeSeries;
|
|
42
|
+
private flattenProperties;
|
|
43
|
+
}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import type { BasicLogger, ITelemetryService, OpenTelemetryClientConfig, TelemetryMetadata } from "@cline/shared";
|
|
2
|
+
import { type Tracer } from "@opentelemetry/api";
|
|
3
|
+
import { LoggerProvider } from "@opentelemetry/sdk-logs";
|
|
4
|
+
import { MeterProvider } from "@opentelemetry/sdk-metrics";
|
|
5
|
+
import { NodeTracerProvider } from "@opentelemetry/sdk-trace-node";
|
|
6
|
+
import { OpenTelemetryAdapter, type OpenTelemetryAdapterOptions } from "./OpenTelemetryAdapter";
|
|
7
|
+
type OpenTelemetryExporterKind = "console" | "otlp";
|
|
8
|
+
export interface OpenTelemetryProviderOptions extends Omit<OpenTelemetryClientConfig, "enabled" | "logsExporter" | "metricsExporter" | "tracesExporter"> {
|
|
9
|
+
serviceName?: string;
|
|
10
|
+
serviceVersion?: string;
|
|
11
|
+
enabled?: boolean;
|
|
12
|
+
logsExporter?: string | OpenTelemetryExporterKind[];
|
|
13
|
+
metricsExporter?: string | OpenTelemetryExporterKind[];
|
|
14
|
+
tracesExporter?: string | OpenTelemetryExporterKind[];
|
|
15
|
+
metricExportIntervalMs?: number;
|
|
16
|
+
logMaxQueueSize?: number;
|
|
17
|
+
logBatchSize?: number;
|
|
18
|
+
logBatchTimeoutMs?: number;
|
|
19
|
+
}
|
|
20
|
+
export interface CreateOpenTelemetryTelemetryServiceOptions extends OpenTelemetryProviderOptions, Pick<OpenTelemetryAdapterOptions, "name" | "distinctId" | "commonProperties"> {
|
|
21
|
+
metadata: TelemetryMetadata;
|
|
22
|
+
logger?: BasicLogger;
|
|
23
|
+
}
|
|
24
|
+
export declare class OpenTelemetryProvider {
|
|
25
|
+
readonly meterProvider: MeterProvider | null;
|
|
26
|
+
readonly loggerProvider: LoggerProvider | null;
|
|
27
|
+
readonly tracerProvider: NodeTracerProvider | null;
|
|
28
|
+
private readonly options;
|
|
29
|
+
constructor(options?: OpenTelemetryProviderOptions);
|
|
30
|
+
/**
|
|
31
|
+
* Returns a tracer for manual spans. Requires {@link OpenTelemetryProviderOptions.tracesExporter}
|
|
32
|
+
* so that a {@link NodeTracerProvider} is registered.
|
|
33
|
+
*/
|
|
34
|
+
getTracer(name?: string, version?: string): Tracer;
|
|
35
|
+
createAdapter(options: Omit<OpenTelemetryAdapterOptions, "meterProvider" | "loggerProvider">): OpenTelemetryAdapter;
|
|
36
|
+
createTelemetryService(options: Omit<CreateOpenTelemetryTelemetryServiceOptions, keyof OpenTelemetryProviderOptions>): ITelemetryService;
|
|
37
|
+
forceFlush(): Promise<void>;
|
|
38
|
+
dispose(): Promise<void>;
|
|
39
|
+
private createMeterProvider;
|
|
40
|
+
private createTracerProvider;
|
|
41
|
+
private createLoggerProvider;
|
|
42
|
+
}
|
|
43
|
+
export declare function createOpenTelemetryTelemetryService(options: CreateOpenTelemetryTelemetryServiceOptions): {
|
|
44
|
+
provider: OpenTelemetryProvider;
|
|
45
|
+
telemetry: ITelemetryService;
|
|
46
|
+
};
|
|
47
|
+
export declare function createConfiguredTelemetryService(options: CreateOpenTelemetryTelemetryServiceOptions): {
|
|
48
|
+
provider?: OpenTelemetryProvider;
|
|
49
|
+
telemetry: ITelemetryService;
|
|
50
|
+
};
|
|
51
|
+
/**
|
|
52
|
+
* Telemetry service plus the lifecycle closures (`flush`, `dispose`) every
|
|
53
|
+
* host needs to drive the underlying provider during shutdown. Returned by
|
|
54
|
+
* {@link createConfiguredTelemetryHandle} so detached daemons, the VS Code
|
|
55
|
+
* extension, and the CLI can share one canonical implementation of the
|
|
56
|
+
* "best-effort flush; settle dispose" semantics instead of each
|
|
57
|
+
* re-implementing the same closures.
|
|
58
|
+
*/
|
|
59
|
+
export interface ConfiguredTelemetryHandle {
|
|
60
|
+
readonly telemetry: ITelemetryService;
|
|
61
|
+
/**
|
|
62
|
+
* The underlying OpenTelemetry provider, when telemetry is enabled.
|
|
63
|
+
* `undefined` when telemetry is disabled or opted out so callers can
|
|
64
|
+
* detect the inactive case without inspecting `enabled` themselves.
|
|
65
|
+
*/
|
|
66
|
+
readonly provider?: OpenTelemetryProvider;
|
|
67
|
+
/**
|
|
68
|
+
* Best-effort flush of any pending telemetry batches. Errors are
|
|
69
|
+
* swallowed so callers can `await` this in shutdown paths without
|
|
70
|
+
* blocking deactivation on a misbehaving exporter.
|
|
71
|
+
*/
|
|
72
|
+
flush: () => Promise<void>;
|
|
73
|
+
/** Disposes the telemetry service and its provider concurrently. */
|
|
74
|
+
dispose: () => Promise<void>;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Builds a {@link ConfiguredTelemetryHandle} so hosts (CLI, VS Code, hub
|
|
78
|
+
* daemon) share one canonical flush/dispose implementation. Without a
|
|
79
|
+
* shared helper each host re-derived the same closures and they tended
|
|
80
|
+
* to drift; this factory keeps the lifecycle uniform across hosts.
|
|
81
|
+
*/
|
|
82
|
+
export declare function createConfiguredTelemetryHandle(options: CreateOpenTelemetryTelemetryServiceOptions): ConfiguredTelemetryHandle;
|
|
83
|
+
export {};
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { BasicLogger } from "@cline/shared";
|
|
2
|
+
import type { ITelemetryAdapter, TelemetryProperties } from "./ITelemetryAdapter";
|
|
3
|
+
/**
|
|
4
|
+
* {@link ITelemetryAdapter} implementation that forwards telemetry to a {@link BasicLogger}.
|
|
5
|
+
*
|
|
6
|
+
* This is intentionally named *Sink* (not "adapter") to distinguish it from host logging bridges
|
|
7
|
+
* such as the CLI Pino bundle: it consumes telemetry events and writes them to the injected logger.
|
|
8
|
+
*/
|
|
9
|
+
export interface TelemetryLoggerSinkOptions {
|
|
10
|
+
logger?: BasicLogger;
|
|
11
|
+
name?: string;
|
|
12
|
+
enabled?: boolean | (() => boolean);
|
|
13
|
+
}
|
|
14
|
+
export declare class TelemetryLoggerSink implements ITelemetryAdapter {
|
|
15
|
+
readonly name: string;
|
|
16
|
+
private readonly logger?;
|
|
17
|
+
private readonly enabled;
|
|
18
|
+
constructor(options?: TelemetryLoggerSinkOptions);
|
|
19
|
+
emit(event: string, properties?: TelemetryProperties): void;
|
|
20
|
+
emitRequired(event: string, properties?: TelemetryProperties): void;
|
|
21
|
+
recordCounter(name: string, value: number, attributes?: TelemetryProperties, description?: string, required?: boolean): void;
|
|
22
|
+
recordHistogram(name: string, value: number, attributes?: TelemetryProperties, description?: string, required?: boolean): void;
|
|
23
|
+
recordGauge(name: string, value: number | null, attributes?: TelemetryProperties, description?: string, required?: boolean): void;
|
|
24
|
+
isEnabled(): boolean;
|
|
25
|
+
flush(): Promise<void>;
|
|
26
|
+
dispose(): Promise<void>;
|
|
27
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { BasicLogger, ITelemetryService, TelemetryMetadata, TelemetryProperties } from "@cline/shared";
|
|
2
|
+
import type { ITelemetryAdapter } from "./ITelemetryAdapter";
|
|
3
|
+
export interface TelemetryServiceOptions {
|
|
4
|
+
adapters?: ITelemetryAdapter[];
|
|
5
|
+
metadata?: Partial<TelemetryMetadata>;
|
|
6
|
+
distinctId?: string;
|
|
7
|
+
commonProperties?: TelemetryProperties;
|
|
8
|
+
logger?: BasicLogger;
|
|
9
|
+
}
|
|
10
|
+
export declare class TelemetryService implements ITelemetryService {
|
|
11
|
+
private adapters;
|
|
12
|
+
private metadata;
|
|
13
|
+
private distinctId?;
|
|
14
|
+
private commonProperties;
|
|
15
|
+
constructor(options?: TelemetryServiceOptions);
|
|
16
|
+
addAdapter(adapter: ITelemetryAdapter): void;
|
|
17
|
+
setDistinctId(distinctId?: string): void;
|
|
18
|
+
setMetadata(metadata: Partial<TelemetryMetadata>): void;
|
|
19
|
+
updateMetadata(metadata: Partial<TelemetryMetadata>): void;
|
|
20
|
+
setCommonProperties(properties: TelemetryProperties): void;
|
|
21
|
+
updateCommonProperties(properties: TelemetryProperties): void;
|
|
22
|
+
isEnabled(): boolean;
|
|
23
|
+
capture(input: {
|
|
24
|
+
event: string;
|
|
25
|
+
properties?: TelemetryProperties;
|
|
26
|
+
}): void;
|
|
27
|
+
captureRequired(event: string, properties?: TelemetryProperties): void;
|
|
28
|
+
recordCounter(name: string, value: number, attributes?: TelemetryProperties, description?: string, required?: boolean): void;
|
|
29
|
+
recordHistogram(name: string, value: number, attributes?: TelemetryProperties, description?: string, required?: boolean): void;
|
|
30
|
+
recordGauge(name: string, value: number | null, attributes?: TelemetryProperties, description?: string, required?: boolean): void;
|
|
31
|
+
flush(): Promise<void>;
|
|
32
|
+
dispose(): Promise<void>;
|
|
33
|
+
private buildAttributes;
|
|
34
|
+
}
|
|
@@ -0,0 +1,276 @@
|
|
|
1
|
+
import { type ITelemetryService, type TelemetryProperties } from "@cline/shared";
|
|
2
|
+
export type TelemetryAgentKind = "root" | "subagent" | "team_lead" | "team_teammate";
|
|
3
|
+
export interface TelemetryAgentIdentityProperties {
|
|
4
|
+
agentId: string;
|
|
5
|
+
agentKind: TelemetryAgentKind;
|
|
6
|
+
conversationId?: string;
|
|
7
|
+
parentAgentId?: string;
|
|
8
|
+
createdByAgentId?: string;
|
|
9
|
+
isSubagent: boolean;
|
|
10
|
+
teamId?: string;
|
|
11
|
+
teamName?: string;
|
|
12
|
+
teamRole?: "lead" | "teammate";
|
|
13
|
+
teamAgentId?: string;
|
|
14
|
+
}
|
|
15
|
+
export declare const CORE_TELEMETRY_EVENTS: {
|
|
16
|
+
readonly CLIENT: {
|
|
17
|
+
readonly EXTENSION_ACTIVATED: "user.extension_activated";
|
|
18
|
+
};
|
|
19
|
+
readonly SESSION: {
|
|
20
|
+
readonly STARTED: "session.started";
|
|
21
|
+
readonly ENDED: "session.ended";
|
|
22
|
+
};
|
|
23
|
+
readonly USER: {
|
|
24
|
+
readonly AUTH_STARTED: "user.auth_started";
|
|
25
|
+
readonly AUTH_SUCCEEDED: "user.auth_succeeded";
|
|
26
|
+
readonly AUTH_FAILED: "user.auth_failed";
|
|
27
|
+
readonly AUTH_LOGGED_OUT: "user.auth_logged_out";
|
|
28
|
+
readonly PROVIDER_CONFIGURED: "user.provider_configured";
|
|
29
|
+
readonly TELEMETRY_OPT_OUT: "user.opt_out";
|
|
30
|
+
};
|
|
31
|
+
readonly TASK: {
|
|
32
|
+
readonly CREATED: "task.created";
|
|
33
|
+
readonly RESTARTED: "task.restarted";
|
|
34
|
+
readonly COMPLETED: "task.completed";
|
|
35
|
+
readonly CONVERSATION_TURN: "task.conversation_turn";
|
|
36
|
+
readonly TOKEN_USAGE: "task.tokens";
|
|
37
|
+
readonly MODE_SWITCH: "task.mode";
|
|
38
|
+
readonly TOOL_USED: "task.tool_used";
|
|
39
|
+
readonly SKILL_USED: "task.skill_used";
|
|
40
|
+
readonly DIFF_EDIT_FAILED: "task.diff_edit_failed";
|
|
41
|
+
readonly PROVIDER_API_ERROR: "task.provider_api_error";
|
|
42
|
+
readonly MENTION_USED: "task.mention_used";
|
|
43
|
+
readonly MENTION_FAILED: "task.mention_failed";
|
|
44
|
+
readonly MENTION_SEARCH_RESULTS: "task.mention_search_results";
|
|
45
|
+
readonly AGENT_CREATED: "task.agent_created";
|
|
46
|
+
readonly AGENT_TEAM_CREATED: "task.agent_team_created";
|
|
47
|
+
readonly SUBAGENT_STARTED: "task.subagent_started";
|
|
48
|
+
readonly SUBAGENT_COMPLETED: "task.subagent_completed";
|
|
49
|
+
readonly COMPACTION_EXECUTED: "task.compaction_executed";
|
|
50
|
+
readonly COMPACTION_SKIPPED: "task.compaction_skipped";
|
|
51
|
+
};
|
|
52
|
+
readonly HOOKS: {
|
|
53
|
+
readonly DISCOVERY_COMPLETED: "hooks.discovery_completed";
|
|
54
|
+
};
|
|
55
|
+
readonly WORKSPACE: {
|
|
56
|
+
readonly INITIALIZED: "workspace.initialized";
|
|
57
|
+
readonly INIT_ERROR: "workspace.init_error";
|
|
58
|
+
readonly PATH_RESOLVED: "workspace.path_resolved";
|
|
59
|
+
};
|
|
60
|
+
readonly SDK: {
|
|
61
|
+
readonly ERROR: "sdk.error";
|
|
62
|
+
};
|
|
63
|
+
};
|
|
64
|
+
export interface WorkspaceInitializedProperties {
|
|
65
|
+
root_count: number;
|
|
66
|
+
vcs_types: ReadonlyArray<string>;
|
|
67
|
+
init_duration_ms?: number;
|
|
68
|
+
feature_flag_enabled?: boolean;
|
|
69
|
+
is_remote_workspace?: boolean;
|
|
70
|
+
}
|
|
71
|
+
export interface WorkspaceInitErrorProperties {
|
|
72
|
+
fallback_to_single_root: boolean;
|
|
73
|
+
workspace_count?: number;
|
|
74
|
+
}
|
|
75
|
+
export interface WorkspacePathResolvedProperties {
|
|
76
|
+
ulid: string;
|
|
77
|
+
context: string;
|
|
78
|
+
resolution_type: "hint_provided" | "fallback_to_primary" | "cross_workspace_search";
|
|
79
|
+
hint_type?: "workspace_name" | "workspace_path" | "invalid";
|
|
80
|
+
resolution_success?: boolean;
|
|
81
|
+
target_workspace_index?: number;
|
|
82
|
+
is_multi_root_enabled?: boolean;
|
|
83
|
+
}
|
|
84
|
+
export declare function captureExtensionActivated(telemetry: ITelemetryService | undefined): void;
|
|
85
|
+
export declare function captureWorkspaceInitialized(telemetry: ITelemetryService | undefined, properties: WorkspaceInitializedProperties): void;
|
|
86
|
+
export declare function captureWorkspaceInitError(telemetry: ITelemetryService | undefined, error: Error | string, properties: WorkspaceInitErrorProperties): void;
|
|
87
|
+
export declare function captureWorkspacePathResolved(telemetry: ITelemetryService | undefined, properties: WorkspacePathResolvedProperties): void;
|
|
88
|
+
export declare function captureAuthStarted(telemetry: ITelemetryService | undefined, provider?: string): void;
|
|
89
|
+
export declare function captureAuthSucceeded(telemetry: ITelemetryService | undefined, provider?: string): void;
|
|
90
|
+
export declare function captureAuthFailed(telemetry: ITelemetryService | undefined, provider?: string, errorMessage?: string): void;
|
|
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;
|
|
103
|
+
export declare function captureTelemetryOptOut(telemetry: ITelemetryService | undefined, properties?: TelemetryProperties): void;
|
|
104
|
+
export declare function identifyAccount(telemetry: ITelemetryService | undefined, account: {
|
|
105
|
+
id?: string;
|
|
106
|
+
email?: string;
|
|
107
|
+
provider?: string;
|
|
108
|
+
organizationId?: string;
|
|
109
|
+
organizationName?: string;
|
|
110
|
+
memberId?: string;
|
|
111
|
+
}): void;
|
|
112
|
+
export declare function captureTaskCreated(telemetry: ITelemetryService | undefined, properties: {
|
|
113
|
+
ulid: string;
|
|
114
|
+
apiProvider?: string;
|
|
115
|
+
openAiCompatibleDomain?: string;
|
|
116
|
+
} & Partial<TelemetryAgentIdentityProperties>): void;
|
|
117
|
+
export declare function captureTaskRestarted(telemetry: ITelemetryService | undefined, properties: {
|
|
118
|
+
ulid: string;
|
|
119
|
+
apiProvider?: string;
|
|
120
|
+
openAiCompatibleDomain?: string;
|
|
121
|
+
} & Partial<TelemetryAgentIdentityProperties>): void;
|
|
122
|
+
/**
|
|
123
|
+
* Distinguishes the trigger that produced a `task.completed` telemetry event.
|
|
124
|
+
*
|
|
125
|
+
* - `submit_and_exit`: the assistant explicitly declared completion by
|
|
126
|
+
* invoking the canonical completion tool. Parity with original Cline's
|
|
127
|
+
* `attempt_completion`-anchored emission.
|
|
128
|
+
* - `shutdown`: the session lifecycle completed (typically a non-interactive
|
|
129
|
+
* single-run that finished without an explicit completion tool). Acts as a
|
|
130
|
+
* safety-net so we still report completed runs that never observed
|
|
131
|
+
* `submit_and_exit`.
|
|
132
|
+
*/
|
|
133
|
+
export type TaskCompletedSource = "submit_and_exit" | "shutdown";
|
|
134
|
+
export declare function captureTaskCompleted(telemetry: ITelemetryService | undefined, properties: {
|
|
135
|
+
ulid: string;
|
|
136
|
+
provider?: string;
|
|
137
|
+
modelId?: string;
|
|
138
|
+
mode?: string;
|
|
139
|
+
durationMs?: number;
|
|
140
|
+
source?: TaskCompletedSource;
|
|
141
|
+
} & Partial<TelemetryAgentIdentityProperties>): void;
|
|
142
|
+
export declare function captureConversationTurnEvent(telemetry: ITelemetryService | undefined, properties: {
|
|
143
|
+
ulid: string;
|
|
144
|
+
provider?: string;
|
|
145
|
+
model?: string;
|
|
146
|
+
source: "user" | "assistant";
|
|
147
|
+
mode?: string;
|
|
148
|
+
} & Partial<TelemetryAgentIdentityProperties>): void;
|
|
149
|
+
export declare function captureTokenUsage(telemetry: ITelemetryService | undefined, properties: {
|
|
150
|
+
ulid: string;
|
|
151
|
+
tokensIn: number;
|
|
152
|
+
tokensOut: number;
|
|
153
|
+
cacheWriteTokens?: number;
|
|
154
|
+
cacheReadTokens?: number;
|
|
155
|
+
totalCost?: number;
|
|
156
|
+
model: string;
|
|
157
|
+
} & Partial<TelemetryAgentIdentityProperties>): void;
|
|
158
|
+
export declare function captureModeSwitch(telemetry: ITelemetryService | undefined, ulid: string, mode?: string): void;
|
|
159
|
+
export declare function captureToolUsage(telemetry: ITelemetryService | undefined, properties: {
|
|
160
|
+
ulid: string;
|
|
161
|
+
tool: string;
|
|
162
|
+
modelId?: string;
|
|
163
|
+
provider?: string;
|
|
164
|
+
autoApproved?: boolean;
|
|
165
|
+
success: boolean;
|
|
166
|
+
} & Partial<TelemetryAgentIdentityProperties>): void;
|
|
167
|
+
export declare function captureSkillUsed(telemetry: ITelemetryService | undefined, properties: {
|
|
168
|
+
ulid: string;
|
|
169
|
+
skillName: string;
|
|
170
|
+
skillSource: "global" | "project";
|
|
171
|
+
skillsAvailableGlobal: number;
|
|
172
|
+
skillsAvailableProject: number;
|
|
173
|
+
provider?: string;
|
|
174
|
+
modelId?: string;
|
|
175
|
+
} & Partial<TelemetryAgentIdentityProperties>): void;
|
|
176
|
+
export declare function captureDiffEditFailure(telemetry: ITelemetryService | undefined, properties: {
|
|
177
|
+
ulid: string;
|
|
178
|
+
modelId?: string;
|
|
179
|
+
provider?: string;
|
|
180
|
+
errorType?: string;
|
|
181
|
+
} & Partial<TelemetryAgentIdentityProperties>): void;
|
|
182
|
+
export declare function captureProviderApiError(telemetry: ITelemetryService | undefined, properties: {
|
|
183
|
+
ulid: string;
|
|
184
|
+
model: string;
|
|
185
|
+
errorMessage: string;
|
|
186
|
+
provider?: string;
|
|
187
|
+
errorStatus?: number;
|
|
188
|
+
requestId?: string;
|
|
189
|
+
} & Partial<TelemetryAgentIdentityProperties>): void;
|
|
190
|
+
export declare function captureMentionUsed(telemetry: ITelemetryService | undefined, mentionType: "file" | "folder" | "url" | "problems" | "terminal" | "git-changes" | "commit", contentLength?: number): void;
|
|
191
|
+
export declare function captureMentionFailed(telemetry: ITelemetryService | undefined, mentionType: "file" | "folder" | "url" | "problems" | "terminal" | "git-changes" | "commit", errorType: "not_found" | "permission_denied" | "network_error" | "parse_error" | "unknown", errorMessage?: string): void;
|
|
192
|
+
export declare function captureMentionSearchResults(telemetry: ITelemetryService | undefined, query: string, resultCount: number, searchType: "file" | "folder" | "all", isEmpty: boolean): void;
|
|
193
|
+
export declare function captureAgentCreated(telemetry: ITelemetryService | undefined, properties: {
|
|
194
|
+
ulid: string;
|
|
195
|
+
modelId?: string;
|
|
196
|
+
provider?: string;
|
|
197
|
+
} & TelemetryAgentIdentityProperties): void;
|
|
198
|
+
export declare function captureAgentTeamCreated(telemetry: ITelemetryService | undefined, properties: {
|
|
199
|
+
ulid: string;
|
|
200
|
+
teamId: string;
|
|
201
|
+
teamName: string;
|
|
202
|
+
leadAgentId?: string;
|
|
203
|
+
restoredFromPersistence?: boolean;
|
|
204
|
+
}): void;
|
|
205
|
+
export declare function captureSubagentExecution(telemetry: ITelemetryService | undefined, properties: {
|
|
206
|
+
ulid: string;
|
|
207
|
+
durationMs: number;
|
|
208
|
+
outputLines?: number;
|
|
209
|
+
event: "created" | "started" | "ended";
|
|
210
|
+
agentId: string;
|
|
211
|
+
parentId?: string;
|
|
212
|
+
errorMessage?: string;
|
|
213
|
+
type?: "agent" | "team";
|
|
214
|
+
} & Partial<TelemetryAgentIdentityProperties>): void;
|
|
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;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function resolveCoreDistinctId(explicitDistinctId?: string): string;
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export type { ITelemetryAdapter, TelemetryArray, TelemetryMetadata, TelemetryObject, TelemetryPrimitive, TelemetryProperties, TelemetryValue, } from "./ITelemetryAdapter";
|
|
2
|
+
export { OpenTelemetryAdapter, type OpenTelemetryAdapterOptions, } from "./OpenTelemetryAdapter";
|
|
3
|
+
export { type ConfiguredTelemetryHandle, type CreateOpenTelemetryTelemetryServiceOptions, createConfiguredTelemetryHandle, createConfiguredTelemetryService, createOpenTelemetryTelemetryService, OpenTelemetryProvider, type OpenTelemetryProviderOptions, } from "./OpenTelemetryProvider";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
class u{name;metadata;meter;logger;enabled;distinctId;commonProperties;counters=new Map;histograms=new Map;gauges=new Map;gaugeValues=new Map;meterProvider;loggerProvider;constructor(e){this.name=e.name??"OpenTelemetryAdapter",this.metadata={...e.metadata},this.meterProvider=e.meterProvider,this.loggerProvider=e.loggerProvider,this.meter=e.meterProvider?.getMeter("cline")??null,this.logger=e.loggerProvider?.getLogger("cline")??null,this.enabled=e.enabled??!0,this.distinctId=e.distinctId,this.commonProperties=e.commonProperties?{...e.commonProperties}:{}}emit(e,t){if(!this.isEnabled())return;this.emitLog(e,t,!1)}emitRequired(e,t){this.emitLog(e,t,!0)}recordCounter(e,t,a,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};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type * as LlmsProviders from "@cline/llms";
|
|
2
|
+
import type { SessionAccumulatedUsage } from "../runtime/host/runtime-host";
|
|
3
|
+
export declare function createInitialAccumulatedUsage(): SessionAccumulatedUsage;
|
|
4
|
+
export declare function accumulateUsageTotals(baseline: SessionAccumulatedUsage, usage: {
|
|
5
|
+
inputTokens?: number;
|
|
6
|
+
outputTokens?: number;
|
|
7
|
+
cacheReadTokens?: number;
|
|
8
|
+
cacheWriteTokens?: number;
|
|
9
|
+
totalCost?: number;
|
|
10
|
+
}): SessionAccumulatedUsage;
|
|
11
|
+
export declare function sumUsageTotals(usages: Iterable<SessionAccumulatedUsage>): SessionAccumulatedUsage;
|
|
12
|
+
export declare function summarizeUsageFromMessages(messages: LlmsProviders.Message[]): SessionAccumulatedUsage;
|
|
13
|
+
/**
|
|
14
|
+
* Current model context-window usage, derived from the latest assistant LLM
|
|
15
|
+
* call. Provider usage is normalized so `inputTokens` is already the full
|
|
16
|
+
* prompt size, including any cache-read/cache-write portions. Do not add cache
|
|
17
|
+
* fields back on top.
|
|
18
|
+
*/
|
|
19
|
+
export declare function getCurrentContextSize(messages: readonly LlmsProviders.Message[]): number | undefined;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export interface FastFileIndexOptions {
|
|
2
|
+
ttlMs?: number;
|
|
3
|
+
}
|
|
4
|
+
export declare function getFileIndex(cwd: string, options?: FastFileIndexOptions): Promise<Set<string>>;
|
|
5
|
+
export declare function prewarmFileIndex(cwd: string, options?: FastFileIndexOptions): Promise<void>;
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export type { FastFileIndexOptions } from "./file-indexer";
|
|
2
|
+
export { getFileIndex, prewarmFileIndex } from "./file-indexer";
|
|
3
|
+
export type { MentionEnricherOptions, MentionEnrichmentResult, } from "./mention-enricher";
|
|
4
|
+
export { enrichPromptWithMentions } from "./mention-enricher";
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { type FastFileIndexOptions } from "./file-indexer";
|
|
2
|
+
export interface MentionEnricherOptions extends FastFileIndexOptions {
|
|
3
|
+
maxFiles?: number;
|
|
4
|
+
maxFileBytes?: number;
|
|
5
|
+
maxTotalBytes?: number;
|
|
6
|
+
}
|
|
7
|
+
export interface MentionEnrichmentResult {
|
|
8
|
+
prompt: string;
|
|
9
|
+
mentions: string[];
|
|
10
|
+
matchedFiles: string[];
|
|
11
|
+
ignoredMentions: string[];
|
|
12
|
+
}
|
|
13
|
+
export declare function enrichPromptWithMentions(input: string, cwd: string, options?: MentionEnricherOptions): Promise<MentionEnrichmentResult>;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { type WorkspaceInfo, type WorkspaceManifest } from "@cline/shared";
|
|
2
|
+
export interface WorkspaceManagerEvent {
|
|
3
|
+
type: "workspace_added" | "workspace_switched";
|
|
4
|
+
workspace: WorkspaceInfo;
|
|
5
|
+
}
|
|
6
|
+
export interface WorkspaceManager {
|
|
7
|
+
addWorkspacePath(workspacePath: string): Promise<WorkspaceInfo>;
|
|
8
|
+
switchWorkspace(workspacePath: string): Promise<WorkspaceInfo>;
|
|
9
|
+
subscribe(listener: (event: WorkspaceManagerEvent) => void): () => void;
|
|
10
|
+
getCurrentWorkspace(): WorkspaceInfo | undefined;
|
|
11
|
+
getWorkspace(workspacePath: string): WorkspaceInfo | undefined;
|
|
12
|
+
listWorkspaces(): WorkspaceInfo[];
|
|
13
|
+
getManifest(): WorkspaceManifest;
|
|
14
|
+
}
|
|
15
|
+
export declare class InMemoryWorkspaceManager implements WorkspaceManager {
|
|
16
|
+
private manifest;
|
|
17
|
+
private readonly listeners;
|
|
18
|
+
constructor(manifest?: WorkspaceManifest);
|
|
19
|
+
addWorkspacePath(workspacePath: string): Promise<WorkspaceInfo>;
|
|
20
|
+
switchWorkspace(workspacePath: string): Promise<WorkspaceInfo>;
|
|
21
|
+
subscribe(listener: (event: WorkspaceManagerEvent) => void): () => void;
|
|
22
|
+
getCurrentWorkspace(): WorkspaceInfo | undefined;
|
|
23
|
+
getWorkspace(workspacePath: string): WorkspaceInfo | undefined;
|
|
24
|
+
listWorkspaces(): WorkspaceInfo[];
|
|
25
|
+
getManifest(): WorkspaceManifest;
|
|
26
|
+
private emit;
|
|
27
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { WorkspaceInfo } from "@cline/shared";
|
|
2
|
+
export interface WorkspaceInfoDiagnostics {
|
|
3
|
+
info: WorkspaceInfo;
|
|
4
|
+
vcsType: "git" | "none";
|
|
5
|
+
error?: {
|
|
6
|
+
errorType: string;
|
|
7
|
+
message: string;
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
export interface BuiltWorkspaceMetadata {
|
|
11
|
+
workspaceInfo: WorkspaceInfo;
|
|
12
|
+
workspaceMetadata: string;
|
|
13
|
+
durationMs: number;
|
|
14
|
+
vcsType: "git" | "none";
|
|
15
|
+
initError?: {
|
|
16
|
+
errorType: string;
|
|
17
|
+
message: string;
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
export declare function normalizeWorkspacePath(workspacePath: string): string;
|
|
21
|
+
export declare function generateWorkspaceInfo(workspacePath: string): Promise<WorkspaceInfo>;
|
|
22
|
+
export declare function generateWorkspaceInfoWithDiagnostics(workspacePath: string): Promise<WorkspaceInfoDiagnostics>;
|
|
23
|
+
export declare function buildWorkspaceMetadata(cwd: string): Promise<string>;
|
|
24
|
+
/**
|
|
25
|
+
* Generate workspace metadata as both a structured `WorkspaceInfo` object and
|
|
26
|
+
* its pre-serialized string form.
|
|
27
|
+
*
|
|
28
|
+
* Use this instead of calling `buildWorkspaceMetadata` + `generateWorkspaceInfo`
|
|
29
|
+
* separately so the git I/O only happens once.
|
|
30
|
+
*/
|
|
31
|
+
export declare function buildWorkspaceMetadataWithInfo(cwd: string): Promise<BuiltWorkspaceMetadata>;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { ITelemetryService, WorkspaceInfo } from "@cline/shared";
|
|
2
|
+
export interface WorkspaceLifecycleTelemetryInput {
|
|
3
|
+
telemetry?: ITelemetryService;
|
|
4
|
+
rootPath: string;
|
|
5
|
+
workspaceInfo?: WorkspaceInfo;
|
|
6
|
+
rootCount?: number;
|
|
7
|
+
vcsType?: "git" | "none";
|
|
8
|
+
vcsTypes?: ReadonlyArray<string>;
|
|
9
|
+
durationMs?: number;
|
|
10
|
+
initError?: {
|
|
11
|
+
errorType: string;
|
|
12
|
+
message: string;
|
|
13
|
+
};
|
|
14
|
+
featureFlagEnabled?: boolean;
|
|
15
|
+
isRemoteWorkspace?: boolean;
|
|
16
|
+
}
|
|
17
|
+
export declare function emitWorkspaceLifecycleTelemetry(input: WorkspaceLifecycleTelemetryInput): void;
|
|
18
|
+
export declare function resetWorkspaceTelemetryForTests(): void;
|