@clinebot/core 0.0.35 → 0.0.36
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -2
- package/dist/ClineCore.d.ts +53 -39
- package/dist/ClineCore.d.ts.map +1 -1
- package/dist/account/index.d.ts +1 -1
- package/dist/account/index.d.ts.map +1 -1
- package/dist/account/rpc.d.ts +6 -6
- package/dist/account/rpc.d.ts.map +1 -1
- package/dist/cron/index.d.ts +6 -0
- package/dist/cron/index.d.ts.map +1 -0
- package/dist/cron/resource-limiter.d.ts +9 -0
- package/dist/cron/resource-limiter.d.ts.map +1 -0
- package/dist/cron/schedule-command-service.d.ts +10 -0
- package/dist/cron/schedule-command-service.d.ts.map +1 -0
- package/dist/cron/schedule-service.d.ts +100 -0
- package/dist/cron/schedule-service.d.ts.map +1 -0
- package/dist/cron/scheduler.d.ts +66 -0
- package/dist/cron/scheduler.d.ts.map +1 -0
- package/dist/cron/sqlite-schedule-store.d.ts +52 -0
- package/dist/cron/sqlite-schedule-store.d.ts.map +1 -0
- package/dist/extensions/config/agent-config-loader.d.ts +4 -3
- package/dist/extensions/config/agent-config-loader.d.ts.map +1 -1
- package/dist/extensions/config/runtime-commands.d.ts +1 -0
- package/dist/extensions/config/runtime-commands.d.ts.map +1 -1
- package/dist/extensions/config/user-instruction-config-loader.d.ts +1 -0
- package/dist/extensions/config/user-instruction-config-loader.d.ts.map +1 -1
- package/dist/extensions/context/agentic-compaction.d.ts +2 -2
- package/dist/extensions/context/agentic-compaction.d.ts.map +1 -1
- package/dist/extensions/context/compaction-shared.d.ts +5 -4
- package/dist/extensions/context/compaction-shared.d.ts.map +1 -1
- package/dist/extensions/context/compaction.d.ts.map +1 -1
- package/dist/extensions/plugin/plugin-config-loader.d.ts +9 -2
- package/dist/extensions/plugin/plugin-config-loader.d.ts.map +1 -1
- package/dist/extensions/plugin/plugin-loader.d.ts +5 -3
- package/dist/extensions/plugin/plugin-loader.d.ts.map +1 -1
- package/dist/extensions/plugin/plugin-module-import.d.ts.map +1 -1
- package/dist/extensions/plugin/plugin-sandbox.d.ts +15 -2
- package/dist/extensions/plugin/plugin-sandbox.d.ts.map +1 -1
- package/dist/extensions/plugin/plugin-targeting.d.ts +7 -0
- package/dist/extensions/plugin/plugin-targeting.d.ts.map +1 -0
- package/dist/extensions/plugin-sandbox-bootstrap.js +211 -211
- package/dist/extensions/tools/definitions.d.ts +1 -1
- package/dist/extensions/tools/definitions.d.ts.map +1 -1
- package/dist/extensions/tools/executors/apply-patch.d.ts +3 -1
- package/dist/extensions/tools/executors/apply-patch.d.ts.map +1 -1
- package/dist/extensions/tools/executors/search.d.ts +1 -1
- package/dist/extensions/tools/executors/search.d.ts.map +1 -1
- package/dist/extensions/tools/index.d.ts +2 -0
- package/dist/extensions/tools/index.d.ts.map +1 -1
- package/dist/extensions/tools/presets.d.ts +26 -43
- package/dist/extensions/tools/presets.d.ts.map +1 -1
- package/dist/extensions/tools/runtime.d.ts +25 -0
- package/dist/extensions/tools/runtime.d.ts.map +1 -0
- package/dist/extensions/tools/schemas.d.ts.map +1 -1
- package/dist/extensions/tools/team/team-tools.d.ts +1 -0
- package/dist/extensions/tools/team/team-tools.d.ts.map +1 -1
- package/dist/hooks/hook-file-hooks.d.ts +4 -1
- package/dist/hooks/hook-file-hooks.d.ts.map +1 -1
- package/dist/hooks/index.d.ts +0 -1
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/subprocess.d.ts +8 -1
- package/dist/hooks/subprocess.d.ts.map +1 -1
- package/dist/hub/browser-websocket.d.ts +18 -0
- package/dist/hub/browser-websocket.d.ts.map +1 -0
- package/dist/hub/client.d.ts +45 -0
- package/dist/hub/client.d.ts.map +1 -0
- package/dist/hub/connect.d.ts +15 -0
- package/dist/hub/connect.d.ts.map +1 -0
- package/dist/hub/daemon-entry.d.ts +2 -0
- package/dist/hub/daemon-entry.d.ts.map +1 -0
- package/dist/hub/daemon-entry.js +1045 -0
- package/dist/hub/daemon.d.ts +5 -0
- package/dist/hub/daemon.d.ts.map +1 -0
- package/dist/hub/defaults.d.ts +13 -0
- package/dist/hub/defaults.d.ts.map +1 -0
- package/dist/hub/discovery.d.ts +29 -0
- package/dist/hub/discovery.d.ts.map +1 -0
- package/dist/hub/index.d.ts +15 -0
- package/dist/hub/index.d.ts.map +1 -0
- package/dist/hub/index.js +1044 -0
- package/dist/hub/native-transport.d.ts +17 -0
- package/dist/hub/native-transport.d.ts.map +1 -0
- package/dist/hub/runtime-handlers.d.ts +11 -0
- package/dist/hub/runtime-handlers.d.ts.map +1 -0
- package/dist/hub/server.d.ts +86 -0
- package/dist/hub/server.d.ts.map +1 -0
- package/dist/hub/session-client.d.ts +87 -0
- package/dist/hub/session-client.d.ts.map +1 -0
- package/dist/hub/start-shared-server.d.ts +19 -0
- package/dist/hub/start-shared-server.d.ts.map +1 -0
- package/dist/hub/transport.d.ts +8 -0
- package/dist/hub/transport.d.ts.map +1 -0
- package/dist/hub/ui-client.d.ts +44 -0
- package/dist/hub/ui-client.d.ts.map +1 -0
- package/dist/hub/workspace.d.ts +4 -0
- package/dist/hub/workspace.d.ts.map +1 -0
- package/dist/index.d.ts +26 -15
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +498 -476
- package/dist/llms/configured-provider-registry.d.ts +28 -0
- package/dist/llms/configured-provider-registry.d.ts.map +1 -0
- package/dist/llms/provider-defaults.d.ts +27 -0
- package/dist/llms/provider-defaults.d.ts.map +1 -0
- package/dist/llms/provider-settings.d.ts +202 -0
- package/dist/llms/provider-settings.d.ts.map +1 -0
- package/dist/llms/runtime-config.d.ts +4 -0
- package/dist/llms/runtime-config.d.ts.map +1 -0
- package/dist/llms/runtime-registry.d.ts +20 -0
- package/dist/llms/runtime-registry.d.ts.map +1 -0
- package/dist/llms/runtime-types.d.ts +85 -0
- package/dist/llms/runtime-types.d.ts.map +1 -0
- package/dist/runtime/host.d.ts +1 -2
- package/dist/runtime/host.d.ts.map +1 -1
- package/dist/runtime/rules.d.ts +1 -0
- package/dist/runtime/rules.d.ts.map +1 -1
- package/dist/runtime/runtime-builder.d.ts.map +1 -1
- package/dist/runtime/runtime-host.d.ts +22 -24
- package/dist/runtime/runtime-host.d.ts.map +1 -1
- package/dist/runtime/runtime-oauth-token-manager.d.ts.map +1 -1
- package/dist/runtime/session-runtime.d.ts +1 -19
- package/dist/runtime/session-runtime.d.ts.map +1 -1
- package/dist/services/global-settings.d.ts +12 -0
- package/dist/services/global-settings.d.ts.map +1 -0
- package/dist/services/local-runtime-bootstrap.d.ts +9 -3
- package/dist/services/local-runtime-bootstrap.d.ts.map +1 -1
- package/dist/services/plugin-tools.d.ts +16 -0
- package/dist/services/plugin-tools.d.ts.map +1 -0
- package/dist/services/providers/local-provider-registry.d.ts +4 -4
- package/dist/services/providers/local-provider-registry.d.ts.map +1 -1
- package/dist/services/providers/local-provider-service.d.ts +13 -13
- package/dist/services/providers/local-provider-service.d.ts.map +1 -1
- package/dist/services/session-data.d.ts +1 -1
- package/dist/services/session-data.d.ts.map +1 -1
- package/dist/services/storage/provider-settings-legacy-migration.d.ts +1 -1
- package/dist/services/storage/provider-settings-legacy-migration.d.ts.map +1 -1
- package/dist/services/telemetry/index.js +28 -15
- package/dist/services/workspace-manifest.d.ts +11 -0
- package/dist/services/workspace-manifest.d.ts.map +1 -1
- package/dist/session/persistence-service.d.ts +11 -23
- package/dist/session/persistence-service.d.ts.map +1 -1
- package/dist/session/session-manifest-store.d.ts +22 -0
- package/dist/session/session-manifest-store.d.ts.map +1 -0
- package/dist/session/session-row.d.ts +93 -0
- package/dist/session/session-row.d.ts.map +1 -0
- package/dist/session/session-service.d.ts +2 -102
- package/dist/session/session-service.d.ts.map +1 -1
- package/dist/session/subagent-session-manager.d.ts +36 -0
- package/dist/session/subagent-session-manager.d.ts.map +1 -0
- package/dist/session/team-persistence-store.d.ts +24 -0
- package/dist/session/team-persistence-store.d.ts.map +1 -0
- package/dist/transports/hub.d.ts +47 -0
- package/dist/transports/hub.d.ts.map +1 -0
- package/dist/transports/local.d.ts +10 -6
- package/dist/transports/local.d.ts.map +1 -1
- package/dist/transports/remote.d.ts +10 -0
- package/dist/transports/remote.d.ts.map +1 -0
- package/dist/transports/runtime-host-support.d.ts +3 -2
- package/dist/transports/runtime-host-support.d.ts.map +1 -1
- package/dist/types/chat-schema.d.ts +10 -12
- package/dist/types/chat-schema.d.ts.map +1 -1
- package/dist/types/config.d.ts +8 -7
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/provider-settings.d.ts +4 -5
- package/dist/types/provider-settings.d.ts.map +1 -1
- package/dist/types/session.d.ts +2 -1
- package/dist/types/session.d.ts.map +1 -1
- package/dist/types.d.ts +8 -1
- package/dist/types.d.ts.map +1 -1
- package/package.json +20 -6
- package/src/ClineCore.ts +68 -40
- package/src/account/index.ts +3 -3
- package/src/account/rpc.ts +12 -12
- package/src/cron/index.ts +5 -0
- package/src/cron/resource-limiter.ts +46 -0
- package/src/cron/schedule-command-service.ts +193 -0
- package/src/cron/schedule-service.ts +703 -0
- package/src/cron/scheduler.ts +637 -0
- package/src/cron/sqlite-schedule-store.ts +708 -0
- package/src/extensions/config/agent-config-loader.ts +17 -7
- package/src/extensions/config/runtime-commands.ts +6 -0
- package/src/extensions/config/user-instruction-config-loader.ts +1 -0
- package/src/extensions/context/agentic-compaction.ts +3 -3
- package/src/extensions/context/basic-compaction.ts +2 -2
- package/src/extensions/context/compaction-shared.ts +5 -4
- package/src/extensions/context/compaction.ts +3 -3
- package/src/extensions/plugin/plugin-config-loader.ts +17 -2
- package/src/extensions/plugin/plugin-loader.ts +48 -4
- package/src/extensions/plugin/plugin-module-import.ts +0 -2
- package/src/extensions/plugin/plugin-sandbox-bootstrap.ts +93 -39
- package/src/extensions/plugin/plugin-sandbox.ts +47 -27
- package/src/extensions/plugin/plugin-targeting.ts +32 -0
- package/src/extensions/tools/definitions.ts +30 -49
- package/src/extensions/tools/executors/apply-patch.ts +69 -80
- package/src/extensions/tools/executors/search.ts +195 -3
- package/src/extensions/tools/index.ts +10 -0
- package/src/extensions/tools/presets.ts +31 -46
- package/src/extensions/tools/runtime.ts +261 -0
- package/src/extensions/tools/schemas.ts +4 -2
- package/src/extensions/tools/team/team-tools.ts +21 -0
- package/src/hooks/hook-file-hooks.ts +8 -2
- package/src/hooks/index.ts +0 -7
- package/src/hooks/subprocess-runner.ts +1 -1
- package/src/hooks/subprocess.ts +9 -0
- package/src/hub/browser-websocket.ts +137 -0
- package/src/hub/client.ts +574 -0
- package/src/hub/connect.ts +156 -0
- package/src/hub/daemon-entry.ts +87 -0
- package/src/hub/daemon.ts +181 -0
- package/src/hub/defaults.ts +43 -0
- package/src/hub/discovery.ts +247 -0
- package/src/hub/index.ts +14 -0
- package/src/hub/native-transport.ts +31 -0
- package/src/hub/runtime-handlers.ts +140 -0
- package/src/hub/server.ts +1888 -0
- package/src/hub/session-client.ts +460 -0
- package/src/hub/start-shared-server.ts +58 -0
- package/src/hub/transport.ts +14 -0
- package/src/hub/ui-client.ts +122 -0
- package/src/hub/workspace.ts +19 -0
- package/src/index.ts +124 -68
- package/src/llms/configured-provider-registry.ts +193 -0
- package/src/llms/provider-defaults.ts +637 -0
- package/src/llms/provider-settings.ts +263 -0
- package/src/llms/runtime-config.ts +43 -0
- package/src/llms/runtime-registry.ts +171 -0
- package/src/llms/runtime-types.ts +121 -0
- package/src/runtime/host.ts +107 -269
- package/src/runtime/index.ts +1 -0
- package/src/runtime/rules.ts +12 -0
- package/src/runtime/runtime-builder.ts +24 -8
- package/src/runtime/runtime-host.ts +89 -61
- package/src/runtime/runtime-oauth-token-manager.ts +11 -15
- package/src/runtime/session-runtime.ts +0 -24
- package/src/services/global-settings.ts +122 -0
- package/src/services/local-runtime-bootstrap.ts +51 -13
- package/src/services/plugin-tools.ts +85 -0
- package/src/services/providers/local-provider-registry.ts +6 -6
- package/src/services/providers/local-provider-service.ts +42 -37
- package/src/services/session-data.ts +15 -9
- package/src/services/storage/provider-settings-legacy-migration.ts +6 -4
- package/src/services/storage/provider-settings-manager.ts +1 -1
- package/src/services/workspace-manifest.ts +18 -0
- package/src/session/file-session-service.ts +1 -1
- package/src/session/index.ts +6 -27
- package/src/session/persistence-service.ts +119 -504
- package/src/session/session-manifest-store.ts +158 -0
- package/src/session/session-row.ts +199 -0
- package/src/session/session-service.ts +17 -376
- package/src/session/session-team-coordination.ts +1 -1
- package/src/session/subagent-session-manager.ts +397 -0
- package/src/session/team-persistence-store.ts +176 -0
- package/src/transports/hub.ts +656 -0
- package/src/transports/local.ts +135 -40
- package/src/transports/remote.ts +26 -0
- package/src/transports/runtime-host-support.ts +63 -9
- package/src/types/chat-schema.ts +4 -5
- package/src/types/config.ts +8 -7
- package/src/types/provider-settings.ts +11 -7
- package/src/types/session.ts +2 -4
- package/src/types.ts +27 -1
- package/dist/hooks/persistent.d.ts +0 -64
- package/dist/hooks/persistent.d.ts.map +0 -1
- package/dist/runtime/rpc-runtime-ensure.d.ts +0 -65
- package/dist/runtime/rpc-runtime-ensure.d.ts.map +0 -1
- package/dist/runtime/rpc-spawn-lease.d.ts +0 -8
- package/dist/runtime/rpc-spawn-lease.d.ts.map +0 -1
- package/dist/session/rpc-session-service.d.ts +0 -16
- package/dist/session/rpc-session-service.d.ts.map +0 -1
- package/dist/session/sqlite-rpc-session-backend.d.ts +0 -31
- package/dist/session/sqlite-rpc-session-backend.d.ts.map +0 -1
- package/dist/transports/rpc.d.ts +0 -51
- package/dist/transports/rpc.d.ts.map +0 -1
- package/src/ClineCore.test.ts +0 -226
- package/src/account/cline-account-service.test.ts +0 -185
- package/src/account/featurebase-token.test.ts +0 -175
- package/src/account/rpc.test.ts +0 -63
- package/src/auth/bounded-ttl-cache.test.ts +0 -38
- package/src/auth/client.test.ts +0 -69
- package/src/auth/cline.test.ts +0 -267
- package/src/auth/codex.test.ts +0 -170
- package/src/auth/oca.test.ts +0 -340
- package/src/auth/server.test.ts +0 -287
- package/src/auth/utils.test.ts +0 -128
- package/src/extensions/config/agent-config-loader.test.ts +0 -236
- package/src/extensions/config/hooks-config-loader.test.ts +0 -20
- package/src/extensions/config/runtime-commands.test.ts +0 -115
- package/src/extensions/config/unified-config-file-watcher.test.ts +0 -196
- package/src/extensions/config/user-instruction-config-loader.test.ts +0 -246
- package/src/extensions/context/compaction.test.ts +0 -483
- package/src/extensions/mcp/config-loader.test.ts +0 -238
- package/src/extensions/mcp/manager.test.ts +0 -105
- package/src/extensions/plugin/plugin-config-loader.test.ts +0 -184
- package/src/extensions/plugin/plugin-loader.test.ts +0 -292
- package/src/extensions/plugin/plugin-sandbox.test.ts +0 -423
- package/src/extensions/tools/definitions.test.ts +0 -780
- package/src/extensions/tools/executors/bash.test.ts +0 -87
- package/src/extensions/tools/executors/editor.test.ts +0 -35
- package/src/extensions/tools/executors/file-read.test.ts +0 -125
- package/src/extensions/tools/model-tool-routing.test.ts +0 -86
- package/src/extensions/tools/presets.test.ts +0 -70
- package/src/extensions/tools/team/multi-agent.lifecycle.test.ts +0 -455
- package/src/extensions/tools/team/spawn-agent-tool.test.ts +0 -381
- package/src/extensions/tools/team/team-tools.test.ts +0 -918
- package/src/hooks/checkpoint-hooks.test.ts +0 -168
- package/src/hooks/hook-file-hooks.test.ts +0 -311
- package/src/hooks/persistent.ts +0 -661
- package/src/runtime/history.test.ts +0 -114
- package/src/runtime/host.test.ts +0 -230
- package/src/runtime/rpc-runtime-ensure.test.ts +0 -123
- package/src/runtime/rpc-runtime-ensure.ts +0 -659
- package/src/runtime/rpc-spawn-lease.test.ts +0 -81
- package/src/runtime/rpc-spawn-lease.ts +0 -156
- package/src/runtime/runtime-builder.team-persistence.test.ts +0 -245
- package/src/runtime/runtime-builder.test.ts +0 -615
- package/src/runtime/runtime-oauth-token-manager.test.ts +0 -137
- package/src/runtime/runtime-parity.test.ts +0 -143
- package/src/services/providers/local-provider-service.test.ts +0 -1062
- package/src/services/session-data.test.ts +0 -160
- package/src/services/storage/provider-settings-legacy-migration.test.ts +0 -424
- package/src/services/storage/provider-settings-manager.test.ts +0 -191
- package/src/services/telemetry/OpenTelemetryAdapter.test.ts +0 -157
- package/src/services/telemetry/OpenTelemetryProvider.test.ts +0 -326
- package/src/services/telemetry/TelemetryLoggerSink.test.ts +0 -42
- package/src/services/telemetry/TelemetryService.test.ts +0 -134
- package/src/services/telemetry/distinct-id.test.ts +0 -57
- package/src/services/workspace/file-indexer.d.ts +0 -11
- package/src/services/workspace/file-indexer.test.ts +0 -156
- package/src/services/workspace/mention-enricher.test.ts +0 -106
- package/src/session/persistence-service.test.ts +0 -300
- package/src/session/rpc-session-service.ts +0 -114
- package/src/session/session-service.team-persistence.test.ts +0 -48
- package/src/session/sqlite-rpc-session-backend.ts +0 -301
- package/src/transports/local.e2e.test.ts +0 -380
- package/src/transports/local.test.ts +0 -2559
- package/src/transports/rpc.test.ts +0 -82
- package/src/transports/rpc.ts +0 -665
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import type { AgentConfig, Tool } from "@clinebot/shared";
|
|
2
|
+
import { resolveAgentPluginPaths } from "../extensions/plugin/plugin-config-loader";
|
|
3
|
+
import { loadAgentPluginsFromPathsWithDiagnostics } from "../extensions/plugin/plugin-loader";
|
|
4
|
+
import { resolveDisabledToolNames } from "./global-settings";
|
|
5
|
+
|
|
6
|
+
type AgentExtension = NonNullable<AgentConfig["extensions"]>[number];
|
|
7
|
+
type AgentExtensionApi = Parameters<NonNullable<AgentExtension["setup"]>>[0];
|
|
8
|
+
|
|
9
|
+
export interface PluginToolSummary {
|
|
10
|
+
name: string;
|
|
11
|
+
pluginName: string;
|
|
12
|
+
path: string;
|
|
13
|
+
source: "workspace-plugin" | "global-plugin";
|
|
14
|
+
enabled: boolean;
|
|
15
|
+
description?: string;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
function collectRegisteredTools(
|
|
19
|
+
extension: AgentExtension,
|
|
20
|
+
workspaceInfo?: { rootPath: string },
|
|
21
|
+
): Tool[] {
|
|
22
|
+
if (!extension.setup) {
|
|
23
|
+
return [];
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
const tools: Tool[] = [];
|
|
27
|
+
const api: AgentExtensionApi = {
|
|
28
|
+
registerTool: (tool) => tools.push(tool),
|
|
29
|
+
registerCommand: () => {},
|
|
30
|
+
registerMessageBuilder: () => {},
|
|
31
|
+
registerProvider: () => {},
|
|
32
|
+
};
|
|
33
|
+
extension.setup(api, { workspaceInfo });
|
|
34
|
+
return tools;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export async function listPluginTools(input: {
|
|
38
|
+
workspacePath: string;
|
|
39
|
+
cwd?: string;
|
|
40
|
+
disabledToolNames?: ReadonlyArray<string>;
|
|
41
|
+
providerId?: string;
|
|
42
|
+
modelId?: string;
|
|
43
|
+
}): Promise<PluginToolSummary[]> {
|
|
44
|
+
const pluginPaths = resolveAgentPluginPaths({
|
|
45
|
+
workspacePath: input.workspacePath,
|
|
46
|
+
cwd: input.cwd,
|
|
47
|
+
});
|
|
48
|
+
const disabled = resolveDisabledToolNames(input.disabledToolNames);
|
|
49
|
+
const summaries: PluginToolSummary[] = [];
|
|
50
|
+
|
|
51
|
+
for (const pluginPath of pluginPaths) {
|
|
52
|
+
const report = await loadAgentPluginsFromPathsWithDiagnostics(
|
|
53
|
+
[pluginPath],
|
|
54
|
+
{
|
|
55
|
+
cwd: input.cwd,
|
|
56
|
+
providerId: input.providerId,
|
|
57
|
+
modelId: input.modelId,
|
|
58
|
+
},
|
|
59
|
+
);
|
|
60
|
+
for (const extension of report.plugins) {
|
|
61
|
+
for (const tool of collectRegisteredTools(extension, {
|
|
62
|
+
rootPath: input.workspacePath,
|
|
63
|
+
})) {
|
|
64
|
+
summaries.push({
|
|
65
|
+
name: tool.name,
|
|
66
|
+
pluginName: extension.name,
|
|
67
|
+
path: pluginPath,
|
|
68
|
+
source: pluginPath.startsWith(input.workspacePath)
|
|
69
|
+
? "workspace-plugin"
|
|
70
|
+
: "global-plugin",
|
|
71
|
+
enabled: !disabled.has(tool.name),
|
|
72
|
+
description: tool.description?.trim() || undefined,
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
return summaries.sort((left, right) => {
|
|
79
|
+
const nameOrder = left.name.localeCompare(right.name);
|
|
80
|
+
if (nameOrder !== 0) {
|
|
81
|
+
return nameOrder;
|
|
82
|
+
}
|
|
83
|
+
return left.path.localeCompare(right.path);
|
|
84
|
+
});
|
|
85
|
+
}
|
|
@@ -2,7 +2,7 @@ import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
|
2
2
|
import { mkdir, readFile, writeFile } from "node:fs/promises";
|
|
3
3
|
import { dirname, join } from "node:path";
|
|
4
4
|
import * as LlmsModels from "@clinebot/llms";
|
|
5
|
-
import type {
|
|
5
|
+
import type { ProviderCapability, ProviderModel } from "@clinebot/shared";
|
|
6
6
|
import type { ProviderSettingsManager } from "../storage/provider-settings-manager";
|
|
7
7
|
|
|
8
8
|
export type StoredModelsFile = {
|
|
@@ -14,7 +14,7 @@ export type StoredModelsFile = {
|
|
|
14
14
|
name: string;
|
|
15
15
|
baseUrl: string;
|
|
16
16
|
defaultModelId?: string;
|
|
17
|
-
capabilities?:
|
|
17
|
+
capabilities?: ProviderCapability[];
|
|
18
18
|
modelsSourceUrl?: string;
|
|
19
19
|
};
|
|
20
20
|
models: Record<
|
|
@@ -108,14 +108,14 @@ export async function writeModelsFile(
|
|
|
108
108
|
await writeFile(filePath, `${JSON.stringify(state, null, 2)}\n`, "utf8");
|
|
109
109
|
}
|
|
110
110
|
|
|
111
|
-
export function
|
|
111
|
+
export function toProviderModel(
|
|
112
112
|
modelId: string,
|
|
113
113
|
info: {
|
|
114
114
|
name?: string;
|
|
115
115
|
capabilities?: string[];
|
|
116
116
|
thinkingConfig?: unknown;
|
|
117
117
|
},
|
|
118
|
-
):
|
|
118
|
+
): ProviderModel {
|
|
119
119
|
return {
|
|
120
120
|
id: modelId,
|
|
121
121
|
name: info.name ?? modelId,
|
|
@@ -127,7 +127,7 @@ export function toRpcProviderModel(
|
|
|
127
127
|
}
|
|
128
128
|
|
|
129
129
|
function toProviderCapabilities(
|
|
130
|
-
capabilities:
|
|
130
|
+
capabilities: ProviderCapability[] | undefined,
|
|
131
131
|
): Array<"reasoning" | "prompt-cache" | "tools"> | undefined {
|
|
132
132
|
if (!capabilities || capabilities.length === 0) {
|
|
133
133
|
return undefined;
|
|
@@ -146,7 +146,7 @@ function toProviderCapabilities(
|
|
|
146
146
|
}
|
|
147
147
|
|
|
148
148
|
function toModelCapabilities(
|
|
149
|
-
capabilities:
|
|
149
|
+
capabilities: ProviderCapability[] | undefined,
|
|
150
150
|
): Array<
|
|
151
151
|
"streaming" | "tools" | "reasoning" | "prompt-cache" | "images" | "files"
|
|
152
152
|
> {
|
|
@@ -1,23 +1,28 @@
|
|
|
1
1
|
import * as LlmsModels from "@clinebot/llms";
|
|
2
|
-
import * as LlmsProviders from "@clinebot/llms";
|
|
3
2
|
import type {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
3
|
+
AddProviderActionRequest,
|
|
4
|
+
OAuthProviderId,
|
|
5
|
+
ProviderCapability,
|
|
6
|
+
ProviderListItem,
|
|
7
|
+
ProviderModel,
|
|
8
|
+
SaveProviderSettingsActionRequest,
|
|
10
9
|
} from "@clinebot/shared";
|
|
11
10
|
import { createOAuthClientCallbacks } from "../../auth/client";
|
|
12
11
|
import { loginClineOAuth } from "../../auth/cline";
|
|
13
12
|
import { loginOpenAICodex } from "../../auth/codex";
|
|
14
13
|
import { loginOcaOAuth } from "../../auth/oca";
|
|
14
|
+
import { resolveProviderConfig } from "../../llms/provider-defaults";
|
|
15
|
+
import type {
|
|
16
|
+
ModelInfo,
|
|
17
|
+
ProviderConfig,
|
|
18
|
+
ProviderSettings,
|
|
19
|
+
} from "../../llms/provider-settings";
|
|
15
20
|
import type { ProviderSettingsManager } from "../storage/provider-settings-manager";
|
|
16
21
|
import {
|
|
17
22
|
readModelsFile,
|
|
18
23
|
registerCustomProvider,
|
|
19
24
|
resolveModelsRegistryPath,
|
|
20
|
-
|
|
25
|
+
toProviderModel,
|
|
21
26
|
writeModelsFile,
|
|
22
27
|
} from "./local-provider-registry";
|
|
23
28
|
|
|
@@ -33,7 +38,7 @@ export interface UpdateLocalProviderRequest {
|
|
|
33
38
|
models?: string[];
|
|
34
39
|
defaultModelId?: string | null;
|
|
35
40
|
modelsSourceUrl?: string | null;
|
|
36
|
-
capabilities?:
|
|
41
|
+
capabilities?: ProviderCapability[] | null;
|
|
37
42
|
}
|
|
38
43
|
|
|
39
44
|
export interface DeleteLocalProviderRequest {
|
|
@@ -86,12 +91,12 @@ function stableColor(id: string): string {
|
|
|
86
91
|
return palette[hash % palette.length];
|
|
87
92
|
}
|
|
88
93
|
|
|
89
|
-
function
|
|
90
|
-
modelMap: Record<string,
|
|
91
|
-
):
|
|
94
|
+
function toSortedProviderModels(
|
|
95
|
+
modelMap: Record<string, ModelInfo>,
|
|
96
|
+
): ProviderModel[] {
|
|
92
97
|
return Object.entries(modelMap)
|
|
93
98
|
.sort(([a], [b]) => a.localeCompare(b))
|
|
94
|
-
.map(([modelId, info]) =>
|
|
99
|
+
.map(([modelId, info]) => toProviderModel(modelId, info));
|
|
95
100
|
}
|
|
96
101
|
|
|
97
102
|
// --- Model ID parsing ---
|
|
@@ -163,14 +168,14 @@ async function fetchModelIdsFromSource(
|
|
|
163
168
|
|
|
164
169
|
async function resolveProviderModelMap(
|
|
165
170
|
providerId: string,
|
|
166
|
-
config?:
|
|
167
|
-
): Promise<Record<string,
|
|
171
|
+
config?: ProviderConfig,
|
|
172
|
+
): Promise<Record<string, ModelInfo>> {
|
|
168
173
|
const registeredModels = await LlmsModels.getModelsForProvider(providerId);
|
|
169
174
|
if (!config) {
|
|
170
175
|
return registeredModels;
|
|
171
176
|
}
|
|
172
177
|
|
|
173
|
-
const resolved = await
|
|
178
|
+
const resolved = await resolveProviderConfig(
|
|
174
179
|
providerId,
|
|
175
180
|
{
|
|
176
181
|
loadPrivateOnAuth: true,
|
|
@@ -202,7 +207,7 @@ function normalizeHeaders(
|
|
|
202
207
|
|
|
203
208
|
function buildProviderModels(
|
|
204
209
|
modelIds: string[],
|
|
205
|
-
capabilities:
|
|
210
|
+
capabilities: ProviderCapability[] | undefined,
|
|
206
211
|
) {
|
|
207
212
|
const supportsVision = capabilities?.includes("vision") ?? false;
|
|
208
213
|
const supportsReasoning = capabilities?.includes("reasoning") ?? false;
|
|
@@ -257,7 +262,7 @@ function removeProviderFromSettingsState(
|
|
|
257
262
|
|
|
258
263
|
export async function addLocalProvider(
|
|
259
264
|
manager: ProviderSettingsManager,
|
|
260
|
-
request: Omit<
|
|
265
|
+
request: Omit<AddProviderActionRequest, "action">,
|
|
261
266
|
): Promise<{
|
|
262
267
|
providerId: string;
|
|
263
268
|
settingsPath: string;
|
|
@@ -508,17 +513,17 @@ export async function deleteLocalProvider(
|
|
|
508
513
|
|
|
509
514
|
export async function listLocalProviders(
|
|
510
515
|
manager: ProviderSettingsManager,
|
|
511
|
-
): Promise<{ providers:
|
|
516
|
+
): Promise<{ providers: ProviderListItem[]; settingsPath: string }> {
|
|
512
517
|
const state = manager.read();
|
|
513
518
|
const ids = LlmsModels.getProviderIds().sort((a, b) => a.localeCompare(b));
|
|
514
519
|
|
|
515
520
|
const providers = await Promise.all(
|
|
516
|
-
ids.map(async (id): Promise<
|
|
521
|
+
ids.map(async (id): Promise<ProviderListItem> => {
|
|
517
522
|
const [info, registeredModels] = await Promise.all([
|
|
518
523
|
LlmsModels.getProvider(id),
|
|
519
524
|
LlmsModels.getModelsForProvider(id),
|
|
520
525
|
]);
|
|
521
|
-
const modelList =
|
|
526
|
+
const modelList = toSortedProviderModels(registeredModels);
|
|
522
527
|
const persistedSettings = state.providers[id]?.settings;
|
|
523
528
|
const name = info?.name ?? titleCaseFromId(id);
|
|
524
529
|
return {
|
|
@@ -548,17 +553,17 @@ export async function listLocalProviders(
|
|
|
548
553
|
|
|
549
554
|
export async function getLocalProviderModels(
|
|
550
555
|
providerId: string,
|
|
551
|
-
config?:
|
|
552
|
-
): Promise<{ providerId: string; models:
|
|
556
|
+
config?: ProviderConfig,
|
|
557
|
+
): Promise<{ providerId: string; models: ProviderModel[] }> {
|
|
553
558
|
const id = providerId.trim();
|
|
554
559
|
const modelMap = await resolveProviderModelMap(id, config);
|
|
555
|
-
const models =
|
|
560
|
+
const models = toSortedProviderModels(modelMap);
|
|
556
561
|
return { providerId: id, models };
|
|
557
562
|
}
|
|
558
563
|
|
|
559
564
|
export function saveLocalProviderSettings(
|
|
560
565
|
manager: ProviderSettingsManager,
|
|
561
|
-
request: Omit<
|
|
566
|
+
request: Omit<SaveProviderSettingsActionRequest, "action">,
|
|
562
567
|
): { providerId: string; enabled: boolean; settingsPath: string } {
|
|
563
568
|
const providerId = request.providerId.trim();
|
|
564
569
|
|
|
@@ -621,7 +626,7 @@ export function saveLocalProviderSettings(
|
|
|
621
626
|
return { providerId, enabled: true, settingsPath: manager.getFilePath() };
|
|
622
627
|
}
|
|
623
628
|
|
|
624
|
-
export function normalizeOAuthProvider(provider: string):
|
|
629
|
+
export function normalizeOAuthProvider(provider: string): OAuthProviderId {
|
|
625
630
|
const normalized = provider.trim().toLowerCase();
|
|
626
631
|
if (normalized === "codex" || normalized === "openai-codex")
|
|
627
632
|
return "openai-codex";
|
|
@@ -632,7 +637,7 @@ export function normalizeOAuthProvider(provider: string): RpcOAuthProviderId {
|
|
|
632
637
|
}
|
|
633
638
|
|
|
634
639
|
function toProviderApiKey(
|
|
635
|
-
providerId:
|
|
640
|
+
providerId: OAuthProviderId,
|
|
636
641
|
credentials: { access: string },
|
|
637
642
|
): string {
|
|
638
643
|
return providerId === "cline"
|
|
@@ -641,8 +646,8 @@ function toProviderApiKey(
|
|
|
641
646
|
}
|
|
642
647
|
|
|
643
648
|
export async function loginLocalProvider(
|
|
644
|
-
providerId:
|
|
645
|
-
existing:
|
|
649
|
+
providerId: OAuthProviderId,
|
|
650
|
+
existing: ProviderSettings | undefined,
|
|
646
651
|
openUrl: (url: string) => void,
|
|
647
652
|
): Promise<{
|
|
648
653
|
access: string;
|
|
@@ -671,28 +676,28 @@ export async function loginLocalProvider(
|
|
|
671
676
|
|
|
672
677
|
export function saveLocalProviderOAuthCredentials(
|
|
673
678
|
manager: ProviderSettingsManager,
|
|
674
|
-
providerId:
|
|
675
|
-
existing:
|
|
679
|
+
providerId: OAuthProviderId,
|
|
680
|
+
existing: ProviderSettings | undefined,
|
|
676
681
|
credentials: {
|
|
677
682
|
access: string;
|
|
678
683
|
refresh: string;
|
|
679
684
|
expires: number;
|
|
680
685
|
accountId?: string;
|
|
681
686
|
},
|
|
682
|
-
):
|
|
687
|
+
): ProviderSettings {
|
|
683
688
|
const auth = {
|
|
684
689
|
...(existing?.auth ?? {}),
|
|
685
690
|
accessToken: toProviderApiKey(providerId, credentials),
|
|
686
691
|
refreshToken: credentials.refresh,
|
|
687
692
|
accountId: credentials.accountId,
|
|
688
693
|
expiresAt: credentials.expires,
|
|
689
|
-
} as
|
|
694
|
+
} as ProviderSettings["auth"] & { expiresAt?: number };
|
|
690
695
|
|
|
691
|
-
const merged:
|
|
696
|
+
const merged: ProviderSettings = {
|
|
692
697
|
...(existing ?? {
|
|
693
|
-
provider: providerId as
|
|
698
|
+
provider: providerId as ProviderSettings["provider"],
|
|
694
699
|
}),
|
|
695
|
-
provider: providerId as
|
|
700
|
+
provider: providerId as ProviderSettings["provider"],
|
|
696
701
|
auth,
|
|
697
702
|
};
|
|
698
703
|
manager.saveProviderSettings(merged, { tokenSource: "oauth" });
|
|
@@ -700,7 +705,7 @@ export function saveLocalProviderOAuthCredentials(
|
|
|
700
705
|
}
|
|
701
706
|
|
|
702
707
|
export function resolveLocalClineAuthToken(
|
|
703
|
-
settings:
|
|
708
|
+
settings: ProviderSettings | undefined,
|
|
704
709
|
): string | undefined {
|
|
705
710
|
const token = settings?.auth?.accessToken?.trim() || settings?.apiKey?.trim();
|
|
706
711
|
return token && token.length > 0 ? token : undefined;
|
|
@@ -12,7 +12,7 @@ import {
|
|
|
12
12
|
type SessionManifest,
|
|
13
13
|
SessionManifestSchema,
|
|
14
14
|
} from "../session/session-manifest";
|
|
15
|
-
import type { SessionRow } from "../session/session-
|
|
15
|
+
import type { SessionRow } from "../session/session-row";
|
|
16
16
|
import type { SessionSource, SessionStatus } from "../types/common";
|
|
17
17
|
import type { StoredMessageWithMetadata } from "../types/session";
|
|
18
18
|
import type { SessionRecord } from "../types/sessions";
|
|
@@ -154,22 +154,28 @@ export function withLatestAssistantTurnMetadata(
|
|
|
154
154
|
}
|
|
155
155
|
|
|
156
156
|
const usage = result.usage;
|
|
157
|
+
const lastAssistantIndexForUsage =
|
|
158
|
+
assistantIndexes[assistantIndexes.length - 1];
|
|
157
159
|
for (const targetIndex of assistantIndexes) {
|
|
158
160
|
const target = next[targetIndex];
|
|
161
|
+
const metrics =
|
|
162
|
+
targetIndex === lastAssistantIndexForUsage
|
|
163
|
+
? {
|
|
164
|
+
...(target.metrics ?? {}),
|
|
165
|
+
inputTokens: usage.inputTokens,
|
|
166
|
+
outputTokens: usage.outputTokens,
|
|
167
|
+
cacheReadTokens: usage.cacheReadTokens ?? 0,
|
|
168
|
+
cacheWriteTokens: usage.cacheWriteTokens ?? 0,
|
|
169
|
+
cost: usage.totalCost,
|
|
170
|
+
}
|
|
171
|
+
: target.metrics;
|
|
159
172
|
next[targetIndex] = {
|
|
160
173
|
...normalizeStoredMessageModelMetadata(target, {
|
|
161
174
|
id: result.model.id,
|
|
162
175
|
provider: result.model.provider,
|
|
163
176
|
family: result.model.info?.family,
|
|
164
177
|
}),
|
|
165
|
-
metrics: {
|
|
166
|
-
...(target.metrics ?? {}),
|
|
167
|
-
inputTokens: usage.inputTokens,
|
|
168
|
-
outputTokens: usage.outputTokens,
|
|
169
|
-
cacheReadTokens: usage.cacheReadTokens ?? 0,
|
|
170
|
-
cacheWriteTokens: usage.cacheWriteTokens ?? 0,
|
|
171
|
-
cost: usage.totalCost,
|
|
172
|
-
},
|
|
178
|
+
...(metrics ? { metrics } : {}),
|
|
173
179
|
ts: target.ts ?? result.endedAt.getTime(),
|
|
174
180
|
};
|
|
175
181
|
}
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
2
2
|
import { dirname, join } from "node:path";
|
|
3
3
|
import * as LlmsModels from "@clinebot/llms";
|
|
4
|
-
import * as LlmsProviders from "@clinebot/llms";
|
|
5
4
|
import { resolveClineDataDir } from "@clinebot/shared/storage";
|
|
6
|
-
import
|
|
7
|
-
|
|
5
|
+
import {
|
|
6
|
+
emptyStoredProviderSettings,
|
|
7
|
+
type ProviderSettings,
|
|
8
|
+
ProviderSettingsSchemaTyped as ProviderSettingsSchema,
|
|
9
|
+
} from "../../types/provider-settings";
|
|
8
10
|
import type { ProviderSettingsManager } from "./provider-settings-manager";
|
|
9
11
|
|
|
10
12
|
type LegacyMode = "plan" | "act";
|
|
@@ -659,7 +661,7 @@ function buildLegacyProviderSettings(
|
|
|
659
661
|
...(timeout ? { timeout } : {}),
|
|
660
662
|
...providerSpecific,
|
|
661
663
|
};
|
|
662
|
-
const parsed =
|
|
664
|
+
const parsed = ProviderSettingsSchema.safeParse(settings);
|
|
663
665
|
if (!parsed.success) {
|
|
664
666
|
return undefined;
|
|
665
667
|
}
|
|
@@ -52,3 +52,21 @@ export async function buildWorkspaceMetadata(cwd: string): Promise<string> {
|
|
|
52
52
|
const workspaceInfo = await generateWorkspaceInfo(cwd);
|
|
53
53
|
return processWorkspaceInfo(workspaceInfo);
|
|
54
54
|
}
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Generate workspace metadata as both a structured `WorkspaceInfo` object and
|
|
58
|
+
* its pre-serialized string form.
|
|
59
|
+
*
|
|
60
|
+
* Use this instead of calling `buildWorkspaceMetadata` + `generateWorkspaceInfo`
|
|
61
|
+
* separately so the git I/O only happens once.
|
|
62
|
+
*/
|
|
63
|
+
export async function buildWorkspaceMetadataWithInfo(cwd: string): Promise<{
|
|
64
|
+
workspaceInfo: WorkspaceInfo;
|
|
65
|
+
workspaceMetadata: string;
|
|
66
|
+
}> {
|
|
67
|
+
const workspaceInfo = await generateWorkspaceInfo(cwd);
|
|
68
|
+
return {
|
|
69
|
+
workspaceInfo,
|
|
70
|
+
workspaceMetadata: processWorkspaceInfo(workspaceInfo),
|
|
71
|
+
};
|
|
72
|
+
}
|
|
@@ -13,7 +13,7 @@ import type {
|
|
|
13
13
|
SessionPersistenceAdapter,
|
|
14
14
|
} from "./persistence-service";
|
|
15
15
|
import { UnifiedSessionPersistenceService } from "./persistence-service";
|
|
16
|
-
import type { SessionRow } from "./session-
|
|
16
|
+
import type { SessionRow } from "./session-row";
|
|
17
17
|
|
|
18
18
|
interface FileSessionIndex {
|
|
19
19
|
version: 1;
|
package/src/session/index.ts
CHANGED
|
@@ -4,36 +4,10 @@ export {
|
|
|
4
4
|
type WorkspaceManifest,
|
|
5
5
|
WorkspaceManifestSchema,
|
|
6
6
|
} from "@clinebot/shared";
|
|
7
|
-
export type {
|
|
8
|
-
ClineCore,
|
|
9
|
-
ClineCoreOptions,
|
|
10
|
-
ClineCoreStartInput,
|
|
11
|
-
} from "../ClineCore";
|
|
12
|
-
export type { SessionBackend } from "../runtime/host";
|
|
13
|
-
export {
|
|
14
|
-
createRuntimeHost,
|
|
15
|
-
resolveSessionBackend,
|
|
16
|
-
} from "../runtime/host";
|
|
17
|
-
export type {
|
|
18
|
-
LocalRuntimeConfigOverrides,
|
|
19
|
-
LocalRuntimeStartOptions,
|
|
20
|
-
RuntimeHost,
|
|
21
|
-
RuntimeHost as SessionHost,
|
|
22
|
-
RuntimeHostMode,
|
|
23
|
-
RuntimeSessionConfig,
|
|
24
|
-
SendSessionInput,
|
|
25
|
-
SessionAccumulatedUsage,
|
|
26
|
-
StartSessionInput,
|
|
27
|
-
StartSessionResult,
|
|
28
|
-
} from "../runtime/runtime-host";
|
|
29
|
-
export { splitCoreSessionConfig } from "../runtime/runtime-host";
|
|
30
7
|
export {
|
|
31
8
|
generateWorkspaceInfo,
|
|
32
9
|
normalizeWorkspacePath,
|
|
33
10
|
} from "../services/workspace-manifest";
|
|
34
|
-
export { LocalRuntimeHost } from "../transports/local";
|
|
35
|
-
export { RpcRuntimeHost } from "../transports/rpc";
|
|
36
|
-
export { RpcCoreSessionService } from "./rpc-session-service";
|
|
37
11
|
export {
|
|
38
12
|
deriveSubsessionStatus,
|
|
39
13
|
makeSubSessionId,
|
|
@@ -44,8 +18,13 @@ export type { SessionManifest } from "./session-manifest";
|
|
|
44
18
|
export type {
|
|
45
19
|
CreateRootSessionWithArtifactsInput,
|
|
46
20
|
RootSessionArtifacts,
|
|
47
|
-
|
|
21
|
+
SessionRow,
|
|
22
|
+
} from "./session-row";
|
|
48
23
|
export { CoreSessionService } from "./session-service";
|
|
24
|
+
export {
|
|
25
|
+
FileTeamPersistenceStore,
|
|
26
|
+
type FileTeamPersistenceStoreOptions,
|
|
27
|
+
} from "./team-persistence-store";
|
|
49
28
|
export type {
|
|
50
29
|
WorkspaceManager,
|
|
51
30
|
WorkspaceManagerEvent,
|