@cline/core 0.0.74 → 0.0.75-nightly.1787107092
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ClineCore.d.ts +13 -3
- package/dist/cline-core/types.d.ts +2 -2
- package/dist/extensions/plugin/plugin-sandbox.d.ts +8 -0
- package/dist/extensions/plugin-sandbox-bootstrap.js +1 -1
- package/dist/extensions/tools/runtime.d.ts +1 -0
- package/dist/hub/client/index.d.ts +15 -0
- package/dist/hub/client/managed-hub-build-watcher.d.ts +10 -3
- package/dist/hub/client/session-client.d.ts +2 -2
- package/dist/hub/daemon/entry.js +188 -188
- package/dist/hub/daemon/index.d.ts +19 -0
- package/dist/hub/discovery/index.d.ts +42 -13
- package/dist/hub/discovery/workspace.d.ts +9 -0
- package/dist/hub/index.js +175 -175
- package/dist/hub/runtime-host/hub-runtime-host.d.ts +1 -1
- package/dist/index.d.ts +6 -5
- package/dist/index.js +180 -180
- package/dist/runtime/config/agent-runtime-config-builder.d.ts +5 -0
- package/dist/runtime/host/local-runtime-host.d.ts +2 -2
- package/dist/runtime/host/runtime-host-support.d.ts +1 -1
- package/dist/runtime/host/runtime-host.d.ts +4 -4
- package/dist/runtime/orchestration/runtime-event-adapter.d.ts +3 -1
- package/dist/runtime/orchestration/session-runtime.d.ts +2 -1
- package/dist/runtime/tools/subprocess-sandbox-lifecycle.d.ts +9 -0
- package/dist/runtime/tools/subprocess-sandbox.d.ts +19 -0
- package/dist/services/global-settings.d.ts +13 -1
- package/dist/services/llms/provider-defaults.d.ts +8 -0
- package/dist/services/providers/local-provider-registry.d.ts +85 -4
- package/dist/services/providers/local-provider-service.d.ts +27 -1
- package/dist/services/storage/provider-settings-manager.d.ts +3 -1
- package/dist/services/telemetry/index.js +1 -1
- package/dist/session/checkpoint-restore.d.ts +4 -4
- package/dist/session/display-messages.d.ts +28 -0
- package/dist/session/persisted-tool-result-content.d.ts +8 -0
- package/dist/session/services/persistence-service.d.ts +2 -2
- package/dist/session/session-snapshot.d.ts +2 -2
- package/dist/session/session-versioning-service.d.ts +4 -4
- package/dist/session/stores/session-manifest-store.d.ts +1 -1
- package/dist/session/team/team-child-session-manager.d.ts +2 -2
- package/dist/types/provider-settings.d.ts +10 -0
- package/dist/types.d.ts +2 -3
- package/package.json +4 -4
|
@@ -49,6 +49,11 @@ export interface CreateAgentRuntimeConfigInput {
|
|
|
49
49
|
readonly prepareTurn?: (context: AgentRuntimePrepareTurnContext) => Promise<AgentRuntimePrepareTurnResult | undefined> | AgentRuntimePrepareTurnResult | undefined;
|
|
50
50
|
/** Seed messages (usually `session.conversation.getMessages()`). */
|
|
51
51
|
readonly initialMessages?: readonly AgentMessage[];
|
|
52
|
+
/**
|
|
53
|
+
* Optional completion-policy override. Pass `null` for model modes that
|
|
54
|
+
* cannot call tools (for example image generation).
|
|
55
|
+
*/
|
|
56
|
+
readonly completionPolicy?: AgentRuntimeConfig["completionPolicy"] | null;
|
|
52
57
|
/**
|
|
53
58
|
* Override for `AgentRuntimeConfig.systemPrompt` — useful when
|
|
54
59
|
* the caller has composed additional guidance (e.g. via
|
|
@@ -81,8 +81,8 @@ export declare class LocalRuntimeHost implements RuntimeHost {
|
|
|
81
81
|
private canPersistCompactionState;
|
|
82
82
|
private persistActiveSessionCompactionState;
|
|
83
83
|
private enqueueCompactionStateWrite;
|
|
84
|
-
readLiveSessionMessages(sessionId: string): Promise<LlmsProviders.
|
|
85
|
-
readSessionMessages(sessionId: string): Promise<LlmsProviders.
|
|
84
|
+
readLiveSessionMessages(sessionId: string): Promise<LlmsProviders.MessageWithMetadata[]>;
|
|
85
|
+
readSessionMessages(sessionId: string): Promise<LlmsProviders.MessageWithMetadata[]>;
|
|
86
86
|
dispatchHookEvent(payload: HookEventPayload): Promise<void>;
|
|
87
87
|
subscribe(listener: (event: CoreSessionEvent) => void, options?: RuntimeHostSubscribeOptions): () => void;
|
|
88
88
|
updateSessionModel(sessionId: string, modelId: string): Promise<void>;
|
|
@@ -8,7 +8,7 @@ export declare class RuntimeHostEventBus {
|
|
|
8
8
|
emit(event: CoreSessionEvent): void;
|
|
9
9
|
get size(): number;
|
|
10
10
|
}
|
|
11
|
-
export declare function readPersistedMessagesFile(messagesPath?: string | null): Promise<LlmsProviders.
|
|
11
|
+
export declare function readPersistedMessagesFile(messagesPath?: string | null): Promise<LlmsProviders.MessageWithMetadata[]>;
|
|
12
12
|
export declare function cloneAccumulatedUsage(usage: SessionAccumulatedUsage | undefined): SessionAccumulatedUsage | undefined;
|
|
13
13
|
type HookAuditBackend = {
|
|
14
14
|
queueSpawnRequest(payload: HookEventPayload): Promise<void>;
|
|
@@ -70,7 +70,7 @@ export interface StartSessionInput {
|
|
|
70
70
|
prompt?: string;
|
|
71
71
|
interactive?: boolean;
|
|
72
72
|
sessionMetadata?: Record<string, unknown>;
|
|
73
|
-
initialMessages?: LlmsProviders.
|
|
73
|
+
initialMessages?: LlmsProviders.MessageWithMetadata[];
|
|
74
74
|
initialCompactionState?: SessionCompactionState;
|
|
75
75
|
userImages?: string[];
|
|
76
76
|
userFiles?: string[];
|
|
@@ -174,7 +174,7 @@ export interface RestoreSessionInput {
|
|
|
174
174
|
export interface RestoreSessionResult {
|
|
175
175
|
sessionId?: string;
|
|
176
176
|
startResult?: StartSessionResult;
|
|
177
|
-
messages?: LlmsProviders.
|
|
177
|
+
messages?: LlmsProviders.MessageWithMetadata[];
|
|
178
178
|
checkpoint: CheckpointEntry;
|
|
179
179
|
}
|
|
180
180
|
/**
|
|
@@ -204,7 +204,7 @@ export interface RuntimeHost {
|
|
|
204
204
|
updated: boolean;
|
|
205
205
|
}>;
|
|
206
206
|
readSessionCompactionState(sessionId: string): Promise<SessionCompactionState | undefined>;
|
|
207
|
-
readSessionMessages(sessionId: string): Promise<LlmsProviders.
|
|
207
|
+
readSessionMessages(sessionId: string): Promise<LlmsProviders.MessageWithMetadata[]>;
|
|
208
208
|
/**
|
|
209
209
|
* Like {@link readSessionMessages}, but prefers the resident session's
|
|
210
210
|
* in-memory conversation over the persisted transcript. Disk persistence
|
|
@@ -214,7 +214,7 @@ export interface RuntimeHost {
|
|
|
214
214
|
* session for a mode switch. Optional: hosts without live-session access
|
|
215
215
|
* (e.g. hub clients) fall back to the persisted transcript.
|
|
216
216
|
*/
|
|
217
|
-
readLiveSessionMessages?(sessionId: string): Promise<LlmsProviders.
|
|
217
|
+
readLiveSessionMessages?(sessionId: string): Promise<LlmsProviders.MessageWithMetadata[]>;
|
|
218
218
|
dispatchHookEvent(payload: HookEventPayload): Promise<void>;
|
|
219
219
|
subscribe(listener: (event: CoreSessionEvent) => void, options?: RuntimeHostSubscribeOptions): () => void;
|
|
220
220
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Adapter from the new `AgentRuntimeEvent` union (
|
|
2
|
+
* Adapter from the new `AgentRuntimeEvent` union (defined
|
|
3
3
|
* in `@cline/shared/src/agent.ts`) to the legacy `AgentEvent` union
|
|
4
4
|
* (9 top-level types, defined in
|
|
5
5
|
* `@cline/shared/src/agents/types.ts`) consumed by today's
|
|
@@ -28,6 +28,8 @@
|
|
|
28
28
|
* accumulated } (per delta)
|
|
29
29
|
* reasoning deltas → content_start { contentType:"reasoning",
|
|
30
30
|
* reasoning, redacted } (per delta)
|
|
31
|
+
* assistant-media → content_end { contentType:"media", media }
|
|
32
|
+
* at the original stream position
|
|
31
33
|
* assistant-message → one content_end { contentType:"text", text }
|
|
32
34
|
* if any text parts; one
|
|
33
35
|
* content_end { contentType:"reasoning", reasoning }
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { AgentConfig, AgentEvent, AgentHooks, AgentResult, AgentTool, BasicLogger, ITelemetryService, RuntimeConfigExtensionKind, ToolApprovalRequest, ToolApprovalResult } from "@cline/shared";
|
|
1
|
+
import type { AgentConfig, AgentEvent, AgentHooks, AgentResult, AgentTool, BasicLogger, ITelemetryService, ModelTool, RuntimeConfigExtensionKind, ToolApprovalRequest, ToolApprovalResult } from "@cline/shared";
|
|
2
2
|
import type { UserInstructionConfigService } from "../../extensions/config";
|
|
3
3
|
import type { ToolExecutors } from "../../extensions/tools";
|
|
4
4
|
import type { AgentTeamsRuntime, DelegatedAgentConfigProvider, SubAgentEndContext, SubAgentStartContext, TeamEvent } from "../../extensions/tools/team";
|
|
@@ -18,6 +18,7 @@ type LeadAgentHandle = {
|
|
|
18
18
|
};
|
|
19
19
|
export interface BuiltRuntime {
|
|
20
20
|
tools: AgentTool[];
|
|
21
|
+
modelTools?: ModelTool[];
|
|
21
22
|
hooks?: AgentHooks;
|
|
22
23
|
logger?: BasicLogger;
|
|
23
24
|
telemetry?: ITelemetryService;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export declare const MAX_NODE_TIMER_DELAY_MS = 2147483647;
|
|
2
|
+
type ParentProcess = {
|
|
3
|
+
once(event: "disconnect", listener: () => void): unknown;
|
|
4
|
+
exit(code: number): unknown;
|
|
5
|
+
};
|
|
6
|
+
export declare function normalizeIdleTimeoutMs(timeoutMs: number | undefined): number | undefined;
|
|
7
|
+
/** Ensure an IPC child cannot survive the process that owns it. */
|
|
8
|
+
export declare function installParentDisconnectGuard(target?: ParentProcess): void;
|
|
9
|
+
export {};
|
|
@@ -5,6 +5,11 @@ export interface SubprocessSandboxOptions {
|
|
|
5
5
|
bootstrapFile?: string;
|
|
6
6
|
/** Runtime executable for internal JavaScript helpers. Defaults to node/bun instead of packaged CLI binaries. */
|
|
7
7
|
runtimeExecutable?: string;
|
|
8
|
+
/**
|
|
9
|
+
* Shut down the child after this many milliseconds with no calls in flight.
|
|
10
|
+
* The next call starts a fresh child transparently. Disabled when omitted.
|
|
11
|
+
*/
|
|
12
|
+
idleTimeoutMs?: number;
|
|
8
13
|
name?: string;
|
|
9
14
|
onEvent?: (event: {
|
|
10
15
|
name: string;
|
|
@@ -29,15 +34,29 @@ export declare function buildSubprocessSandboxCommand(args: string[], options?:
|
|
|
29
34
|
}): string[];
|
|
30
35
|
export declare class SubprocessSandbox {
|
|
31
36
|
private readonly options;
|
|
37
|
+
private readonly idleTimeoutMs;
|
|
32
38
|
private process;
|
|
33
39
|
private requestCounter;
|
|
34
40
|
private readonly pending;
|
|
41
|
+
private idleTimer;
|
|
42
|
+
private readonly shutdowns;
|
|
35
43
|
constructor(options: SubprocessSandboxOptions);
|
|
36
44
|
private get processLabel();
|
|
37
45
|
private clearPendingRequest;
|
|
46
|
+
private clearIdleTimer;
|
|
47
|
+
private hasPendingRequests;
|
|
48
|
+
/**
|
|
49
|
+
* The parent is the sole idle-lifecycle authority. A matching child-side
|
|
50
|
+
* deadline can fire just before this timer and drop a newly dispatched RPC.
|
|
51
|
+
* Children should independently handle only parent IPC disconnection.
|
|
52
|
+
*/
|
|
53
|
+
private armIdleTimer;
|
|
38
54
|
start(): void;
|
|
39
55
|
call<TResult = unknown>(method: string, args: unknown, options?: SandboxCallOptions): Promise<TResult>;
|
|
40
56
|
shutdown(): Promise<void>;
|
|
57
|
+
private shutdownProcess;
|
|
58
|
+
private terminateProcess;
|
|
41
59
|
private onMessage;
|
|
60
|
+
private failPendingForProcess;
|
|
42
61
|
private failPending;
|
|
43
62
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type AgentConfig, type AgentTool, type ConfigurableModelToolName, type ITelemetryService, type ModelToolSettings } from "@cline/shared";
|
|
2
2
|
import { z } from "zod";
|
|
3
3
|
declare const GlobalCompactionStrategySchema: z.ZodCatch<z.ZodEnum<{
|
|
4
4
|
basic: "basic";
|
|
@@ -27,6 +27,11 @@ export declare const GlobalSettingsSchema: z.ZodPipe<z.ZodObject<{
|
|
|
27
27
|
toolAutoApprove: z.ZodCatch<z.ZodOptional<z.ZodBoolean>>;
|
|
28
28
|
tuiTheme: z.ZodCatch<z.ZodOptional<z.ZodString>>;
|
|
29
29
|
disabledTools: z.ZodOptional<z.ZodPipe<z.ZodPreprocess<z.ZodOptional<z.ZodArray<z.ZodString>>>, z.ZodTransform<string[] | undefined, string[] | undefined>>>;
|
|
30
|
+
tools: z.ZodOptional<z.ZodRecord<z.ZodEnum<{
|
|
31
|
+
web_search: "web_search";
|
|
32
|
+
}> & z.core.$partial, z.ZodObject<{
|
|
33
|
+
enabled: z.ZodBoolean;
|
|
34
|
+
}, z.core.$strip>>>;
|
|
30
35
|
disabledPlugins: z.ZodOptional<z.ZodPipe<z.ZodPreprocess<z.ZodOptional<z.ZodArray<z.ZodString>>>, z.ZodTransform<string[] | undefined, string[] | undefined>>>;
|
|
31
36
|
}, z.core.$strip>, z.ZodTransform<{
|
|
32
37
|
telemetryOptOut: boolean;
|
|
@@ -37,6 +42,7 @@ export declare const GlobalSettingsSchema: z.ZodPipe<z.ZodObject<{
|
|
|
37
42
|
toolAutoApprove?: boolean;
|
|
38
43
|
tuiTheme?: string;
|
|
39
44
|
disabledTools?: string[];
|
|
45
|
+
tools?: ModelToolSettings;
|
|
40
46
|
disabledPlugins?: string[];
|
|
41
47
|
}, {
|
|
42
48
|
telemetryOptOut: boolean;
|
|
@@ -47,6 +53,9 @@ export declare const GlobalSettingsSchema: z.ZodPipe<z.ZodObject<{
|
|
|
47
53
|
toolAutoApprove?: boolean | undefined;
|
|
48
54
|
tuiTheme?: string | undefined;
|
|
49
55
|
disabledTools?: string[] | undefined;
|
|
56
|
+
tools?: Partial<Record<"web_search", {
|
|
57
|
+
enabled: boolean;
|
|
58
|
+
}>> | undefined;
|
|
50
59
|
disabledPlugins?: string[] | undefined;
|
|
51
60
|
}>>;
|
|
52
61
|
export type GlobalSettings = z.infer<typeof GlobalSettingsSchema>;
|
|
@@ -84,6 +93,9 @@ export declare function setToolAutoApproveGlobally(toolAutoApprove: boolean): vo
|
|
|
84
93
|
export declare function resolveDisabledToolNames(disabledToolNames?: ReadonlyArray<string>): Set<string>;
|
|
85
94
|
export declare function resolveDisabledPluginPaths(disabledPluginPaths?: ReadonlyArray<string>): Set<string>;
|
|
86
95
|
export declare function isToolDisabledGlobally(toolName: string): boolean;
|
|
96
|
+
export declare function resolveModelToolSettings(): ModelToolSettings;
|
|
97
|
+
export declare function isModelToolEnabledGlobally(name: ConfigurableModelToolName): boolean;
|
|
98
|
+
export declare function setModelToolEnabledGlobally(name: ConfigurableModelToolName, enabled: boolean): void;
|
|
87
99
|
export declare function toggleDisabledTool(toolName: string): boolean;
|
|
88
100
|
export declare function setDisabledTools(toolNames: ReadonlyArray<string>, disabledValue: boolean): void;
|
|
89
101
|
export declare function setToolDisabledGlobally(toolName: string, disabled: boolean): boolean;
|
|
@@ -19,6 +19,14 @@ export interface ProviderDefaults {
|
|
|
19
19
|
capabilities?: ProviderCapability[];
|
|
20
20
|
}
|
|
21
21
|
export declare const DEFAULT_MODELS_CATALOG_URL = "https://models.dev/api.json";
|
|
22
|
+
/**
|
|
23
|
+
* Whether a provider's model catalog comes from the customer's configured
|
|
24
|
+
* endpoint rather than a shared public catalog.
|
|
25
|
+
*
|
|
26
|
+
* Keep this derived from the fetcher registry so host consumers cannot drift
|
|
27
|
+
* from the providers whose live metadata is endpoint-specific.
|
|
28
|
+
*/
|
|
29
|
+
export declare function isPrivateModelCatalogProvider(providerId: string): boolean;
|
|
22
30
|
export declare function clearPublicModelsCatalogCache(): void;
|
|
23
31
|
export declare function getLiveModelsCatalog(options?: Pick<ModelCatalogConfig, "url" | "cacheTtlMs">): Promise<Record<string, Record<string, ModelInfo>>>;
|
|
24
32
|
export declare function clearLiveModelsCatalogCache(url?: string): void;
|
|
@@ -9,8 +9,8 @@ export declare const StoredModelEntrySchema: z.ZodObject<{
|
|
|
9
9
|
contextWindow: z.ZodCatch<z.ZodOptional<z.ZodNumber>>;
|
|
10
10
|
maxInputTokens: z.ZodCatch<z.ZodOptional<z.ZodNumber>>;
|
|
11
11
|
capabilities: z.ZodOptional<z.ZodArray<z.ZodEnum<{
|
|
12
|
-
images: "images";
|
|
13
12
|
video: "video";
|
|
13
|
+
images: "images";
|
|
14
14
|
tools: "tools";
|
|
15
15
|
streaming: "streaming";
|
|
16
16
|
"prompt-cache": "prompt-cache";
|
|
@@ -25,6 +25,33 @@ export declare const StoredModelEntrySchema: z.ZodObject<{
|
|
|
25
25
|
supportsVision: z.ZodOptional<z.ZodBoolean>;
|
|
26
26
|
supportsAttachments: z.ZodOptional<z.ZodBoolean>;
|
|
27
27
|
supportsReasoning: z.ZodOptional<z.ZodBoolean>;
|
|
28
|
+
operation: z.ZodOptional<z.ZodEnum<{
|
|
29
|
+
language: "language";
|
|
30
|
+
"image-generation": "image-generation";
|
|
31
|
+
"speech-generation": "speech-generation";
|
|
32
|
+
"video-generation": "video-generation";
|
|
33
|
+
transcription: "transcription";
|
|
34
|
+
}>>;
|
|
35
|
+
operationModes: z.ZodOptional<z.ZodArray<z.ZodEnum<{
|
|
36
|
+
streaming: "streaming";
|
|
37
|
+
batch: "batch";
|
|
38
|
+
}>>>;
|
|
39
|
+
modalities: z.ZodOptional<z.ZodObject<{
|
|
40
|
+
input: z.ZodArray<z.ZodEnum<{
|
|
41
|
+
image: "image";
|
|
42
|
+
audio: "audio";
|
|
43
|
+
video: "video";
|
|
44
|
+
text: "text";
|
|
45
|
+
pdf: "pdf";
|
|
46
|
+
}>>;
|
|
47
|
+
output: z.ZodArray<z.ZodEnum<{
|
|
48
|
+
image: "image";
|
|
49
|
+
audio: "audio";
|
|
50
|
+
video: "video";
|
|
51
|
+
text: "text";
|
|
52
|
+
pdf: "pdf";
|
|
53
|
+
}>>;
|
|
54
|
+
}, z.core.$strip>>;
|
|
28
55
|
inputPrice: z.ZodCatch<z.ZodOptional<z.ZodNumber>>;
|
|
29
56
|
outputPrice: z.ZodCatch<z.ZodOptional<z.ZodNumber>>;
|
|
30
57
|
cacheReadsPrice: z.ZodCatch<z.ZodOptional<z.ZodNumber>>;
|
|
@@ -127,8 +154,8 @@ export declare const StoredProviderEntrySchema: z.ZodObject<{
|
|
|
127
154
|
contextWindow: z.ZodCatch<z.ZodOptional<z.ZodNumber>>;
|
|
128
155
|
maxInputTokens: z.ZodCatch<z.ZodOptional<z.ZodNumber>>;
|
|
129
156
|
capabilities: z.ZodOptional<z.ZodArray<z.ZodEnum<{
|
|
130
|
-
images: "images";
|
|
131
157
|
video: "video";
|
|
158
|
+
images: "images";
|
|
132
159
|
tools: "tools";
|
|
133
160
|
streaming: "streaming";
|
|
134
161
|
"prompt-cache": "prompt-cache";
|
|
@@ -143,6 +170,33 @@ export declare const StoredProviderEntrySchema: z.ZodObject<{
|
|
|
143
170
|
supportsVision: z.ZodOptional<z.ZodBoolean>;
|
|
144
171
|
supportsAttachments: z.ZodOptional<z.ZodBoolean>;
|
|
145
172
|
supportsReasoning: z.ZodOptional<z.ZodBoolean>;
|
|
173
|
+
operation: z.ZodOptional<z.ZodEnum<{
|
|
174
|
+
language: "language";
|
|
175
|
+
"image-generation": "image-generation";
|
|
176
|
+
"speech-generation": "speech-generation";
|
|
177
|
+
"video-generation": "video-generation";
|
|
178
|
+
transcription: "transcription";
|
|
179
|
+
}>>;
|
|
180
|
+
operationModes: z.ZodOptional<z.ZodArray<z.ZodEnum<{
|
|
181
|
+
streaming: "streaming";
|
|
182
|
+
batch: "batch";
|
|
183
|
+
}>>>;
|
|
184
|
+
modalities: z.ZodOptional<z.ZodObject<{
|
|
185
|
+
input: z.ZodArray<z.ZodEnum<{
|
|
186
|
+
image: "image";
|
|
187
|
+
audio: "audio";
|
|
188
|
+
video: "video";
|
|
189
|
+
text: "text";
|
|
190
|
+
pdf: "pdf";
|
|
191
|
+
}>>;
|
|
192
|
+
output: z.ZodArray<z.ZodEnum<{
|
|
193
|
+
image: "image";
|
|
194
|
+
audio: "audio";
|
|
195
|
+
video: "video";
|
|
196
|
+
text: "text";
|
|
197
|
+
pdf: "pdf";
|
|
198
|
+
}>>;
|
|
199
|
+
}, z.core.$strip>>;
|
|
146
200
|
inputPrice: z.ZodCatch<z.ZodOptional<z.ZodNumber>>;
|
|
147
201
|
outputPrice: z.ZodCatch<z.ZodOptional<z.ZodNumber>>;
|
|
148
202
|
cacheReadsPrice: z.ZodCatch<z.ZodOptional<z.ZodNumber>>;
|
|
@@ -207,8 +261,8 @@ export declare const StoredModelsFileSchema: z.ZodObject<{
|
|
|
207
261
|
contextWindow: z.ZodCatch<z.ZodOptional<z.ZodNumber>>;
|
|
208
262
|
maxInputTokens: z.ZodCatch<z.ZodOptional<z.ZodNumber>>;
|
|
209
263
|
capabilities: z.ZodOptional<z.ZodArray<z.ZodEnum<{
|
|
210
|
-
images: "images";
|
|
211
264
|
video: "video";
|
|
265
|
+
images: "images";
|
|
212
266
|
tools: "tools";
|
|
213
267
|
streaming: "streaming";
|
|
214
268
|
"prompt-cache": "prompt-cache";
|
|
@@ -223,6 +277,33 @@ export declare const StoredModelsFileSchema: z.ZodObject<{
|
|
|
223
277
|
supportsVision: z.ZodOptional<z.ZodBoolean>;
|
|
224
278
|
supportsAttachments: z.ZodOptional<z.ZodBoolean>;
|
|
225
279
|
supportsReasoning: z.ZodOptional<z.ZodBoolean>;
|
|
280
|
+
operation: z.ZodOptional<z.ZodEnum<{
|
|
281
|
+
language: "language";
|
|
282
|
+
"image-generation": "image-generation";
|
|
283
|
+
"speech-generation": "speech-generation";
|
|
284
|
+
"video-generation": "video-generation";
|
|
285
|
+
transcription: "transcription";
|
|
286
|
+
}>>;
|
|
287
|
+
operationModes: z.ZodOptional<z.ZodArray<z.ZodEnum<{
|
|
288
|
+
streaming: "streaming";
|
|
289
|
+
batch: "batch";
|
|
290
|
+
}>>>;
|
|
291
|
+
modalities: z.ZodOptional<z.ZodObject<{
|
|
292
|
+
input: z.ZodArray<z.ZodEnum<{
|
|
293
|
+
image: "image";
|
|
294
|
+
audio: "audio";
|
|
295
|
+
video: "video";
|
|
296
|
+
text: "text";
|
|
297
|
+
pdf: "pdf";
|
|
298
|
+
}>>;
|
|
299
|
+
output: z.ZodArray<z.ZodEnum<{
|
|
300
|
+
image: "image";
|
|
301
|
+
audio: "audio";
|
|
302
|
+
video: "video";
|
|
303
|
+
text: "text";
|
|
304
|
+
pdf: "pdf";
|
|
305
|
+
}>>;
|
|
306
|
+
}, z.core.$strip>>;
|
|
226
307
|
inputPrice: z.ZodCatch<z.ZodOptional<z.ZodNumber>>;
|
|
227
308
|
outputPrice: z.ZodCatch<z.ZodOptional<z.ZodNumber>>;
|
|
228
309
|
cacheReadsPrice: z.ZodCatch<z.ZodOptional<z.ZodNumber>>;
|
|
@@ -244,7 +325,7 @@ export declare function readModelsFileSync(filePath: string): StoredModelsFile;
|
|
|
244
325
|
export declare function readModelsFile(filePath: string): Promise<StoredModelsFile>;
|
|
245
326
|
export declare function writeModelsFileSync(filePath: string, state: StoredModelsFile): void;
|
|
246
327
|
export declare function writeModelsFile(filePath: string, state: StoredModelsFile): Promise<void>;
|
|
247
|
-
export declare function toProviderModel(modelId: string, info: Pick<ModelInfo, "name" | "contextWindow" | "capabilities" | "thinkingConfig">): ProviderModel;
|
|
328
|
+
export declare function toProviderModel(modelId: string, info: Pick<ModelInfo, "name" | "contextWindow" | "capabilities" | "thinkingConfig" | "operation" | "operationModes" | "modalities">): ProviderModel;
|
|
248
329
|
export declare function registerProviderSettingsProvider(settings: ProviderSettings): void;
|
|
249
330
|
export declare function registerConfiguredProvidersFromSettings(state: StoredProviderSettings): void;
|
|
250
331
|
/**
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import
|
|
1
|
+
import * as LlmsModels from "@cline/llms";
|
|
2
|
+
import type { AddProviderActionRequest, ITelemetryService, ProviderCapability, ProviderListItem, ProviderModel, SaveProviderSettingsActionRequest, VoiceInputSelection } from "@cline/shared";
|
|
2
3
|
import { type ProviderOAuthCredentials } from "../../auth/provider-auth-registry";
|
|
3
4
|
import type { ProviderClient, ProviderConfig, ProviderProtocol, ProviderSettings } from "../../services/llms/provider-settings";
|
|
4
5
|
import type { ProviderTokenSource } from "../../types/provider-settings";
|
|
@@ -24,6 +25,23 @@ export interface UpdateLocalProviderRequest {
|
|
|
24
25
|
export interface DeleteLocalProviderRequest {
|
|
25
26
|
providerId: string;
|
|
26
27
|
}
|
|
28
|
+
export interface TranscribeLocalAudioRequest {
|
|
29
|
+
providerId: string;
|
|
30
|
+
modelId: string;
|
|
31
|
+
audio: Uint8Array;
|
|
32
|
+
mediaType?: string;
|
|
33
|
+
abortSignal?: AbortSignal;
|
|
34
|
+
}
|
|
35
|
+
export interface TranscribeConfiguredVoiceInputRequest {
|
|
36
|
+
audio: Uint8Array;
|
|
37
|
+
mediaType?: string;
|
|
38
|
+
abortSignal?: AbortSignal;
|
|
39
|
+
}
|
|
40
|
+
export interface CreateConfiguredStreamingTranscriptionSessionRequest {
|
|
41
|
+
expiresAfterSeconds?: number;
|
|
42
|
+
abortSignal?: AbortSignal;
|
|
43
|
+
}
|
|
44
|
+
export declare function isDedicatedTranscriptionModel(model: Pick<ProviderModel, "operation">): boolean;
|
|
27
45
|
export declare function addLocalProvider(manager: ProviderSettingsManager, request: Omit<AddProviderActionRequest, "action">): Promise<{
|
|
28
46
|
providerId: string;
|
|
29
47
|
settingsPath: string;
|
|
@@ -51,11 +69,19 @@ export declare function markLocalProviderEnabled(manager: ProviderSettingsManage
|
|
|
51
69
|
export declare function listLocalProviders(manager: ProviderSettingsManager, options?: ListLocalProvidersOptions): Promise<{
|
|
52
70
|
providers: ProviderListItem[];
|
|
53
71
|
settingsPath: string;
|
|
72
|
+
voiceInput?: VoiceInputSelection;
|
|
54
73
|
}>;
|
|
55
74
|
export declare function getLocalProviderModels(providerId: string, config?: ProviderConfig): Promise<{
|
|
56
75
|
providerId: string;
|
|
57
76
|
models: ProviderModel[];
|
|
58
77
|
}>;
|
|
78
|
+
export declare function transcribeLocalAudio(manager: ProviderSettingsManager, request: TranscribeLocalAudioRequest): Promise<LlmsModels.AudioTranscriptionResult>;
|
|
79
|
+
export declare function saveVoiceInputSettings(manager: ProviderSettingsManager, selection: VoiceInputSelection | undefined): Promise<{
|
|
80
|
+
settingsPath: string;
|
|
81
|
+
voiceInput?: VoiceInputSelection;
|
|
82
|
+
}>;
|
|
83
|
+
export declare function transcribeConfiguredVoiceInput(manager: ProviderSettingsManager, request: TranscribeConfiguredVoiceInputRequest): Promise<LlmsModels.AudioTranscriptionResult>;
|
|
84
|
+
export declare function createConfiguredStreamingTranscriptionSession(manager: ProviderSettingsManager, request?: CreateConfiguredStreamingTranscriptionSessionRequest): Promise<LlmsModels.StreamingAudioTranscriptionSession>;
|
|
59
85
|
export declare function saveLocalProviderSettings(manager: ProviderSettingsManager, request: Omit<SaveProviderSettingsActionRequest, "action">): {
|
|
60
86
|
providerId: string;
|
|
61
87
|
enabled: boolean;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type ProviderConfig, type ProviderSettings, type ProviderTokenSource, type StoredProviderSettings, type ToProviderConfigOptions } from "../../types/provider-settings";
|
|
1
|
+
import { type ProviderConfig, type ProviderSettings, type ProviderTokenSource, type StoredProviderSettings, type ToProviderConfigOptions, type VoiceInputSettings } from "../../types/provider-settings";
|
|
2
2
|
export interface ProviderSettingsManagerOptions {
|
|
3
3
|
filePath?: string;
|
|
4
4
|
dataDir?: string;
|
|
@@ -20,6 +20,8 @@ export declare class ProviderSettingsManager {
|
|
|
20
20
|
saveProviderSettings(settings: unknown, options?: SaveProviderSettingsOptions): StoredProviderSettings;
|
|
21
21
|
private resolveProviderSettings;
|
|
22
22
|
getProviderSettings(providerId: string): ProviderSettings | undefined;
|
|
23
|
+
getVoiceInputSettings(): VoiceInputSettings | undefined;
|
|
24
|
+
setVoiceInputSettings(settings: VoiceInputSettings | undefined): StoredProviderSettings;
|
|
23
25
|
private resolveLastUsedProviderId;
|
|
24
26
|
getLastUsedProviderSettings(options?: ResolveLastUsedProviderSettingsOptions): ProviderSettings | undefined;
|
|
25
27
|
getProviderConfig(providerId: string, options?: ToProviderConfigOptions): ProviderConfig | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{existsSync as g,mkdirSync as v,readFileSync as x,writeFileSync as G}from"node:fs";import{resolve as u}from"node:path";import{resolveSessionDataDir as b}from"@cline/shared/storage";import{nanoid as S}from"nanoid";import*as m from"node-machine-id";var c="machine-id",k,E=!1;function Z(){if(!E)k=h(),E=!0;return k??C()}function L(f){let P=f?.trim();if(P)return P;let O=h();if(O)return O;return C()}function d(){let f=m;return f.machineIdSync??f.default?.machineIdSync}function h(){try{let f=d();if(!f)return;return f().trim()||void 0}catch{return}}function C(){let f=b(),P=u(f,c);try{if(g(P)){let A=x(P,"utf8").trim();if(A.length>0)return A}}catch{}let O=`cl-${S()}`;try{v(f,{recursive:!0}),G(P,O,"utf8")}catch{}return O}class M{name;metadata;meter;logger;enabled;distinctId;commonProperties;counters=new Map;histograms=new Map;gauges=new Map;gaugeValues=new Map;meterProvider;loggerProvider;constructor(f){this.name=f.name??"OpenTelemetryAdapter",this.metadata={...f.metadata},this.meterProvider=f.meterProvider,this.loggerProvider=f.loggerProvider,this.meter=f.meterProvider?.getMeter("cline")??null,this.logger=f.loggerProvider?.getLogger("cline")??null,this.enabled=f.enabled??!0,this.distinctId=f.distinctId,this.commonProperties=f.commonProperties?{...f.commonProperties}:{}}emit(f,P){if(!this.isEnabled())return;this.emitLog(f,P,!1)}emitRequired(f,P){this.emitLog(f,P,!0)}recordCounter(f,P,O,A,T=!1){if(!this.meter||!T&&!this.isEnabled())return;let j=this.counters.get(f);if(!j)j=this.meter.createCounter(f,A?{description:A}:void 0),this.counters.set(f,j);j.add(P,this.flattenProperties(this.buildAttributes(O)))}recordHistogram(f,P,O,A,T=!1){if(!this.meter||!T&&!this.isEnabled())return;let j=this.histograms.get(f);if(!j)j=this.meter.createHistogram(f,A?{description:A}:void 0),this.histograms.set(f,j);j.record(P,this.flattenProperties(this.buildAttributes(O)))}recordGauge(f,P,O,A,T=!1){if(!this.meter||!T&&!this.isEnabled())return;let j=this.buildAttributes(O),$=JSON.stringify(j),K=this.gaugeValues.get(f);if(P===null){if(K){if(K.delete($),K.size===0)this.gaugeValues.delete(f),this.gauges.delete(f)}return}let H=K;if(!H)H=new Map,this.gaugeValues.set(f,H);if(!this.gauges.has(f)){let J=this.meter.createObservableGauge(f,A?{description:A}:void 0);J.addCallback((Y)=>{for(let U of this.snapshotGaugeSeries(f))Y.observe(U.value,this.flattenProperties(U.attributes))}),this.gauges.set(f,J)}H.set($,{value:P,attributes:j})}isEnabled(){return typeof this.enabled==="function"?this.enabled():this.enabled}setDistinctId(f){this.distinctId=f}setCommonProperties(f){this.commonProperties={...f}}updateCommonProperties(f){this.commonProperties={...this.commonProperties,...f}}async flush(){await Promise.all([this.meterProvider?.forceFlush?.(),this.loggerProvider?.forceFlush?.()])}async dispose(){await Promise.all([this.meterProvider?.shutdown?.(),this.loggerProvider?.shutdown?.()])}emitLog(f,P,O){if(!this.logger)return;let A=this.flattenProperties(this.buildAttributes(P,O));this.logger.emit({severityText:"INFO",body:f,attributes:A})}buildAttributes(f,P=!1){return{...this.commonProperties,...this.metadata,...f,...this.distinctId?{distinct_id:this.distinctId}:{},...P?{_required:!0}:{}}}snapshotGaugeSeries(f){let P=this.gaugeValues.get(f);if(!P)return[];return Array.from(P.values(),(O)=>({value:O.value,attributes:O.attributes?{...O.attributes}:void 0}))}flattenProperties(f,P="",O=new WeakSet,A=0){if(!f)return{};let T={},j=100,$=10;for(let[K,H]of Object.entries(f)){if(K==="__proto__"||K==="constructor"||K==="prototype")continue;let J=P?`${P}.${K}`:K;if(H===null||H===void 0){T[J]=String(H);continue}if(Array.isArray(H)){let Y=H.length>j?H.slice(0,j):H;try{T[J]=JSON.stringify(Y)}catch{T[J]="[UnserializableArray]"}if(H.length>j)T[`${J}_truncated`]=!0,T[`${J}_original_length`]=H.length;continue}if(typeof H==="object"){if(H instanceof Date){T[J]=H.toISOString();continue}if(H instanceof Error){T[J]=H.message;continue}if(O.has(H)){T[J]="[Circular]";continue}if(A>=$){T[J]="[MaxDepthExceeded]";continue}O.add(H),Object.assign(T,this.flattenProperties(H,J,O,A+1));continue}if(l(H)){T[J]=H;continue}try{T[J]=JSON.stringify(H)}catch{T[J]=String(H)}}return T}}function l(f){return typeof f==="string"||typeof f==="number"||typeof f==="boolean"}import{metrics as ff,trace as Pf}from"@opentelemetry/api";import{logs as Of}from"@opentelemetry/api-logs";import{OTLPLogExporter as Af}from"@opentelemetry/exporter-logs-otlp-http";import{OTLPMetricExporter as Tf}from"@opentelemetry/exporter-metrics-otlp-http";import{OTLPTraceExporter as jf}from"@opentelemetry/exporter-trace-otlp-http";import{resourceFromAttributes as Hf}from"@opentelemetry/resources";import{BatchLogRecordProcessor as $f,ConsoleLogRecordExporter as Jf,LoggerProvider as Wf}from"@opentelemetry/sdk-logs";import{ConsoleMetricExporter as Kf,MeterProvider as Lf,PeriodicExportingMetricReader as I}from"@opentelemetry/sdk-metrics";import{BatchSpanProcessor as Mf,ConsoleSpanExporter as Vf,SimpleSpanProcessor as Xf}from"@opentelemetry/sdk-trace-base";import{NodeTracerProvider as Yf}from"@opentelemetry/sdk-trace-node";import{ATTR_SERVICE_NAME as Zf,ATTR_SERVICE_VERSION as _f}from"@opentelemetry/semantic-conventions";import{mkdirSync as mf,readFileSync as r,statSync as a,writeFileSync as cf}from"node:fs";import{resolveGlobalSettingsPath as n}from"@cline/shared/storage";import{z as W}from"zod";import{AGENT_UNEXPECTED_REASONING_TOKENS_EVENT as Nf,captureAgentUnexpectedReasoningTokens as If,captureTaskLifecycleEvent as zf,SDK_ERROR_TELEMETRY_EVENT as yf,TASK_CANCELLED_EVENT as Df,TASK_FIRST_CHUNK_RECEIVED_EVENT as gf,TASK_PROVIDER_REQUEST_STARTED_EVENT as vf,TASK_PROVIDER_STREAM_FAILED_EVENT as xf,TASK_PROVIDER_STREAM_STARTED_EVENT as Gf}from"@cline/shared";var w=W.preprocess((f)=>Array.isArray(f)?f.filter((P)=>typeof P==="string").map((P)=>P.trim()).filter(Boolean):void 0,W.array(W.string()).optional()).transform((f)=>{if(!f)return;let P=[...new Set(f)].sort((O,A)=>O.localeCompare(A));return P.length>0?P:void 0}),p=W.enum(["basic","agentic"]).catch("agentic"),i=W.enum(["plan","act"]),q=W.object({telemetryOptOut:W.boolean().default(!1).catch(!1),autoUpdateEnabled:W.boolean().default(!0).catch(!0),compactionStrategy:p.optional(),compactionEnabled:W.boolean().optional().catch(void 0),planActMode:i.optional().catch(void 0),toolAutoApprove:W.boolean().optional().catch(void 0),tuiTheme:W.string().optional().catch(void 0),disabledTools:w.optional(),disabledPlugins:w.optional()}).strip().transform((f)=>{let P={autoUpdateEnabled:f.autoUpdateEnabled,telemetryOptOut:f.telemetryOptOut};if(f.compactionStrategy)P.compactionStrategy=f.compactionStrategy;if(f.compactionEnabled!==void 0)P.compactionEnabled=f.compactionEnabled;if(f.planActMode)P.planActMode=f.planActMode;if(f.toolAutoApprove!==void 0)P.toolAutoApprove=f.toolAutoApprove;if(f.tuiTheme?.trim())P.tuiTheme=f.tuiTheme.trim();if(f.disabledTools?.length)P.disabledTools=f.disabledTools;if(f.disabledPlugins?.length)P.disabledPlugins=f.disabledPlugins;return P});function V(){return q.parse({})}var _;function s(f){if(f.disabledTools)Object.freeze(f.disabledTools);if(f.disabledPlugins)Object.freeze(f.disabledPlugins);return Object.freeze(f)}function o(f){let P;try{P=r(f,"utf8")}catch{return V()}try{let O=q.safeParse(JSON.parse(P));return O.success?O.data:V()}catch{return V()}}function t(){let f=n(),P=a(f,{throwIfNoEntry:!1}),O=P?.mtimeMs??0,A=P?.size??0,T=_;if(T&&T.path===f&&T.mtimeMs===O&&T.size===A)return T;let j=s(P?o(f):V());return _={path:f,mtimeMs:O,size:A,value:j},_}function e(){return t().value}function N(){return e().telemetryOptOut}class B{name;logger;enabled;constructor(f={}){this.name=f.name??"TelemetryLoggerSink",this.logger=f.logger,this.enabled=f.enabled??!0}emit(f,P){if(!this.isEnabled())return;this.logger?.log("telemetry.event",{telemetrySink:this.name,event:f,properties:P})}emitRequired(f,P){this.logger?.log("telemetry.required_event",{telemetrySink:this.name,severity:"warn",event:f,properties:P})}recordCounter(f,P,O,A,T){if(!T&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"counter",name:f,value:P,attributes:O,description:A,required:T===!0})}recordHistogram(f,P,O,A,T){if(!T&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"histogram",name:f,value:P,attributes:O,description:A,required:T===!0})}recordGauge(f,P,O,A,T){if(!T&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"gauge",name:f,value:P,attributes:O,description:A,required:T===!0})}isEnabled(){return typeof this.enabled==="function"?this.enabled():this.enabled}async flush(){}async dispose(){}}class X{adapters;metadata;distinctId;deviceId;commonProperties;constructor(f={}){if(this.adapters=[...f.adapters??[]],f.logger)this.adapters.push(new B({logger:f.logger}));this.metadata={...f.metadata??{}},this.distinctId=f.distinctId,this.deviceId=f.deviceId??Z(),this.commonProperties={...f.commonProperties??{}}}addAdapter(f){this.adapters.push(f)}setDistinctId(f){this.distinctId=f}setMetadata(f){this.metadata={...f}}updateMetadata(f){this.metadata={...this.metadata,...f}}setCommonProperties(f){this.commonProperties={...f}}updateCommonProperties(f){this.commonProperties={...this.commonProperties,...f}}isEnabled(){return this.adapters.some((f)=>f.isEnabled())}capture(f){let P=this.buildAttributes(f.properties);for(let O of this.adapters)O.emit(f.event,P)}captureRequired(f,P){let O=this.buildAttributes(P);for(let A of this.adapters)A.emitRequired(f,O)}recordCounter(f,P,O,A,T=!1){let j=this.buildAttributes(O);for(let $ of this.adapters)$.recordCounter(f,P,j,A,T)}recordHistogram(f,P,O,A,T=!1){let j=this.buildAttributes(O);for(let $ of this.adapters)$.recordHistogram(f,P,j,A,T)}recordGauge(f,P,O,A,T=!1){let j=this.buildAttributes(O);for(let $ of this.adapters)$.recordGauge(f,P,j,A,T)}async flush(){await Promise.all(this.adapters.map((f)=>f.flush()))}async dispose(){await Promise.all(this.adapters.map((f)=>f.dispose()))}buildAttributes(f){return{...this.commonProperties,...f,...this.metadata,...this.distinctId?{distinct_id:this.distinctId}:{},device_id:this.deviceId}}}class z{distinctId;metadata;commonProperties;constructor(f={}){this.distinctId=f.distinctId,this.metadata={...f.metadata??{}},this.commonProperties={...f.commonProperties??{}}}setDistinctId(f){this.distinctId=f}setMetadata(f){this.metadata={...f}}updateMetadata(f){this.metadata={...this.metadata,...f}}setCommonProperties(f){this.commonProperties={...f}}updateCommonProperties(f){this.commonProperties={...this.commonProperties,...f}}isEnabled(){return!1}capture(f){this.resolveProperties(f.properties)}captureRequired(f,P){this.resolveProperties(P)}recordCounter(){}recordHistogram(){}recordGauge(){}async flush(){}async dispose(){}resolveProperties(f){return{...this.commonProperties,...f,...this.metadata,...this.distinctId?{distinct_id:this.distinctId}:{}}}}class R{meterProvider;loggerProvider;tracerProvider;options;constructor(f={}){this.options=f;let P=Hf({[Zf]:f.serviceName??"cline",...f.serviceVersion?{[_f]:f.serviceVersion}:{}});if(this.meterProvider=this.createMeterProvider(P),this.loggerProvider=this.createLoggerProvider(P),this.tracerProvider=this.createTracerProvider(P),this.meterProvider)ff.setGlobalMeterProvider(this.meterProvider);if(this.loggerProvider)Of.setGlobalLoggerProvider(this.loggerProvider);if(this.tracerProvider)this.tracerProvider.register()}getTracer(f="cline",P){return Pf.getTracer(f,P??this.options.serviceVersion)}createAdapter(f){return new M({...f,meterProvider:this.meterProvider,loggerProvider:this.loggerProvider})}createTelemetryService(f){let P=this.createAdapter({name:f.name,enabled:this.options.enabled,metadata:f.metadata});return new X({...f,adapters:[P],distinctId:L(f.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(f){let P=Q(this.options.metricsExporter);if(P.length===0)return null;let O=Math.max(1000,this.options.metricExportIntervalMs??this.options.metricExportInterval??60000),A=Math.min(30000,Math.floor(O*0.8)),T=P.map((j)=>Ff(j,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json",interval:O,timeout:A})).filter((j)=>j!==null);if(T.length===0)return null;return new Lf({resource:f,readers:T})}createTracerProvider(f){let P=Q(this.options.tracesExporter);if(P.length===0)return null;let O=this.options.otlpTracesEndpoint??this.options.otlpEndpoint,A=this.options.otlpTracesHeaders??this.options.otlpHeaders,T=[];for(let j of P){let $=Rf(j,{endpoint:O,headers:A,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if($)T.push($)}if(T.length===0)return null;return new Yf({resource:f,spanProcessors:T})}createLoggerProvider(f){let P=Q(this.options.logsExporter);if(P.length===0)return null;let O=P.map((A)=>{let T=Qf(A,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if(!T)return null;return new $f(T,{maxQueueSize:this.options.logMaxQueueSize??2048,maxExportBatchSize:this.options.logBatchSize??512,scheduledDelayMillis:this.options.logBatchTimeoutMs??this.options.logBatchTimeout??5000})}).filter((A)=>A!==null);if(O.length===0)return null;return new Wf({resource:f,processors:O})}}function y(f){let P=new R(f),O=P.createTelemetryService(f),A=()=>{O.captureRequired("telemetry.provider_created",{provider:"opentelemetry",enabled:f.enabled??!0,logsExporter:Array.isArray(f.logsExporter)?f.logsExporter.join(","):f.logsExporter,metricsExporter:Array.isArray(f.metricsExporter)?f.metricsExporter.join(","):f.metricsExporter,tracesExporter:Array.isArray(f.tracesExporter)?f.tracesExporter.join(","):f.tracesExporter,otlpProtocol:f.otlpProtocol,hasOtlpEndpoint:Boolean(f.otlpEndpoint),serviceName:f.serviceName,serviceVersion:f.serviceVersion})};if(!f.deferProviderCreatedEvent)A();return{provider:P,telemetry:O,emitProviderCreated:A}}function D(f){if(N())return{telemetry:new z(f)};if(f.enabled!==!0)return{telemetry:new X({...f,distinctId:L(f.distinctId)})};return y(f)}function Bf(f){let{telemetry:P,provider:O,emitProviderCreated:A}=D(f);return{telemetry:P,provider:O,flush:async()=>{let $=O;if($&&typeof $.forceFlush==="function")try{await $.forceFlush()}catch{}},dispose:async()=>{await Promise.allSettled([P.dispose(),O?.dispose()])},...f.deferProviderCreatedEvent&&A?{emitProviderCreated:A}:{}}}function Q(f){if(!f)return[];return(Array.isArray(f)?f:f.split(",")).map((O)=>O.trim()).filter((O)=>O==="console"||O==="otlp")}function Qf(f,P){if(f==="console")return new Jf;if(!P.endpoint)return null;let O=F(P.endpoint,"/v1/logs");return new Af({url:O,headers:P.headers})}function Rf(f,P){if(f==="console")return new Xf(new Vf);if(!P.endpoint)return null;let O=F(P.endpoint,"/v1/traces");return new Mf(new jf({url:O,headers:P.headers}))}function Ff(f,P){if(f==="console")return new I({exporter:new Kf,exportIntervalMillis:P.interval,exportTimeoutMillis:P.timeout});if(!P.endpoint)return null;let O=F(P.endpoint,"/v1/metrics");return new I({exporter:new Tf({url:O,headers:P.headers}),exportIntervalMillis:P.interval,exportTimeoutMillis:P.timeout})}function F(f,P){let O=new URL(f),A=O.pathname.endsWith("/")?O.pathname.slice(0,-1):O.pathname;return O.pathname=A.endsWith(P)?A:`${A}${P}`,O.toString()}export{L as resolveCoreDistinctId,Z as resolveCoreDeviceId,y as createOpenTelemetryTelemetryService,D as createConfiguredTelemetryService,Bf as createConfiguredTelemetryHandle,R as OpenTelemetryProvider,M as OpenTelemetryAdapter};
|
|
1
|
+
import{existsSync as x,mkdirSync as v,readFileSync as G,writeFileSync as g}from"node:fs";import{resolve as u}from"node:path";import{resolveSessionDataDir as b}from"@cline/shared/storage";import{nanoid as S}from"nanoid";import*as m from"node-machine-id";var c="machine-id",M,h=!1;function B(){if(!h)M=w(),h=!0;return M??C()}function X(f){let P=f?.trim();if(P)return P;let A=w();if(A)return A;return C()}function d(){let f=m;return f.machineIdSync??f.default?.machineIdSync}function w(){try{let f=d();if(!f)return;return f().trim()||void 0}catch{return}}function C(){let f=b(),P=u(f,c);try{if(x(P)){let O=G(P,"utf8").trim();if(O.length>0)return O}}catch{}let A=`cl-${S()}`;try{v(f,{recursive:!0}),g(P,A,"utf8")}catch{}return A}class Y{name;metadata;meter;logger;enabled;distinctId;commonProperties;counters=new Map;histograms=new Map;gauges=new Map;gaugeValues=new Map;meterProvider;loggerProvider;constructor(f){this.name=f.name??"OpenTelemetryAdapter",this.metadata={...f.metadata},this.meterProvider=f.meterProvider,this.loggerProvider=f.loggerProvider,this.meter=f.meterProvider?.getMeter("cline")??null,this.logger=f.loggerProvider?.getLogger("cline")??null,this.enabled=f.enabled??!0,this.distinctId=f.distinctId,this.commonProperties=f.commonProperties?{...f.commonProperties}:{}}emit(f,P){if(!this.isEnabled())return;this.emitLog(f,P,!1)}emitRequired(f,P){this.emitLog(f,P,!0)}recordCounter(f,P,A,O,j=!1){if(!this.meter||!j&&!this.isEnabled())return;let H=this.counters.get(f);if(!H)H=this.meter.createCounter(f,O?{description:O}:void 0),this.counters.set(f,H);H.add(P,this.flattenProperties(this.buildAttributes(A)))}recordHistogram(f,P,A,O,j=!1){if(!this.meter||!j&&!this.isEnabled())return;let H=this.histograms.get(f);if(!H)H=this.meter.createHistogram(f,O?{description:O}:void 0),this.histograms.set(f,H);H.record(P,this.flattenProperties(this.buildAttributes(A)))}recordGauge(f,P,A,O,j=!1){if(!this.meter||!j&&!this.isEnabled())return;let H=this.buildAttributes(A),$=JSON.stringify(H),K=this.gaugeValues.get(f);if(P===null){if(K){if(K.delete($),K.size===0)this.gaugeValues.delete(f),this.gauges.delete(f)}return}let T=K;if(!T)T=new Map,this.gaugeValues.set(f,T);if(!this.gauges.has(f)){let J=this.meter.createObservableGauge(f,O?{description:O}:void 0);J.addCallback((V)=>{for(let k of this.snapshotGaugeSeries(f))V.observe(k.value,this.flattenProperties(k.attributes))}),this.gauges.set(f,J)}T.set($,{value:P,attributes:H})}isEnabled(){return typeof this.enabled==="function"?this.enabled():this.enabled}setDistinctId(f){this.distinctId=f}setCommonProperties(f){this.commonProperties={...f}}updateCommonProperties(f){this.commonProperties={...this.commonProperties,...f}}async flush(){await Promise.all([this.meterProvider?.forceFlush?.(),this.loggerProvider?.forceFlush?.()])}async dispose(){await Promise.all([this.meterProvider?.shutdown?.(),this.loggerProvider?.shutdown?.()])}emitLog(f,P,A){if(!this.logger)return;let O=this.flattenProperties(this.buildAttributes(P,A));this.logger.emit({severityText:"INFO",body:f,attributes:O})}buildAttributes(f,P=!1){return{...this.commonProperties,...this.metadata,...f,...this.distinctId?{distinct_id:this.distinctId}:{},...P?{_required:!0}:{}}}snapshotGaugeSeries(f){let P=this.gaugeValues.get(f);if(!P)return[];return Array.from(P.values(),(A)=>({value:A.value,attributes:A.attributes?{...A.attributes}:void 0}))}flattenProperties(f,P="",A=new WeakSet,O=0){if(!f)return{};let j={},H=100,$=10;for(let[K,T]of Object.entries(f)){if(K==="__proto__"||K==="constructor"||K==="prototype")continue;let J=P?`${P}.${K}`:K;if(T===null||T===void 0){j[J]=String(T);continue}if(Array.isArray(T)){let V=T.length>H?T.slice(0,H):T;try{j[J]=JSON.stringify(V)}catch{j[J]="[UnserializableArray]"}if(T.length>H)j[`${J}_truncated`]=!0,j[`${J}_original_length`]=T.length;continue}if(typeof T==="object"){if(T instanceof Date){j[J]=T.toISOString();continue}if(T instanceof Error){j[J]=T.message;continue}if(A.has(T)){j[J]="[Circular]";continue}if(O>=$){j[J]="[MaxDepthExceeded]";continue}A.add(T),Object.assign(j,this.flattenProperties(T,J,A,O+1));continue}if(r(T)){j[J]=T;continue}try{j[J]=JSON.stringify(T)}catch{j[J]=String(T)}}return j}}function r(f){return typeof f==="string"||typeof f==="number"||typeof f==="boolean"}import{metrics as Af,trace as Of}from"@opentelemetry/api";import{logs as jf}from"@opentelemetry/api-logs";import{OTLPLogExporter as Hf}from"@opentelemetry/exporter-logs-otlp-http";import{OTLPMetricExporter as Tf}from"@opentelemetry/exporter-metrics-otlp-http";import{OTLPTraceExporter as $f}from"@opentelemetry/exporter-trace-otlp-http";import{resourceFromAttributes as Jf}from"@opentelemetry/resources";import{BatchLogRecordProcessor as Wf,ConsoleLogRecordExporter as Kf,LoggerProvider as Xf}from"@opentelemetry/sdk-logs";import{ConsoleMetricExporter as Yf,MeterProvider as Zf,PeriodicExportingMetricReader as y}from"@opentelemetry/sdk-metrics";import{BatchSpanProcessor as Qf,ConsoleSpanExporter as Vf,SimpleSpanProcessor as Bf}from"@opentelemetry/sdk-trace-base";import{NodeTracerProvider as Rf}from"@opentelemetry/sdk-trace-node";import{ATTR_SERVICE_NAME as Ff,ATTR_SERVICE_VERSION as Uf}from"@opentelemetry/semantic-conventions";import{mkdirSync as df,readFileSync as l,statSync as n,writeFileSync as rf}from"node:fs";import{CONFIGURABLE_MODEL_TOOL_NAMES as a}from"@cline/shared";import{resolveGlobalSettingsPath as p}from"@cline/shared/storage";import{z as W}from"zod";import{AGENT_UNEXPECTED_REASONING_TOKENS_EVENT as zf,captureAgentUnexpectedReasoningTokens as Df,captureTaskLifecycleEvent as Nf,SDK_ERROR_TELEMETRY_EVENT as xf,TASK_CANCELLED_EVENT as vf,TASK_FIRST_CHUNK_RECEIVED_EVENT as Gf,TASK_PROVIDER_REQUEST_STARTED_EVENT as gf,TASK_PROVIDER_STREAM_FAILED_EVENT as uf,TASK_PROVIDER_STREAM_STARTED_EVENT as bf}from"@cline/shared";var q=W.preprocess((f)=>Array.isArray(f)?f.filter((P)=>typeof P==="string").map((P)=>P.trim()).filter(Boolean):void 0,W.array(W.string()).optional()).transform((f)=>{if(!f)return;let P=[...new Set(f)].sort((A,O)=>A.localeCompare(O));return P.length>0?P:void 0}),i=W.enum(["basic","agentic"]).catch("agentic"),s=W.partialRecord(W.enum(a),W.object({enabled:W.boolean()}).strip()).optional(),o=W.enum(["plan","act"]),E=W.object({telemetryOptOut:W.boolean().default(!1).catch(!1),autoUpdateEnabled:W.boolean().default(!0).catch(!0),compactionStrategy:i.optional(),compactionEnabled:W.boolean().optional().catch(void 0),planActMode:o.optional().catch(void 0),toolAutoApprove:W.boolean().optional().catch(void 0),tuiTheme:W.string().optional().catch(void 0),disabledTools:q.optional(),tools:s,disabledPlugins:q.optional()}).strip().transform((f)=>{let P={autoUpdateEnabled:f.autoUpdateEnabled,telemetryOptOut:f.telemetryOptOut};if(f.compactionStrategy)P.compactionStrategy=f.compactionStrategy;if(f.compactionEnabled!==void 0)P.compactionEnabled=f.compactionEnabled;if(f.planActMode)P.planActMode=f.planActMode;if(f.toolAutoApprove!==void 0)P.toolAutoApprove=f.toolAutoApprove;if(f.tuiTheme?.trim())P.tuiTheme=f.tuiTheme.trim();if(f.disabledTools?.length)P.disabledTools=f.disabledTools;if(f.tools&&Object.keys(f.tools).length>0)P.tools=f.tools;if(f.disabledPlugins?.length)P.disabledPlugins=f.disabledPlugins;return P});function Z(){return E.parse({})}var R;function t(f){if(f.disabledTools)Object.freeze(f.disabledTools);if(f.tools){for(let P of Object.values(f.tools))Object.freeze(P);Object.freeze(f.tools)}if(f.disabledPlugins)Object.freeze(f.disabledPlugins);return Object.freeze(f)}function e(f){let P;try{P=l(f,"utf8")}catch{return Z()}try{let A=E.safeParse(JSON.parse(P));return A.success?A.data:Z()}catch{return Z()}}function ff(){let f=p(),P=n(f,{throwIfNoEntry:!1}),A=P?.mtimeMs??0,O=P?.size??0,j=R;if(j&&j.path===f&&j.mtimeMs===A&&j.size===O)return j;let H=t(P?e(f):Z());return R={path:f,mtimeMs:A,size:O,value:H},R}function Pf(){return ff().value}function I(){return Pf().telemetryOptOut}class F{name;logger;enabled;constructor(f={}){this.name=f.name??"TelemetryLoggerSink",this.logger=f.logger,this.enabled=f.enabled??!0}emit(f,P){if(!this.isEnabled())return;this.logger?.log("telemetry.event",{telemetrySink:this.name,event:f,properties:P})}emitRequired(f,P){this.logger?.log("telemetry.required_event",{telemetrySink:this.name,severity:"warn",event:f,properties:P})}recordCounter(f,P,A,O,j){if(!j&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"counter",name:f,value:P,attributes:A,description:O,required:j===!0})}recordHistogram(f,P,A,O,j){if(!j&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"histogram",name:f,value:P,attributes:A,description:O,required:j===!0})}recordGauge(f,P,A,O,j){if(!j&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"gauge",name:f,value:P,attributes:A,description:O,required:j===!0})}isEnabled(){return typeof this.enabled==="function"?this.enabled():this.enabled}async flush(){}async dispose(){}}class Q{adapters;metadata;distinctId;deviceId;commonProperties;constructor(f={}){if(this.adapters=[...f.adapters??[]],f.logger)this.adapters.push(new F({logger:f.logger}));this.metadata={...f.metadata??{}},this.distinctId=f.distinctId,this.deviceId=f.deviceId??B(),this.commonProperties={...f.commonProperties??{}}}addAdapter(f){this.adapters.push(f)}setDistinctId(f){this.distinctId=f}setMetadata(f){this.metadata={...f}}updateMetadata(f){this.metadata={...this.metadata,...f}}setCommonProperties(f){this.commonProperties={...f}}updateCommonProperties(f){this.commonProperties={...this.commonProperties,...f}}isEnabled(){return this.adapters.some((f)=>f.isEnabled())}capture(f){let P=this.buildAttributes(f.properties);for(let A of this.adapters)A.emit(f.event,P)}captureRequired(f,P){let A=this.buildAttributes(P);for(let O of this.adapters)O.emitRequired(f,A)}recordCounter(f,P,A,O,j=!1){let H=this.buildAttributes(A);for(let $ of this.adapters)$.recordCounter(f,P,H,O,j)}recordHistogram(f,P,A,O,j=!1){let H=this.buildAttributes(A);for(let $ of this.adapters)$.recordHistogram(f,P,H,O,j)}recordGauge(f,P,A,O,j=!1){let H=this.buildAttributes(A);for(let $ of this.adapters)$.recordGauge(f,P,H,O,j)}async flush(){await Promise.all(this.adapters.map((f)=>f.flush()))}async dispose(){await Promise.all(this.adapters.map((f)=>f.dispose()))}buildAttributes(f){return{...this.commonProperties,...f,...this.metadata,...this.distinctId?{distinct_id:this.distinctId}:{},device_id:this.deviceId}}}class z{distinctId;metadata;commonProperties;constructor(f={}){this.distinctId=f.distinctId,this.metadata={...f.metadata??{}},this.commonProperties={...f.commonProperties??{}}}setDistinctId(f){this.distinctId=f}setMetadata(f){this.metadata={...f}}updateMetadata(f){this.metadata={...this.metadata,...f}}setCommonProperties(f){this.commonProperties={...f}}updateCommonProperties(f){this.commonProperties={...this.commonProperties,...f}}isEnabled(){return!1}capture(f){this.resolveProperties(f.properties)}captureRequired(f,P){this.resolveProperties(P)}recordCounter(){}recordHistogram(){}recordGauge(){}async flush(){}async dispose(){}resolveProperties(f){return{...this.commonProperties,...f,...this.metadata,...this.distinctId?{distinct_id:this.distinctId}:{}}}}class L{meterProvider;loggerProvider;tracerProvider;options;constructor(f={}){this.options=f;let P=Jf({[Ff]:f.serviceName??"cline",...f.serviceVersion?{[Uf]:f.serviceVersion}:{}});if(this.meterProvider=this.createMeterProvider(P),this.loggerProvider=this.createLoggerProvider(P),this.tracerProvider=this.createTracerProvider(P),this.meterProvider)Af.setGlobalMeterProvider(this.meterProvider);if(this.loggerProvider)jf.setGlobalLoggerProvider(this.loggerProvider);if(this.tracerProvider)this.tracerProvider.register()}getTracer(f="cline",P){return Of.getTracer(f,P??this.options.serviceVersion)}createAdapter(f){return new Y({...f,meterProvider:this.meterProvider,loggerProvider:this.loggerProvider})}createTelemetryService(f){let P=this.createAdapter({name:f.name,enabled:this.options.enabled,metadata:f.metadata});return new Q({...f,adapters:[P],distinctId:X(f.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(f){let P=U(this.options.metricsExporter);if(P.length===0)return null;let A=Math.max(1000,this.options.metricExportIntervalMs??this.options.metricExportInterval??60000),O=Math.min(30000,Math.floor(A*0.8)),j=P.map((H)=>Mf(H,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json",interval:A,timeout:O})).filter((H)=>H!==null);if(j.length===0)return null;return new Zf({resource:f,readers:j})}createTracerProvider(f){let P=U(this.options.tracesExporter);if(P.length===0)return null;let A=this.options.otlpTracesEndpoint??this.options.otlpEndpoint,O=this.options.otlpTracesHeaders??this.options.otlpHeaders,j=[];for(let H of P){let $=kf(H,{endpoint:A,headers:O,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if($)j.push($)}if(j.length===0)return null;return new Rf({resource:f,spanProcessors:j})}createLoggerProvider(f){let P=U(this.options.logsExporter);if(P.length===0)return null;let A=P.map((O)=>{let j=_f(O,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if(!j)return null;return new Wf(j,{maxQueueSize:this.options.logMaxQueueSize??2048,maxExportBatchSize:this.options.logBatchSize??512,scheduledDelayMillis:this.options.logBatchTimeoutMs??this.options.logBatchTimeout??5000})}).filter((O)=>O!==null);if(A.length===0)return null;return new Xf({resource:f,processors:A})}}function D(f){let P=new L(f),A=P.createTelemetryService(f),O=()=>{A.captureRequired("telemetry.provider_created",{provider:"opentelemetry",enabled:f.enabled??!0,logsExporter:Array.isArray(f.logsExporter)?f.logsExporter.join(","):f.logsExporter,metricsExporter:Array.isArray(f.metricsExporter)?f.metricsExporter.join(","):f.metricsExporter,tracesExporter:Array.isArray(f.tracesExporter)?f.tracesExporter.join(","):f.tracesExporter,otlpProtocol:f.otlpProtocol,hasOtlpEndpoint:Boolean(f.otlpEndpoint),serviceName:f.serviceName,serviceVersion:f.serviceVersion})};if(!f.deferProviderCreatedEvent)O();return{provider:P,telemetry:A,emitProviderCreated:O}}function N(f){if(I())return{telemetry:new z(f)};if(f.enabled!==!0)return{telemetry:new Q({...f,distinctId:X(f.distinctId)})};return D(f)}function Lf(f){let{telemetry:P,provider:A,emitProviderCreated:O}=N(f);return{telemetry:P,provider:A,flush:async()=>{let $=A;if($&&typeof $.forceFlush==="function")try{await $.forceFlush()}catch{}},dispose:async()=>{await Promise.allSettled([P.dispose(),A?.dispose()])},...f.deferProviderCreatedEvent&&O?{emitProviderCreated:O}:{}}}function U(f){if(!f)return[];return(Array.isArray(f)?f:f.split(",")).map((A)=>A.trim()).filter((A)=>A==="console"||A==="otlp")}function _f(f,P){if(f==="console")return new Kf;if(!P.endpoint)return null;let A=_(P.endpoint,"/v1/logs");return new Hf({url:A,headers:P.headers})}function kf(f,P){if(f==="console")return new Bf(new Vf);if(!P.endpoint)return null;let A=_(P.endpoint,"/v1/traces");return new Qf(new $f({url:A,headers:P.headers}))}function Mf(f,P){if(f==="console")return new y({exporter:new Yf,exportIntervalMillis:P.interval,exportTimeoutMillis:P.timeout});if(!P.endpoint)return null;let A=_(P.endpoint,"/v1/metrics");return new y({exporter:new Tf({url:A,headers:P.headers}),exportIntervalMillis:P.interval,exportTimeoutMillis:P.timeout})}function _(f,P){let A=new URL(f),O=A.pathname.endsWith("/")?A.pathname.slice(0,-1):A.pathname;return A.pathname=O.endsWith(P)?O:`${O}${P}`,A.toString()}export{X as resolveCoreDistinctId,B as resolveCoreDeviceId,D as createOpenTelemetryTelemetryService,N as createConfiguredTelemetryService,Lf as createConfiguredTelemetryHandle,L as OpenTelemetryProvider,Y as OpenTelemetryAdapter};
|
|
@@ -3,7 +3,7 @@ import type { CheckpointEntry, CheckpointMetadata } from "../hooks/checkpoint-ho
|
|
|
3
3
|
import type { SessionRecord } from "../types/sessions";
|
|
4
4
|
export interface CheckpointRestorePlan {
|
|
5
5
|
checkpoint: CheckpointEntry;
|
|
6
|
-
messages?: LlmsProviders.
|
|
6
|
+
messages?: LlmsProviders.MessageWithMetadata[];
|
|
7
7
|
cwd: string;
|
|
8
8
|
}
|
|
9
9
|
export interface WorktreeRestoreTransaction {
|
|
@@ -22,11 +22,11 @@ export declare function beginWorktreeRestoreTransaction(cwd: string): Promise<Wo
|
|
|
22
22
|
export declare function readSessionCheckpointHistory(session: Pick<SessionRecord, "metadata"> | undefined): CheckpointEntry[];
|
|
23
23
|
export declare function createRestoredCheckpointMetadata(session: Pick<SessionRecord, "metadata"> | undefined, runCount: number): CheckpointMetadata | undefined;
|
|
24
24
|
export declare function findCheckpointForRun(history: readonly CheckpointEntry[], runCount: number): CheckpointEntry | undefined;
|
|
25
|
-
export declare function trimMessagesToCheckpoint(messages: LlmsProviders.
|
|
26
|
-
export declare function trimMessagesBeforeUserRun(messages: LlmsProviders.
|
|
25
|
+
export declare function trimMessagesToCheckpoint(messages: LlmsProviders.MessageWithMetadata[], runCount: number): LlmsProviders.MessageWithMetadata[];
|
|
26
|
+
export declare function trimMessagesBeforeUserRun(messages: LlmsProviders.MessageWithMetadata[], runCount: number): LlmsProviders.MessageWithMetadata[];
|
|
27
27
|
export declare function createCheckpointRestorePlan(input: {
|
|
28
28
|
session: SessionRecord;
|
|
29
|
-
messages?: LlmsProviders.
|
|
29
|
+
messages?: LlmsProviders.MessageWithMetadata[];
|
|
30
30
|
checkpointRunCount: number;
|
|
31
31
|
cwd?: string;
|
|
32
32
|
restoreMessages?: boolean;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { MessageWithMetadata, ModelToolExecution } from "@cline/shared";
|
|
2
|
+
/**
|
|
3
|
+
* A message prepared exclusively for transcript presentation.
|
|
4
|
+
*
|
|
5
|
+
* The wrapper is intentionally not structurally assignable to `Message`, so a
|
|
6
|
+
* display projection cannot accidentally be passed to `initialMessages` or a
|
|
7
|
+
* provider request. Consumers render `message`; runtime/replay code continues
|
|
8
|
+
* to consume the canonical history directly.
|
|
9
|
+
*/
|
|
10
|
+
export interface SessionDisplayMessage {
|
|
11
|
+
kind: "session_display_message";
|
|
12
|
+
origin: "history" | "model_tool_activity";
|
|
13
|
+
execution?: ModelToolExecution;
|
|
14
|
+
message: MessageWithMetadata;
|
|
15
|
+
/** Index of the canonical message that produced this display entry. */
|
|
16
|
+
sourceIndex: number;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Project observational model-tool activity into the same persisted
|
|
20
|
+
* `tool_use` / `tool_result` shapes used by ordinary runtime tools.
|
|
21
|
+
*
|
|
22
|
+
* The source history is never mutated. The non-`Message` wrapper keeps this
|
|
23
|
+
* display representation out of resume, fork, compaction, and model replay by
|
|
24
|
+
* construction. Since the sidecar metadata does not retain text-relative
|
|
25
|
+
* positions, projected activities are placed in their recorded order
|
|
26
|
+
* immediately before the assistant message that owns them.
|
|
27
|
+
*/
|
|
28
|
+
export declare function projectSessionMessagesForDisplay(messages: readonly MessageWithMetadata[]): SessionDisplayMessage[];
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { ToolResultContent } from "@cline/shared";
|
|
2
|
+
/**
|
|
3
|
+
* Preserve the runtime tool-output serialization used by canonical session
|
|
4
|
+
* persistence. This intentionally remains internal to Core because the
|
|
5
|
+
* historical codec accepts a wider runtime value set than the public
|
|
6
|
+
* `ToolResultContent` type describes.
|
|
7
|
+
*/
|
|
8
|
+
export declare function toPersistedToolResultContent(output: unknown): ToolResultContent["content"];
|
|
@@ -39,7 +39,7 @@ export declare class UnifiedSessionPersistenceService {
|
|
|
39
39
|
upsertSubagentSession(input: import("../models/session-row").UpsertSubagentInput): Promise<string | undefined>;
|
|
40
40
|
upsertSubagentSessionFromHook(event: HookEventPayload): Promise<string | undefined>;
|
|
41
41
|
appendSubagentHookAudit(_subSessionId: string, event: HookEventPayload): Promise<void>;
|
|
42
|
-
persistSessionMessages(sessionId: string, messages: LlmsProviders.
|
|
42
|
+
persistSessionMessages(sessionId: string, messages: LlmsProviders.MessageWithMetadata[], systemPrompt?: string): Promise<void>;
|
|
43
43
|
readSessionCompactionState(sessionId: string): Promise<SessionCompactionState | undefined>;
|
|
44
44
|
persistSessionCompactionState(sessionId: string, state: SessionCompactionState): Promise<void>;
|
|
45
45
|
deleteSessionCompactionState(sessionId: string): Promise<void>;
|
|
@@ -47,7 +47,7 @@ export declare class UnifiedSessionPersistenceService {
|
|
|
47
47
|
applySubagentStatusBySessionId(subSessionId: string, status: SessionStatus): Promise<void>;
|
|
48
48
|
applyStatusToRunningChildSessions(parentSessionId: string, status: TerminalSessionStatus): Promise<void>;
|
|
49
49
|
onTeamTaskStart(rootSessionId: string, agentId: string, message: string): Promise<void>;
|
|
50
|
-
onTeamTaskEnd(rootSessionId: string, agentId: string, status: SessionStatus, summary?: string, result?: AgentResult, messages?: LlmsProviders.
|
|
50
|
+
onTeamTaskEnd(rootSessionId: string, agentId: string, status: SessionStatus, summary?: string, result?: AgentResult, messages?: LlmsProviders.MessageWithMetadata[]): Promise<void>;
|
|
51
51
|
onTeamTaskProgress(rootSessionId: string, agentId: string, progress: string, options?: {
|
|
52
52
|
kind?: "heartbeat" | "progress" | "text";
|
|
53
53
|
}): Promise<void>;
|
|
@@ -45,14 +45,14 @@ export interface CoreSessionSnapshot {
|
|
|
45
45
|
artifacts?: {
|
|
46
46
|
messagesPath?: string;
|
|
47
47
|
};
|
|
48
|
-
messages?: LlmsProviders.
|
|
48
|
+
messages?: LlmsProviders.MessageWithMetadata[];
|
|
49
49
|
usage?: SessionAccumulatedUsage;
|
|
50
50
|
aggregateUsage?: SessionAccumulatedUsage;
|
|
51
51
|
checkpoint?: CoreSessionCheckpointSnapshot;
|
|
52
52
|
}
|
|
53
53
|
export declare function createCoreSessionSnapshot(input: {
|
|
54
54
|
session: SessionRecord;
|
|
55
|
-
messages?: LlmsProviders.
|
|
55
|
+
messages?: LlmsProviders.MessageWithMetadata[];
|
|
56
56
|
usage?: SessionAccumulatedUsage;
|
|
57
57
|
aggregateUsage?: SessionAccumulatedUsage;
|
|
58
58
|
}): CoreSessionSnapshot;
|