@clinebot/core 0.0.36 → 0.0.37
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 +312 -3
- package/dist/ClineCore.d.ts.map +1 -1
- package/dist/account/cline-account-service.d.ts.map +1 -1
- package/dist/cron/cron-event-ingress.d.ts +38 -0
- package/dist/cron/cron-event-ingress.d.ts.map +1 -0
- package/dist/cron/cron-materializer.d.ts +36 -0
- package/dist/cron/cron-materializer.d.ts.map +1 -0
- package/dist/cron/cron-reconciler.d.ts +62 -0
- package/dist/cron/cron-reconciler.d.ts.map +1 -0
- package/dist/cron/cron-report-writer.d.ts +41 -0
- package/dist/cron/cron-report-writer.d.ts.map +1 -0
- package/dist/cron/cron-runner.d.ts +43 -0
- package/dist/cron/cron-runner.d.ts.map +1 -0
- package/dist/cron/cron-schema.d.ts +3 -0
- package/dist/cron/cron-schema.d.ts.map +1 -0
- package/dist/cron/cron-service.d.ts +57 -0
- package/dist/cron/cron-service.d.ts.map +1 -0
- package/dist/cron/cron-spec-parser.d.ts +27 -0
- package/dist/cron/cron-spec-parser.d.ts.map +1 -0
- package/dist/cron/cron-watcher.d.ts +23 -0
- package/dist/cron/cron-watcher.d.ts.map +1 -0
- package/dist/cron/scheduler.d.ts +3 -1
- package/dist/cron/scheduler.d.ts.map +1 -1
- package/dist/cron/sqlite-cron-store.d.ts +230 -0
- package/dist/cron/sqlite-cron-store.d.ts.map +1 -0
- package/dist/extensions/plugin/plugin-config-loader.d.ts +7 -1
- package/dist/extensions/plugin/plugin-config-loader.d.ts.map +1 -1
- package/dist/extensions/plugin/plugin-loader.d.ts +10 -6
- package/dist/extensions/plugin/plugin-loader.d.ts.map +1 -1
- package/dist/extensions/plugin/plugin-sandbox.d.ts +7 -1
- package/dist/extensions/plugin/plugin-sandbox.d.ts.map +1 -1
- package/dist/extensions/plugin-sandbox-bootstrap.js +236 -275
- package/dist/extensions/tools/constants.d.ts +1 -0
- package/dist/extensions/tools/constants.d.ts.map +1 -1
- package/dist/extensions/tools/definitions.d.ts +2 -3
- package/dist/extensions/tools/definitions.d.ts.map +1 -1
- package/dist/extensions/tools/executors/editor.d.ts.map +1 -1
- package/dist/extensions/tools/helpers.d.ts +1 -0
- package/dist/extensions/tools/helpers.d.ts.map +1 -1
- package/dist/extensions/tools/index.d.ts +1 -2
- package/dist/extensions/tools/index.d.ts.map +1 -1
- package/dist/extensions/tools/presets.d.ts +1 -1
- package/dist/extensions/tools/schemas.d.ts +25 -3
- package/dist/extensions/tools/schemas.d.ts.map +1 -1
- package/dist/extensions/tools/team/delegated-agent.d.ts +2 -2
- package/dist/extensions/tools/team/delegated-agent.d.ts.map +1 -1
- package/dist/extensions/tools/team/multi-agent.d.ts +7 -3
- package/dist/extensions/tools/team/multi-agent.d.ts.map +1 -1
- package/dist/extensions/tools/team/team-tools.d.ts.map +1 -1
- package/dist/extensions/tools/types.d.ts +0 -5
- package/dist/extensions/tools/types.d.ts.map +1 -1
- package/dist/hooks/hook-bridge.d.ts +118 -0
- package/dist/hooks/hook-bridge.d.ts.map +1 -0
- package/dist/hooks/hook-file-hooks.d.ts +2 -1
- package/dist/hooks/hook-file-hooks.d.ts.map +1 -1
- package/dist/hooks/hook-registry.d.ts +16 -0
- package/dist/hooks/hook-registry.d.ts.map +1 -0
- package/dist/hub/browser-websocket.d.ts.map +1 -1
- package/dist/hub/client.d.ts +7 -1
- package/dist/hub/client.d.ts.map +1 -1
- package/dist/hub/daemon-entry.js +721 -461
- package/dist/hub/daemon.d.ts.map +1 -1
- package/dist/hub/defaults.d.ts +8 -4
- package/dist/hub/defaults.d.ts.map +1 -1
- package/dist/hub/index.js +665 -415
- package/dist/hub/runtime-handlers.d.ts.map +1 -1
- package/dist/hub/server.d.ts +18 -0
- package/dist/hub/server.d.ts.map +1 -1
- package/dist/hub/session-client.d.ts +3 -0
- package/dist/hub/session-client.d.ts.map +1 -1
- package/dist/hub/start-shared-server.d.ts.map +1 -1
- package/dist/hub/ui-client.d.ts +1 -0
- package/dist/hub/ui-client.d.ts.map +1 -1
- package/dist/index.d.ts +9 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +756 -467
- package/dist/llms/cline-recommended-models.d.ts +20 -0
- package/dist/llms/cline-recommended-models.d.ts.map +1 -0
- package/dist/llms/handler-factory.d.ts +16 -0
- package/dist/llms/handler-factory.d.ts.map +1 -0
- package/dist/llms/provider-defaults.d.ts.map +1 -1
- package/dist/llms/provider-settings.d.ts +45 -2
- package/dist/llms/provider-settings.d.ts.map +1 -1
- package/dist/llms/runtime-registry.d.ts.map +1 -1
- package/dist/runtime/agent-config-adapter.d.ts +148 -0
- package/dist/runtime/agent-config-adapter.d.ts.map +1 -0
- package/dist/runtime/agent-runtime-config-builder.d.ts +96 -0
- package/dist/runtime/agent-runtime-config-builder.d.ts.map +1 -0
- package/dist/runtime/history.d.ts +6 -0
- package/dist/runtime/history.d.ts.map +1 -1
- package/dist/runtime/host.d.ts.map +1 -1
- package/dist/runtime/loop-detection.d.ts +59 -0
- package/dist/runtime/loop-detection.d.ts.map +1 -0
- package/dist/runtime/mistake-tracker.d.ts +69 -0
- package/dist/runtime/mistake-tracker.d.ts.map +1 -0
- package/dist/runtime/runtime-builder.d.ts.map +1 -1
- package/dist/runtime/runtime-event-adapter.d.ts +102 -0
- package/dist/runtime/runtime-event-adapter.d.ts.map +1 -0
- package/dist/runtime/runtime-host.d.ts +28 -3
- package/dist/runtime/runtime-host.d.ts.map +1 -1
- package/dist/runtime/session-runtime-orchestrator.d.ts +261 -0
- package/dist/runtime/session-runtime-orchestrator.d.ts.map +1 -0
- package/dist/runtime/session-runtime.d.ts +16 -3
- package/dist/runtime/session-runtime.d.ts.map +1 -1
- package/dist/runtime/user-input-builder.d.ts +24 -0
- package/dist/runtime/user-input-builder.d.ts.map +1 -0
- package/dist/services/index.js +28 -0
- package/dist/services/local-runtime-bootstrap.d.ts.map +1 -1
- package/dist/services/plugin-tools.d.ts.map +1 -1
- package/dist/services/providers/local-provider-registry.d.ts +197 -21
- package/dist/services/providers/local-provider-registry.d.ts.map +1 -1
- package/dist/services/providers/local-provider-service.d.ts +3 -1
- package/dist/services/providers/local-provider-service.d.ts.map +1 -1
- package/dist/services/session-data.d.ts.map +1 -1
- package/dist/services/session-telemetry.d.ts +7 -2
- package/dist/services/session-telemetry.d.ts.map +1 -1
- package/dist/services/storage/file-team-store.d.ts.map +1 -1
- package/dist/services/storage/provider-settings-legacy-migration.d.ts.map +1 -1
- package/dist/services/storage/provider-settings-manager.d.ts +1 -0
- package/dist/services/storage/provider-settings-manager.d.ts.map +1 -1
- package/dist/services/storage/sqlite-team-store.d.ts.map +1 -1
- package/dist/session/conversation-store.d.ts +30 -0
- package/dist/session/conversation-store.d.ts.map +1 -0
- package/dist/session/message-builder.d.ts +65 -0
- package/dist/session/message-builder.d.ts.map +1 -0
- package/dist/session/session-manifest.d.ts +1 -1
- package/dist/transports/hub.d.ts +14 -3
- package/dist/transports/hub.d.ts.map +1 -1
- package/dist/transports/local.d.ts +14 -4
- package/dist/transports/local.d.ts.map +1 -1
- package/dist/transports/remote.d.ts.map +1 -1
- package/dist/types/chat-schema.d.ts +5 -5
- package/dist/types/config.d.ts +9 -0
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/events.d.ts +7 -6
- package/dist/types/events.d.ts.map +1 -1
- package/dist/types/provider-settings.d.ts +2 -2
- package/dist/types/provider-settings.d.ts.map +1 -1
- package/dist/types/session.d.ts +5 -2
- package/dist/types/session.d.ts.map +1 -1
- package/dist/types.d.ts +4 -4
- package/dist/types.d.ts.map +1 -1
- package/package.json +4 -4
- package/src/ClineCore.ts +691 -6
- package/src/account/cline-account-service.ts +44 -6
- package/src/cron/cron-event-ingress.ts +357 -0
- package/src/cron/cron-materializer.ts +97 -0
- package/src/cron/cron-reconciler.ts +241 -0
- package/src/cron/cron-report-writer.ts +153 -0
- package/src/cron/cron-runner.ts +495 -0
- package/src/cron/cron-schema.ts +127 -0
- package/src/cron/cron-service.ts +163 -0
- package/src/cron/cron-spec-parser.ts +489 -0
- package/src/cron/cron-watcher.ts +102 -0
- package/src/cron/index.ts +10 -0
- package/src/cron/scheduler.ts +141 -6
- package/src/cron/sqlite-cron-store.ts +1286 -0
- package/src/extensions/plugin/plugin-config-loader.ts +21 -1
- package/src/extensions/plugin/plugin-loader.ts +25 -9
- package/src/extensions/plugin/plugin-sandbox-bootstrap.ts +151 -1
- package/src/extensions/plugin/plugin-sandbox.ts +131 -7
- package/src/extensions/tools/constants.ts +2 -0
- package/src/extensions/tools/definitions.ts +31 -22
- package/src/extensions/tools/executors/editor.ts +4 -3
- package/src/extensions/tools/helpers.ts +24 -0
- package/src/extensions/tools/index.ts +1 -2
- package/src/extensions/tools/presets.ts +1 -1
- package/src/extensions/tools/schemas.ts +13 -18
- package/src/extensions/tools/team/delegated-agent.ts +8 -3
- package/src/extensions/tools/team/multi-agent.ts +135 -19
- package/src/extensions/tools/team/team-tools.ts +151 -91
- package/src/extensions/tools/types.ts +0 -6
- package/src/hooks/hook-bridge.ts +489 -0
- package/src/hooks/hook-file-hooks.ts +58 -3
- package/src/hooks/hook-registry.ts +257 -0
- package/src/hub/browser-websocket.ts +26 -4
- package/src/hub/client.ts +72 -13
- package/src/hub/daemon-entry.ts +35 -0
- package/src/hub/daemon.ts +117 -14
- package/src/hub/defaults.ts +39 -12
- package/src/hub/runtime-handlers.ts +4 -3
- package/src/hub/server.ts +506 -77
- package/src/hub/session-client.ts +43 -1
- package/src/hub/start-shared-server.ts +3 -0
- package/src/hub/ui-client.ts +4 -0
- package/src/index.ts +46 -1
- package/src/llms/cline-recommended-models.ts +167 -0
- package/src/llms/handler-factory.ts +56 -0
- package/src/llms/provider-defaults.ts +17 -1
- package/src/llms/provider-settings.ts +48 -1
- package/src/llms/runtime-registry.ts +1 -0
- package/src/runtime/agent-config-adapter.ts +636 -0
- package/src/runtime/agent-runtime-config-builder.ts +205 -0
- package/src/runtime/error-feedback.ts +142 -0
- package/src/runtime/history.ts +137 -0
- package/src/runtime/host.ts +22 -0
- package/src/runtime/loop-detection.ts +162 -0
- package/src/runtime/mistake-tracker.ts +221 -0
- package/src/runtime/runtime-builder.ts +61 -5
- package/src/runtime/runtime-event-adapter.ts +412 -0
- package/src/runtime/runtime-host.ts +45 -1
- package/src/runtime/session-runtime-orchestrator.ts +1253 -0
- package/src/runtime/session-runtime.ts +16 -2
- package/src/runtime/user-input-builder.ts +167 -0
- package/src/services/local-runtime-bootstrap.ts +128 -22
- package/src/services/plugin-tools.ts +1 -0
- package/src/services/providers/local-provider-registry.ts +273 -57
- package/src/services/providers/local-provider-service.ts +67 -7
- package/src/services/session-data.ts +16 -14
- package/src/services/session-telemetry.ts +6 -15
- package/src/services/storage/file-team-store.ts +1 -5
- package/src/services/storage/provider-settings-legacy-migration.ts +8 -47
- package/src/services/storage/provider-settings-manager.ts +16 -1
- package/src/services/storage/sqlite-team-store.ts +1 -5
- package/src/session/conversation-store.ts +77 -0
- package/src/session/message-builder.ts +941 -0
- package/src/transports/hub.ts +458 -33
- package/src/transports/local.ts +296 -65
- package/src/transports/remote.ts +1 -0
- package/src/types/config.ts +9 -0
- package/src/types/events.ts +8 -6
- package/src/types/index.ts +3 -0
- package/src/types/provider-settings.ts +8 -1
- package/src/types/session.ts +5 -2
- package/src/types.ts +15 -1
- package/dist/cron/index.d.ts +0 -6
- package/dist/cron/index.d.ts.map +0 -1
- package/dist/services/telemetry/index.js +0 -28
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type * as LlmsProviders from "@clinebot/llms";
|
|
1
2
|
import type {
|
|
2
3
|
ChatRunTurnRequest,
|
|
3
4
|
ChatStartSessionRequest,
|
|
@@ -75,12 +76,31 @@ function extractSessionRow(
|
|
|
75
76
|
};
|
|
76
77
|
}
|
|
77
78
|
|
|
79
|
+
function hubReplyErrorMessage(
|
|
80
|
+
reply: { error?: { message?: string } },
|
|
81
|
+
command: string,
|
|
82
|
+
): string {
|
|
83
|
+
return reply.error?.message ?? `hub command failed: ${command}`;
|
|
84
|
+
}
|
|
85
|
+
|
|
78
86
|
function mapHubEvent(event: HubEventEnvelope): HubStreamEvent | undefined {
|
|
79
87
|
const sessionId = event.sessionId?.trim();
|
|
80
88
|
if (!sessionId) {
|
|
81
89
|
return undefined;
|
|
82
90
|
}
|
|
83
91
|
switch (event.event) {
|
|
92
|
+
case "iteration.started":
|
|
93
|
+
return {
|
|
94
|
+
sessionId,
|
|
95
|
+
eventType: "runtime.chat.iteration_start",
|
|
96
|
+
payload: cloneRecord(event.payload),
|
|
97
|
+
};
|
|
98
|
+
case "iteration.finished":
|
|
99
|
+
return {
|
|
100
|
+
sessionId,
|
|
101
|
+
eventType: "runtime.chat.iteration_end",
|
|
102
|
+
payload: cloneRecord(event.payload),
|
|
103
|
+
};
|
|
84
104
|
case "assistant.delta":
|
|
85
105
|
return {
|
|
86
106
|
sessionId,
|
|
@@ -159,6 +179,10 @@ export class HubSessionClient {
|
|
|
159
179
|
this.client.close();
|
|
160
180
|
}
|
|
161
181
|
|
|
182
|
+
async dispose(): Promise<void> {
|
|
183
|
+
await this.client.dispose();
|
|
184
|
+
}
|
|
185
|
+
|
|
162
186
|
async startRuntimeSession(
|
|
163
187
|
request: ChatStartSessionRequest,
|
|
164
188
|
): Promise<ChatStartSessionResponse> {
|
|
@@ -201,6 +225,7 @@ export class HubSessionClient {
|
|
|
201
225
|
enableSpawn: request.enableSpawn,
|
|
202
226
|
enableTeams: request.enableTeams,
|
|
203
227
|
autoApproveTools: request.autoApproveTools,
|
|
228
|
+
configExtensions: request.configExtensions,
|
|
204
229
|
},
|
|
205
230
|
modelSelection: {
|
|
206
231
|
provider: request.provider,
|
|
@@ -208,7 +233,6 @@ export class HubSessionClient {
|
|
|
208
233
|
apiKey: request.apiKey,
|
|
209
234
|
},
|
|
210
235
|
toolPolicies: request.toolPolicies,
|
|
211
|
-
initialMessages: request.initialMessages,
|
|
212
236
|
});
|
|
213
237
|
const row = extractSessionRow(reply.payload);
|
|
214
238
|
if (!row?.sessionId) {
|
|
@@ -281,6 +305,24 @@ export class HubSessionClient {
|
|
|
281
305
|
return extractSessionRow(reply.payload);
|
|
282
306
|
}
|
|
283
307
|
|
|
308
|
+
async readMessages(sessionId: string): Promise<LlmsProviders.Message[]> {
|
|
309
|
+
const target = sessionId.trim();
|
|
310
|
+
if (!target) {
|
|
311
|
+
return [];
|
|
312
|
+
}
|
|
313
|
+
await this.ensureMetadataApplied();
|
|
314
|
+
const reply = await this.client.command(
|
|
315
|
+
"session.messages",
|
|
316
|
+
{ sessionId: target },
|
|
317
|
+
target,
|
|
318
|
+
);
|
|
319
|
+
if (!reply.ok) {
|
|
320
|
+
throw new Error(hubReplyErrorMessage(reply, "session.messages"));
|
|
321
|
+
}
|
|
322
|
+
const messages = reply.payload?.messages;
|
|
323
|
+
return Array.isArray(messages) ? (messages as LlmsProviders.Message[]) : [];
|
|
324
|
+
}
|
|
325
|
+
|
|
284
326
|
async listSessions(input?: { limit?: number }): Promise<HubSessionRow[]> {
|
|
285
327
|
await this.ensureMetadataApplied();
|
|
286
328
|
const reply = await this.client.command("session.list", {
|
|
@@ -45,6 +45,8 @@ export async function startHubServer(
|
|
|
45
45
|
export async function ensureHubServer(
|
|
46
46
|
options: EnsureHubServerOptions,
|
|
47
47
|
): Promise<EnsureHubServerResult> {
|
|
48
|
+
const hasExplicitPort =
|
|
49
|
+
options.port !== undefined || !!process.env.CLINE_HUB_PORT?.trim();
|
|
48
50
|
const endpoint = resolveHubEndpointOptions({
|
|
49
51
|
host: options.host,
|
|
50
52
|
port: options.port,
|
|
@@ -53,6 +55,7 @@ export async function ensureHubServer(
|
|
|
53
55
|
return await ensureHubWebSocketServer({
|
|
54
56
|
...options,
|
|
55
57
|
...endpoint,
|
|
58
|
+
allowPortFallback: options.allowPortFallback ?? !hasExplicitPort,
|
|
56
59
|
owner: resolveSharedHubOwnerContext(),
|
|
57
60
|
});
|
|
58
61
|
}
|
package/src/hub/ui-client.ts
CHANGED
package/src/index.ts
CHANGED
|
@@ -11,10 +11,15 @@ export type {
|
|
|
11
11
|
AgentConfig,
|
|
12
12
|
AgentEvent,
|
|
13
13
|
AgentExtension,
|
|
14
|
+
AgentExtension as AgentPlugin, // Public-facing alias for extensions
|
|
14
15
|
AgentExtensionCommand,
|
|
16
|
+
AgentExtensionCommand as AgentPluginCommand,
|
|
15
17
|
AgentHooks,
|
|
16
18
|
AgentMode,
|
|
17
19
|
AgentResult,
|
|
20
|
+
AgentRunResult,
|
|
21
|
+
AgentRunStatus,
|
|
22
|
+
AutomationEventEnvelope,
|
|
18
23
|
BasicLogger,
|
|
19
24
|
ChatRunTurnRequest,
|
|
20
25
|
ChatRuntimeConfig,
|
|
@@ -23,6 +28,7 @@ export type {
|
|
|
23
28
|
ChatTurnResult,
|
|
24
29
|
ClineAccountActionRequest,
|
|
25
30
|
ConnectorHookEvent,
|
|
31
|
+
ContentBlock,
|
|
26
32
|
EnterpriseAuthenticateRequest,
|
|
27
33
|
EnterpriseAuthenticateResponse,
|
|
28
34
|
EnterpriseStatusRequest,
|
|
@@ -30,10 +36,14 @@ export type {
|
|
|
30
36
|
EnterpriseSyncRequest,
|
|
31
37
|
EnterpriseSyncResponse,
|
|
32
38
|
emptyWorkspaceManifest,
|
|
39
|
+
FileContent,
|
|
33
40
|
GetProviderModelsActionRequest,
|
|
34
41
|
HookSessionContext,
|
|
42
|
+
ImageContent,
|
|
35
43
|
ITelemetryService,
|
|
36
44
|
ListProvidersActionRequest,
|
|
45
|
+
Message,
|
|
46
|
+
MessageWithMetadata,
|
|
37
47
|
OAuthProviderId,
|
|
38
48
|
ProviderActionRequest,
|
|
39
49
|
ProviderCatalogResponse,
|
|
@@ -52,11 +62,15 @@ export type {
|
|
|
52
62
|
TelemetryPrimitive,
|
|
53
63
|
TelemetryProperties,
|
|
54
64
|
TelemetryValue,
|
|
65
|
+
TextContent,
|
|
66
|
+
ThinkingContent,
|
|
55
67
|
Tool,
|
|
56
68
|
ToolApprovalRequest,
|
|
57
69
|
ToolApprovalResult,
|
|
58
70
|
ToolContext,
|
|
59
71
|
ToolPolicy,
|
|
72
|
+
ToolResultContent,
|
|
73
|
+
ToolUseContent,
|
|
60
74
|
WorkspaceInfo,
|
|
61
75
|
WorkspaceInfoSchema,
|
|
62
76
|
WorkspaceManifest,
|
|
@@ -151,13 +165,24 @@ export type {
|
|
|
151
165
|
OcaTokenResolution,
|
|
152
166
|
} from "./auth/types";
|
|
153
167
|
export {
|
|
168
|
+
type ClineAutomationEventIngressResult,
|
|
169
|
+
type ClineAutomationEventLog,
|
|
170
|
+
type ClineAutomationEventSuppression,
|
|
171
|
+
type ClineAutomationListEventsOptions,
|
|
172
|
+
type ClineAutomationListRunsOptions,
|
|
173
|
+
type ClineAutomationListSpecsOptions,
|
|
174
|
+
type ClineAutomationRun,
|
|
175
|
+
type ClineAutomationRunStatus,
|
|
176
|
+
type ClineAutomationSpec,
|
|
154
177
|
ClineCore,
|
|
178
|
+
type ClineCoreAutomationApi,
|
|
179
|
+
type ClineCoreAutomationOptions,
|
|
180
|
+
type ClineCoreListHistoryOptions,
|
|
155
181
|
type ClineCoreOptions,
|
|
156
182
|
type ClineCoreStartInput,
|
|
157
183
|
type HubOptions,
|
|
158
184
|
type RemoteOptions,
|
|
159
185
|
} from "./ClineCore";
|
|
160
|
-
export * from "./cron";
|
|
161
186
|
export type {
|
|
162
187
|
LoadAgentPluginFromPathOptions,
|
|
163
188
|
PluginInitializationFailure,
|
|
@@ -336,6 +361,11 @@ export {
|
|
|
336
361
|
DefaultRuntimeBuilder,
|
|
337
362
|
} from "./runtime/runtime-builder";
|
|
338
363
|
export type {
|
|
364
|
+
PendingPromptMutationResult,
|
|
365
|
+
PendingPromptsAction,
|
|
366
|
+
PendingPromptsDeleteInput,
|
|
367
|
+
PendingPromptsListInput,
|
|
368
|
+
PendingPromptsUpdateInput,
|
|
339
369
|
RuntimeHost,
|
|
340
370
|
RuntimeHost as SessionHost,
|
|
341
371
|
RuntimeHostMode,
|
|
@@ -504,6 +534,7 @@ export { CORE_BUILD_VERSION } from "./version";
|
|
|
504
534
|
export async function loadOpenTelemetryAdapter() {
|
|
505
535
|
return import("./services/telemetry/index.js");
|
|
506
536
|
}
|
|
537
|
+
export { Agent, createAgentRuntime } from "@clinebot/agents";
|
|
507
538
|
export { createContextCompactionPrepareTurn } from "./extensions/context/compaction";
|
|
508
539
|
export {
|
|
509
540
|
ALL_DEFAULT_TOOL_NAMES,
|
|
@@ -532,6 +563,13 @@ export {
|
|
|
532
563
|
type ToolPresetName,
|
|
533
564
|
ToolPresets,
|
|
534
565
|
} from "./extensions/tools";
|
|
566
|
+
export {
|
|
567
|
+
type ClineRecommendedModel,
|
|
568
|
+
type ClineRecommendedModelsData,
|
|
569
|
+
FALLBACK_CLINE_RECOMMENDED_MODELS,
|
|
570
|
+
type FetchClineRecommendedModelsOptions,
|
|
571
|
+
fetchClineRecommendedModels,
|
|
572
|
+
} from "./llms/cline-recommended-models";
|
|
535
573
|
export {
|
|
536
574
|
clearLiveModelsCatalogCache,
|
|
537
575
|
clearPrivateModelsCatalogCache,
|
|
@@ -551,9 +589,11 @@ export type {
|
|
|
551
589
|
ModelCatalogSettings,
|
|
552
590
|
OcaSettings,
|
|
553
591
|
ProviderCapability,
|
|
592
|
+
ProviderClient,
|
|
554
593
|
ProviderConfig,
|
|
555
594
|
ProviderDefaultsConfig,
|
|
556
595
|
ProviderId,
|
|
596
|
+
ProviderProtocol,
|
|
557
597
|
ProviderSettings,
|
|
558
598
|
ReasoningSettings,
|
|
559
599
|
SapSettings,
|
|
@@ -570,7 +610,9 @@ export {
|
|
|
570
610
|
ModelCatalogSettingsSchema,
|
|
571
611
|
normalizeProviderId,
|
|
572
612
|
OcaSettingsSchema,
|
|
613
|
+
ProviderClientSchema,
|
|
573
614
|
ProviderIdSchema,
|
|
615
|
+
ProviderProtocolSchema,
|
|
574
616
|
ProviderSettingsSchema,
|
|
575
617
|
parseSettings,
|
|
576
618
|
ReasoningSettingsSchema,
|
|
@@ -621,6 +663,9 @@ export type {
|
|
|
621
663
|
CoreSessionEvent,
|
|
622
664
|
SessionChunkEvent,
|
|
623
665
|
SessionEndedEvent,
|
|
666
|
+
SessionPendingPrompt,
|
|
667
|
+
SessionPendingPromptSubmittedEvent,
|
|
668
|
+
SessionPendingPromptsEvent,
|
|
624
669
|
SessionTeamProgressEvent,
|
|
625
670
|
SessionToolEvent,
|
|
626
671
|
} from "./types/events";
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
import { ProviderSettingsManager } from "../services/storage/provider-settings-manager";
|
|
2
|
+
|
|
3
|
+
export interface ClineRecommendedModel {
|
|
4
|
+
id: string;
|
|
5
|
+
name: string;
|
|
6
|
+
description: string;
|
|
7
|
+
tags: string[];
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export interface ClineRecommendedModelsData {
|
|
11
|
+
recommended: ClineRecommendedModel[];
|
|
12
|
+
free: ClineRecommendedModel[];
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export interface FetchClineRecommendedModelsOptions {
|
|
16
|
+
baseUrl?: string;
|
|
17
|
+
fetchImpl?: typeof fetch;
|
|
18
|
+
providerSettingsManager?: Pick<
|
|
19
|
+
ProviderSettingsManager,
|
|
20
|
+
"getProviderSettings"
|
|
21
|
+
>;
|
|
22
|
+
timeoutMs?: number;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
const DEFAULT_API_BASE_URL = "https://api.cline.bot";
|
|
26
|
+
const DEFAULT_REQUEST_TIMEOUT_MS = 5_000;
|
|
27
|
+
|
|
28
|
+
export const FALLBACK_CLINE_RECOMMENDED_MODELS: ClineRecommendedModelsData = {
|
|
29
|
+
recommended: [
|
|
30
|
+
{
|
|
31
|
+
id: "anthropic/claude-opus-4.6",
|
|
32
|
+
name: "Claude Opus 4.6",
|
|
33
|
+
description: "Most intelligent model for agents and coding",
|
|
34
|
+
tags: ["BEST"],
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
id: "anthropic/claude-sonnet-4.6",
|
|
38
|
+
name: "Claude Sonnet 4.6",
|
|
39
|
+
description: "Strong coding and agent performance",
|
|
40
|
+
tags: ["NEW"],
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
id: "google/gemini-3.1-pro-preview",
|
|
44
|
+
name: "Gemini 3.1 Pro Preview",
|
|
45
|
+
description: "1M context window, strong coding performance",
|
|
46
|
+
tags: ["NEW"],
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
id: "openai/gpt-5.3-codex",
|
|
50
|
+
name: "GPT-5.3 Codex",
|
|
51
|
+
description: "OpenAI's latest with strong coding abilities",
|
|
52
|
+
tags: ["NEW"],
|
|
53
|
+
},
|
|
54
|
+
],
|
|
55
|
+
free: [
|
|
56
|
+
{
|
|
57
|
+
id: "kwaipilot/kat-coder-pro",
|
|
58
|
+
name: "KwaiKAT Kat Coder Pro",
|
|
59
|
+
description: "Advanced agentic coding model",
|
|
60
|
+
tags: ["FREE"],
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
id: "arcee-ai/trinity-large-preview:free",
|
|
64
|
+
name: "Arcee AI Trinity Large Preview",
|
|
65
|
+
description: "Advanced large preview model",
|
|
66
|
+
tags: ["FREE"],
|
|
67
|
+
},
|
|
68
|
+
],
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
function cloneRecommendedModels(
|
|
72
|
+
data: ClineRecommendedModelsData,
|
|
73
|
+
): ClineRecommendedModelsData {
|
|
74
|
+
return {
|
|
75
|
+
recommended: data.recommended.map((model) => ({
|
|
76
|
+
...model,
|
|
77
|
+
tags: [...model.tags],
|
|
78
|
+
})),
|
|
79
|
+
free: data.free.map((model) => ({ ...model, tags: [...model.tags] })),
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
function normalizeModel(raw: unknown): ClineRecommendedModel | null {
|
|
84
|
+
if (!raw || typeof raw !== "object") return null;
|
|
85
|
+
const data = raw as Record<string, unknown>;
|
|
86
|
+
if (typeof data.id !== "string" || data.id.length === 0) return null;
|
|
87
|
+
return {
|
|
88
|
+
id: data.id,
|
|
89
|
+
name:
|
|
90
|
+
typeof data.name === "string" && data.name.length > 0
|
|
91
|
+
? data.name
|
|
92
|
+
: data.id,
|
|
93
|
+
description: typeof data.description === "string" ? data.description : "",
|
|
94
|
+
tags: Array.isArray(data.tags)
|
|
95
|
+
? data.tags.filter((tag): tag is string => typeof tag === "string")
|
|
96
|
+
: [],
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
function normalizeResponse(raw: unknown): ClineRecommendedModelsData | null {
|
|
101
|
+
if (!raw || typeof raw !== "object") return null;
|
|
102
|
+
const data = raw as Record<string, unknown>;
|
|
103
|
+
const recommendedRaw = Array.isArray(data.recommended)
|
|
104
|
+
? data.recommended
|
|
105
|
+
: [];
|
|
106
|
+
const freeRaw = Array.isArray(data.free) ? data.free : [];
|
|
107
|
+
const recommended = recommendedRaw
|
|
108
|
+
.map(normalizeModel)
|
|
109
|
+
.filter((model): model is ClineRecommendedModel => model !== null);
|
|
110
|
+
const free = freeRaw
|
|
111
|
+
.map(normalizeModel)
|
|
112
|
+
.filter((model): model is ClineRecommendedModel => model !== null);
|
|
113
|
+
if (recommended.length === 0 && free.length === 0) return null;
|
|
114
|
+
return { recommended, free };
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
function getConfiguredApiBaseUrl(
|
|
118
|
+
options: FetchClineRecommendedModelsOptions,
|
|
119
|
+
): string {
|
|
120
|
+
const explicitBaseUrl = options.baseUrl?.trim();
|
|
121
|
+
if (explicitBaseUrl) return explicitBaseUrl;
|
|
122
|
+
|
|
123
|
+
try {
|
|
124
|
+
const manager =
|
|
125
|
+
options.providerSettingsManager ?? new ProviderSettingsManager();
|
|
126
|
+
const settings = manager.getProviderSettings("cline");
|
|
127
|
+
return settings?.baseUrl?.trim() || DEFAULT_API_BASE_URL;
|
|
128
|
+
} catch {
|
|
129
|
+
return DEFAULT_API_BASE_URL;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
async function fetchWithTimeout(
|
|
134
|
+
fetchImpl: typeof fetch,
|
|
135
|
+
input: string,
|
|
136
|
+
timeoutMs: number,
|
|
137
|
+
): Promise<Response> {
|
|
138
|
+
const controller = new AbortController();
|
|
139
|
+
const timer = setTimeout(() => controller.abort(), timeoutMs);
|
|
140
|
+
try {
|
|
141
|
+
return await fetchImpl(input, { signal: controller.signal });
|
|
142
|
+
} finally {
|
|
143
|
+
clearTimeout(timer);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
export async function fetchClineRecommendedModels(
|
|
148
|
+
options: FetchClineRecommendedModelsOptions = {},
|
|
149
|
+
): Promise<ClineRecommendedModelsData> {
|
|
150
|
+
try {
|
|
151
|
+
const base = getConfiguredApiBaseUrl(options);
|
|
152
|
+
const fetchImpl = options.fetchImpl ?? fetch;
|
|
153
|
+
const resp = await fetchWithTimeout(
|
|
154
|
+
fetchImpl,
|
|
155
|
+
`${base}/api/v1/ai/cline/recommended-models`,
|
|
156
|
+
options.timeoutMs ?? DEFAULT_REQUEST_TIMEOUT_MS,
|
|
157
|
+
);
|
|
158
|
+
if (!resp.ok) throw new Error(`HTTP ${resp.status}`);
|
|
159
|
+
const json: unknown = await resp.json();
|
|
160
|
+
const data = normalizeResponse(json);
|
|
161
|
+
if (data) return data;
|
|
162
|
+
} catch {
|
|
163
|
+
// Fall back to the bundled list when the remote source is unavailable.
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
return cloneRecommendedModels(FALLBACK_CLINE_RECOMMENDED_MODELS);
|
|
167
|
+
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Build a concrete `LlmsProviders.ApiHandler` from an `AgentConfig`.
|
|
3
|
+
*
|
|
4
|
+
* @see PLAN.md §3.1 — moved from `packages/agents/src/utils/config-helpers.ts` lines 15–55.
|
|
5
|
+
* @see PLAN.md §3.2.1 — `AgentConfig → AgentRuntimeConfig` mapping for
|
|
6
|
+
* the `model` field.
|
|
7
|
+
*
|
|
8
|
+
* Pure port. Core calls this once per session (and again on
|
|
9
|
+
* `updateConnection`) to produce the `AgentModel` adapter handed to
|
|
10
|
+
* `new AgentRuntime({ model, ... })`.
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
import * as LlmsProviders from "@clinebot/llms";
|
|
14
|
+
import type { AgentConfig, BasicLogger } from "@clinebot/shared";
|
|
15
|
+
|
|
16
|
+
export function resolveKnownModelsFromConfig(
|
|
17
|
+
config: AgentConfig,
|
|
18
|
+
): Record<string, LlmsProviders.ModelInfo> | undefined {
|
|
19
|
+
const pc = config.providerConfig as LlmsProviders.ProviderConfig | undefined;
|
|
20
|
+
if (pc?.knownModels) {
|
|
21
|
+
return pc.knownModels;
|
|
22
|
+
}
|
|
23
|
+
if (config.knownModels) {
|
|
24
|
+
return config.knownModels;
|
|
25
|
+
}
|
|
26
|
+
return (
|
|
27
|
+
LlmsProviders.MODEL_COLLECTIONS_BY_PROVIDER_ID[config.providerId]?.models ??
|
|
28
|
+
undefined
|
|
29
|
+
);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export function createHandlerFromConfig(
|
|
33
|
+
config: AgentConfig,
|
|
34
|
+
logger: BasicLogger | undefined,
|
|
35
|
+
): LlmsProviders.ApiHandler {
|
|
36
|
+
const pc = config.providerConfig as LlmsProviders.ProviderConfig | undefined;
|
|
37
|
+
const baseProviderConfig =
|
|
38
|
+
pc?.providerId === config.providerId ? pc : undefined;
|
|
39
|
+
const normalizedProviderConfig: LlmsProviders.ProviderConfig = {
|
|
40
|
+
...(baseProviderConfig ?? {}),
|
|
41
|
+
providerId: config.providerId,
|
|
42
|
+
modelId: config.modelId,
|
|
43
|
+
apiKey: config.apiKey ?? baseProviderConfig?.apiKey,
|
|
44
|
+
baseUrl: config.baseUrl ?? baseProviderConfig?.baseUrl,
|
|
45
|
+
headers: config.headers ?? baseProviderConfig?.headers,
|
|
46
|
+
knownModels: resolveKnownModelsFromConfig(config),
|
|
47
|
+
maxOutputTokens: config.maxTokensPerTurn,
|
|
48
|
+
reasoningEffort: config.reasoningEffort,
|
|
49
|
+
thinkingBudgetTokens: config.thinkingBudgetTokens,
|
|
50
|
+
thinking: config.thinking,
|
|
51
|
+
abortSignal: config.abortSignal,
|
|
52
|
+
logger,
|
|
53
|
+
extensionContext: config.extensionContext,
|
|
54
|
+
};
|
|
55
|
+
return LlmsProviders.createHandler(normalizedProviderConfig);
|
|
56
|
+
}
|
|
@@ -159,6 +159,20 @@ async function mergeKnownModels(
|
|
|
159
159
|
});
|
|
160
160
|
}
|
|
161
161
|
|
|
162
|
+
function resolveCatalogModels(
|
|
163
|
+
providerId: string,
|
|
164
|
+
modelsByProviderId: Record<string, Record<string, ModelInfo>>,
|
|
165
|
+
): Record<string, ModelInfo> {
|
|
166
|
+
// Runtime provider ids do not always match catalog keys. For example,
|
|
167
|
+
// Cline uses OpenRouter-backed catalog models, so live catalog lookups must
|
|
168
|
+
// apply the same key mapping as generated catalog lookups.
|
|
169
|
+
const catalogKeys = Llms.resolveProviderModelCatalogKeys(providerId);
|
|
170
|
+
return Object.assign(
|
|
171
|
+
{},
|
|
172
|
+
...catalogKeys.map((catalogKey) => modelsByProviderId[catalogKey] ?? {}),
|
|
173
|
+
);
|
|
174
|
+
}
|
|
175
|
+
|
|
162
176
|
function normalizeBaseUrl(baseUrl: string | undefined): string {
|
|
163
177
|
const value = baseUrl?.trim();
|
|
164
178
|
return value && value.length > 0 ? value : "";
|
|
@@ -611,7 +625,9 @@ export async function resolveProviderConfig(
|
|
|
611
625
|
const liveCatalog = modelCatalog?.loadLatestOnInit
|
|
612
626
|
? await getLiveModelsCatalog(modelCatalog)
|
|
613
627
|
: undefined;
|
|
614
|
-
const liveModels = liveCatalog
|
|
628
|
+
const liveModels = liveCatalog
|
|
629
|
+
? resolveCatalogModels(providerId, liveCatalog)
|
|
630
|
+
: {};
|
|
615
631
|
const privateModels =
|
|
616
632
|
config && shouldLoadPrivateModels(providerId, modelCatalog, config)
|
|
617
633
|
? await getPrivateProviderModels(providerId, modelCatalog, config)
|
|
@@ -29,6 +29,29 @@ export const ProviderIdSchema = z
|
|
|
29
29
|
.min(1)
|
|
30
30
|
.regex(/^[a-z0-9][a-z0-9-]*$/i);
|
|
31
31
|
|
|
32
|
+
export const ProviderProtocolSchema = z.enum([
|
|
33
|
+
"anthropic",
|
|
34
|
+
"gemini",
|
|
35
|
+
"openai-chat",
|
|
36
|
+
"openai-responses",
|
|
37
|
+
"openai-r1",
|
|
38
|
+
"ai-sdk",
|
|
39
|
+
]);
|
|
40
|
+
|
|
41
|
+
export const ProviderClientSchema = z.enum([
|
|
42
|
+
"anthropic",
|
|
43
|
+
"ai-sdk",
|
|
44
|
+
"ai-sdk-community",
|
|
45
|
+
"openai",
|
|
46
|
+
"openai-compatible",
|
|
47
|
+
"openai-r1",
|
|
48
|
+
"gemini",
|
|
49
|
+
"bedrock",
|
|
50
|
+
"custom",
|
|
51
|
+
"fetch",
|
|
52
|
+
"vertex",
|
|
53
|
+
]);
|
|
54
|
+
|
|
32
55
|
export const AuthSettingsSchema = z.object({
|
|
33
56
|
apiKey: z.string().optional(),
|
|
34
57
|
accessToken: z.string().optional(),
|
|
@@ -115,6 +138,9 @@ export const ProviderSettingsSchema = z.object({
|
|
|
115
138
|
apiKey: z.string().optional(),
|
|
116
139
|
auth: AuthSettingsSchema.optional(),
|
|
117
140
|
model: z.string().optional(),
|
|
141
|
+
protocol: ProviderProtocolSchema.optional(),
|
|
142
|
+
client: ProviderClientSchema.optional(),
|
|
143
|
+
routingProviderId: ProviderIdSchema.optional(),
|
|
118
144
|
maxTokens: z.number().int().positive().optional(),
|
|
119
145
|
contextWindow: z.number().int().positive().optional(),
|
|
120
146
|
baseUrl: z.string().url().optional(),
|
|
@@ -156,6 +182,14 @@ export function safeParseSettings(
|
|
|
156
182
|
return ProviderSettingsSchema.safeParse(input);
|
|
157
183
|
}
|
|
158
184
|
|
|
185
|
+
function shouldRouteThroughOpenAIResponses(
|
|
186
|
+
settings: ProviderSettings,
|
|
187
|
+
): boolean {
|
|
188
|
+
return (
|
|
189
|
+
settings.protocol === "openai-responses" || settings.client === "openai"
|
|
190
|
+
);
|
|
191
|
+
}
|
|
192
|
+
|
|
159
193
|
export function toProviderConfig(settings: ProviderSettings): ProviderConfig {
|
|
160
194
|
const providerId = settings.provider as ProviderId;
|
|
161
195
|
const normalizedProviderId = normalizeProviderId(providerId);
|
|
@@ -170,6 +204,7 @@ export function toProviderConfig(settings: ProviderSettings): ProviderConfig {
|
|
|
170
204
|
(catalogKey) => Llms.getGeneratedModelsForProvider(catalogKey),
|
|
171
205
|
),
|
|
172
206
|
);
|
|
207
|
+
const generatedDefaultModelId = Object.keys(generatedKnownModels)[0];
|
|
173
208
|
|
|
174
209
|
const apiKey =
|
|
175
210
|
settings.auth?.accessToken ?? settings.apiKey ?? settings.auth?.apiKey;
|
|
@@ -180,10 +215,22 @@ export function toProviderConfig(settings: ProviderSettings): ProviderConfig {
|
|
|
180
215
|
? DEFAULT_INTERNAL_OCA_BASE_URL
|
|
181
216
|
: DEFAULT_EXTERNAL_OCA_BASE_URL
|
|
182
217
|
: providerDefaults?.baseUrl);
|
|
218
|
+
const routingProviderId =
|
|
219
|
+
settings.routingProviderId ??
|
|
220
|
+
(shouldRouteThroughOpenAIResponses(settings) &&
|
|
221
|
+
normalizedProviderId !== BUILT_IN_PROVIDER.OPENAI_NATIVE
|
|
222
|
+
? BUILT_IN_PROVIDER.OPENAI_NATIVE
|
|
223
|
+
: undefined);
|
|
183
224
|
|
|
184
225
|
const config: ProviderConfig = {
|
|
185
226
|
providerId,
|
|
186
|
-
|
|
227
|
+
clientType: settings.client,
|
|
228
|
+
routingProviderId,
|
|
229
|
+
modelId:
|
|
230
|
+
settings.model ??
|
|
231
|
+
providerDefaults?.modelId ??
|
|
232
|
+
generatedDefaultModelId ??
|
|
233
|
+
"default",
|
|
187
234
|
knownModels:
|
|
188
235
|
providerDefaults?.knownModels ??
|
|
189
236
|
(Object.keys(generatedKnownModels).length > 0
|