@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
|
@@ -4,42 +4,54 @@ import type {
|
|
|
4
4
|
ToolApprovalRequest,
|
|
5
5
|
ToolApprovalResult,
|
|
6
6
|
} from "@clinebot/shared";
|
|
7
|
+
import type { ToolExecutors } from "../extensions/tools";
|
|
7
8
|
import type { HookEventPayload } from "../hooks";
|
|
9
|
+
import type { ProviderSettings } from "../llms/provider-settings";
|
|
8
10
|
import type { SessionManifest } from "../session/session-manifest";
|
|
9
11
|
import type { SessionSource } from "../types/common";
|
|
10
12
|
import type { CoreSessionConfig } from "../types/config";
|
|
11
13
|
import type { CoreSessionEvent } from "../types/events";
|
|
12
14
|
import type { SessionRecord } from "../types/sessions";
|
|
13
15
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
}
|
|
16
|
+
type LocalOnlyCoreSessionConfigKeys =
|
|
17
|
+
| "hooks"
|
|
18
|
+
| "logger"
|
|
19
|
+
| "telemetry"
|
|
20
|
+
| "extraTools"
|
|
21
|
+
| "extensions"
|
|
22
|
+
| "onTeamEvent"
|
|
23
|
+
| "onConsecutiveMistakeLimitReached";
|
|
24
|
+
|
|
25
|
+
export type RuntimeSessionConfig = Omit<
|
|
26
|
+
CoreSessionConfig,
|
|
27
|
+
LocalOnlyCoreSessionConfigKeys | "checkpoint" | "compaction"
|
|
28
|
+
> & {
|
|
29
|
+
checkpoint?: Omit<
|
|
30
|
+
NonNullable<CoreSessionConfig["checkpoint"]>,
|
|
31
|
+
"createCheckpoint"
|
|
32
|
+
>;
|
|
33
|
+
compaction?: Omit<NonNullable<CoreSessionConfig["compaction"]>, "compact">;
|
|
34
|
+
};
|
|
33
35
|
|
|
34
|
-
export type LocalRuntimeConfigOverrides =
|
|
36
|
+
export type LocalRuntimeConfigOverrides = Pick<
|
|
35
37
|
CoreSessionConfig,
|
|
36
|
-
|
|
37
|
-
|
|
38
|
+
LocalOnlyCoreSessionConfigKeys
|
|
39
|
+
> & {
|
|
40
|
+
checkpoint?: Pick<
|
|
41
|
+
NonNullable<CoreSessionConfig["checkpoint"]>,
|
|
42
|
+
"createCheckpoint"
|
|
43
|
+
> &
|
|
44
|
+
Partial<NonNullable<CoreSessionConfig["checkpoint"]>>;
|
|
45
|
+
compaction?: Pick<NonNullable<CoreSessionConfig["compaction"]>, "compact"> &
|
|
46
|
+
Partial<NonNullable<CoreSessionConfig["compaction"]>>;
|
|
47
|
+
};
|
|
38
48
|
|
|
39
49
|
export interface LocalRuntimeStartOptions {
|
|
40
50
|
configOverrides?: Partial<LocalRuntimeConfigOverrides>;
|
|
51
|
+
modelCatalogDefaults?: Partial<NonNullable<ProviderSettings["modelCatalog"]>>;
|
|
41
52
|
userInstructionWatcher?: import("../extensions/config").UserInstructionConfigWatcher;
|
|
42
53
|
onTeamRestored?: () => void;
|
|
54
|
+
defaultToolExecutors?: Partial<ToolExecutors>;
|
|
43
55
|
}
|
|
44
56
|
|
|
45
57
|
export interface StartSessionInput {
|
|
@@ -52,8 +64,9 @@ export interface StartSessionInput {
|
|
|
52
64
|
userImages?: string[];
|
|
53
65
|
userFiles?: string[];
|
|
54
66
|
/**
|
|
55
|
-
*
|
|
56
|
-
*
|
|
67
|
+
* Host-local bootstrap options. These are intentionally isolated from the
|
|
68
|
+
* transport-neutral runtime session config so all runtime hosts share the
|
|
69
|
+
* same execution contract while still allowing host-specific preparation.
|
|
57
70
|
*/
|
|
58
71
|
localRuntime?: LocalRuntimeStartOptions;
|
|
59
72
|
toolPolicies?: import("@clinebot/shared").AgentConfig["toolPolicies"];
|
|
@@ -67,26 +80,36 @@ export function splitCoreSessionConfig(config: CoreSessionConfig): {
|
|
|
67
80
|
localRuntime?: LocalRuntimeStartOptions;
|
|
68
81
|
} {
|
|
69
82
|
const {
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
enableTools,
|
|
81
|
-
enableSpawnAgent,
|
|
82
|
-
enableAgentTeams,
|
|
83
|
-
disableMcpSettingsTools,
|
|
84
|
-
teamName,
|
|
85
|
-
missionLogIntervalSteps,
|
|
86
|
-
missionLogIntervalMs,
|
|
87
|
-
...localConfigOverrides
|
|
83
|
+
hooks,
|
|
84
|
+
logger,
|
|
85
|
+
telemetry,
|
|
86
|
+
extraTools,
|
|
87
|
+
extensions,
|
|
88
|
+
onTeamEvent,
|
|
89
|
+
onConsecutiveMistakeLimitReached,
|
|
90
|
+
checkpoint,
|
|
91
|
+
compaction,
|
|
92
|
+
...transportConfig
|
|
88
93
|
} = config;
|
|
89
94
|
|
|
95
|
+
const localConfigOverrides: Partial<LocalRuntimeConfigOverrides> = {};
|
|
96
|
+
if (hooks) localConfigOverrides.hooks = hooks;
|
|
97
|
+
if (logger) localConfigOverrides.logger = logger;
|
|
98
|
+
if (telemetry) localConfigOverrides.telemetry = telemetry;
|
|
99
|
+
if (extraTools) localConfigOverrides.extraTools = extraTools;
|
|
100
|
+
if (extensions) localConfigOverrides.extensions = extensions;
|
|
101
|
+
if (onTeamEvent) localConfigOverrides.onTeamEvent = onTeamEvent;
|
|
102
|
+
if (onConsecutiveMistakeLimitReached) {
|
|
103
|
+
localConfigOverrides.onConsecutiveMistakeLimitReached =
|
|
104
|
+
onConsecutiveMistakeLimitReached;
|
|
105
|
+
}
|
|
106
|
+
if (checkpoint?.createCheckpoint) {
|
|
107
|
+
localConfigOverrides.checkpoint = checkpoint;
|
|
108
|
+
}
|
|
109
|
+
if (compaction?.compact) {
|
|
110
|
+
localConfigOverrides.compaction = compaction;
|
|
111
|
+
}
|
|
112
|
+
|
|
90
113
|
const localRuntime =
|
|
91
114
|
Object.keys(localConfigOverrides).length > 0
|
|
92
115
|
? {
|
|
@@ -97,23 +120,21 @@ export function splitCoreSessionConfig(config: CoreSessionConfig): {
|
|
|
97
120
|
|
|
98
121
|
return {
|
|
99
122
|
config: {
|
|
100
|
-
...
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
missionLogIntervalSteps,
|
|
116
|
-
missionLogIntervalMs,
|
|
123
|
+
...transportConfig,
|
|
124
|
+
...(checkpoint ? { checkpoint: { enabled: checkpoint.enabled } } : {}),
|
|
125
|
+
...(compaction
|
|
126
|
+
? {
|
|
127
|
+
compaction: {
|
|
128
|
+
enabled: compaction.enabled,
|
|
129
|
+
strategy: compaction.strategy,
|
|
130
|
+
thresholdRatio: compaction.thresholdRatio,
|
|
131
|
+
reserveTokens: compaction.reserveTokens,
|
|
132
|
+
preserveRecentTokens: compaction.preserveRecentTokens,
|
|
133
|
+
contextWindowTokens: compaction.contextWindowTokens,
|
|
134
|
+
summarizer: compaction.summarizer,
|
|
135
|
+
},
|
|
136
|
+
}
|
|
137
|
+
: {}),
|
|
117
138
|
},
|
|
118
139
|
...(localRuntime ? { localRuntime } : {}),
|
|
119
140
|
};
|
|
@@ -143,6 +164,10 @@ export interface SessionAccumulatedUsage {
|
|
|
143
164
|
totalCost: number;
|
|
144
165
|
}
|
|
145
166
|
|
|
167
|
+
export interface RuntimeHostSubscribeOptions {
|
|
168
|
+
sessionId?: string;
|
|
169
|
+
}
|
|
170
|
+
|
|
146
171
|
/**
|
|
147
172
|
* RuntimeHost is the transport/runtime boundary for core session execution.
|
|
148
173
|
* Callers must normalize broad local config into `RuntimeSessionConfig`
|
|
@@ -171,8 +196,11 @@ export interface RuntimeHost {
|
|
|
171
196
|
): Promise<{ updated: boolean }>;
|
|
172
197
|
readMessages(sessionId: string): Promise<LlmsProviders.Message[]>;
|
|
173
198
|
handleHookEvent(payload: HookEventPayload): Promise<void>;
|
|
174
|
-
subscribe(
|
|
199
|
+
subscribe(
|
|
200
|
+
listener: (event: CoreSessionEvent) => void,
|
|
201
|
+
options?: RuntimeHostSubscribeOptions,
|
|
202
|
+
): () => void;
|
|
175
203
|
updateSessionModel?(sessionId: string, modelId: string): Promise<void>;
|
|
176
204
|
}
|
|
177
205
|
|
|
178
|
-
export type RuntimeHostMode = "auto" | "
|
|
206
|
+
export type RuntimeHostMode = "auto" | "local" | "hub" | "remote";
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import type * as LlmsProviders from "@clinebot/llms";
|
|
2
1
|
import {
|
|
3
2
|
type ITelemetryService,
|
|
4
3
|
isOAuthProviderId,
|
|
@@ -12,6 +11,7 @@ import { getValidOpenAICodexCredentials } from "../auth/codex";
|
|
|
12
11
|
import { getValidOcaCredentials } from "../auth/oca";
|
|
13
12
|
import { decodeJwtPayload } from "../auth/utils";
|
|
14
13
|
import { ProviderSettingsManager } from "../services/storage/provider-settings-manager";
|
|
14
|
+
import type { ProviderSettings } from "../types/provider-settings";
|
|
15
15
|
|
|
16
16
|
const DEFAULT_CLINE_API_BASE_URL = "https://api.cline.bot";
|
|
17
17
|
const WORKOS_TOKEN_PREFIX = "workos:";
|
|
@@ -51,12 +51,12 @@ function readExpiryFromToken(accessToken: string): number | null {
|
|
|
51
51
|
}
|
|
52
52
|
|
|
53
53
|
function deriveCredentialExpiry(
|
|
54
|
-
settings:
|
|
54
|
+
settings: ProviderSettings,
|
|
55
55
|
normalizedAccessToken: string,
|
|
56
56
|
): number {
|
|
57
57
|
const explicitExpiry = (
|
|
58
58
|
settings.auth as
|
|
59
|
-
| (
|
|
59
|
+
| (ProviderSettings["auth"] & { expiresAt?: number })
|
|
60
60
|
| undefined
|
|
61
61
|
)?.expiresAt;
|
|
62
62
|
if (
|
|
@@ -78,7 +78,7 @@ function deriveCredentialExpiry(
|
|
|
78
78
|
|
|
79
79
|
function toCredentials(
|
|
80
80
|
providerId: ManagedOAuthProviderId,
|
|
81
|
-
settings:
|
|
81
|
+
settings: ProviderSettings,
|
|
82
82
|
): ClineOAuthCredentials | null {
|
|
83
83
|
const rawAccess = settings.auth?.accessToken?.trim();
|
|
84
84
|
const refreshToken = settings.auth?.refreshToken?.trim();
|
|
@@ -99,18 +99,14 @@ function toCredentials(
|
|
|
99
99
|
}
|
|
100
100
|
|
|
101
101
|
function authSettingsEqual(
|
|
102
|
-
a:
|
|
103
|
-
b:
|
|
102
|
+
a: ProviderSettings["auth"] | undefined,
|
|
103
|
+
b: ProviderSettings["auth"] | undefined,
|
|
104
104
|
): boolean {
|
|
105
105
|
const aExpiry = (
|
|
106
|
-
a as
|
|
107
|
-
| (LlmsProviders.ProviderSettings["auth"] & { expiresAt?: number })
|
|
108
|
-
| undefined
|
|
106
|
+
a as (ProviderSettings["auth"] & { expiresAt?: number }) | undefined
|
|
109
107
|
)?.expiresAt;
|
|
110
108
|
const bExpiry = (
|
|
111
|
-
b as
|
|
112
|
-
| (LlmsProviders.ProviderSettings["auth"] & { expiresAt?: number })
|
|
113
|
-
| undefined
|
|
109
|
+
b as (ProviderSettings["auth"] & { expiresAt?: number }) | undefined
|
|
114
110
|
)?.expiresAt;
|
|
115
111
|
return (
|
|
116
112
|
a?.accessToken === b?.accessToken &&
|
|
@@ -219,9 +215,9 @@ export class RuntimeOAuthTokenManager {
|
|
|
219
215
|
accessToken: persistedAccessToken,
|
|
220
216
|
refreshToken: nextCredentials.refresh,
|
|
221
217
|
accountId: nextCredentials.accountId,
|
|
222
|
-
} as
|
|
218
|
+
} as ProviderSettings["auth"] & { expiresAt?: number };
|
|
223
219
|
nextAuth.expiresAt = nextCredentials.expires;
|
|
224
|
-
const nextSettings:
|
|
220
|
+
const nextSettings: ProviderSettings = {
|
|
225
221
|
...settings,
|
|
226
222
|
auth: nextAuth,
|
|
227
223
|
};
|
|
@@ -243,7 +239,7 @@ export class RuntimeOAuthTokenManager {
|
|
|
243
239
|
|
|
244
240
|
private async resolveCredentials(
|
|
245
241
|
providerId: ManagedOAuthProviderId,
|
|
246
|
-
settings:
|
|
242
|
+
settings: ProviderSettings,
|
|
247
243
|
currentCredentials: ClineOAuthCredentials,
|
|
248
244
|
forceRefresh: boolean,
|
|
249
245
|
): Promise<ClineOAuthCredentials | null> {
|
|
@@ -5,7 +5,6 @@ import type {
|
|
|
5
5
|
AgentResult,
|
|
6
6
|
BasicLogger,
|
|
7
7
|
ITelemetryService,
|
|
8
|
-
TeamTeammateSpec,
|
|
9
8
|
Tool,
|
|
10
9
|
} from "@clinebot/shared";
|
|
11
10
|
import type { UserInstructionConfigWatcher } from "../extensions/config";
|
|
@@ -30,28 +29,6 @@ export interface BuiltRuntime {
|
|
|
30
29
|
shutdown: (reason: string) => Promise<void> | void;
|
|
31
30
|
}
|
|
32
31
|
|
|
33
|
-
export interface TeamToolsFactoryOptions {
|
|
34
|
-
runtime: AgentTeamsRuntime;
|
|
35
|
-
teammateConfigProvider: DelegatedAgentConfigProvider;
|
|
36
|
-
createBaseTools?: () => Tool[];
|
|
37
|
-
leadAgentId?: string;
|
|
38
|
-
restoredTeammates?: TeamTeammateSpec[];
|
|
39
|
-
restoredFromPersistence?: boolean;
|
|
40
|
-
includeLeadSpawnTool?: boolean;
|
|
41
|
-
includeLeadManagementTools?: boolean;
|
|
42
|
-
onLeadToolsUnlocked?: (tools: Tool[]) => void;
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
export interface TeamToolsFactoryResult {
|
|
46
|
-
tools: Tool[];
|
|
47
|
-
restoredFromPersistence: boolean;
|
|
48
|
-
restoredTeammates: string[];
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
export type TeamToolsFactory = (
|
|
52
|
-
options: TeamToolsFactoryOptions,
|
|
53
|
-
) => TeamToolsFactoryResult;
|
|
54
|
-
|
|
55
32
|
export interface RuntimeBuilderInput {
|
|
56
33
|
config: CoreSessionConfig;
|
|
57
34
|
hooks?: AgentHooks;
|
|
@@ -63,7 +40,6 @@ export interface RuntimeBuilderInput {
|
|
|
63
40
|
defaultToolExecutors?: Partial<ToolExecutors>;
|
|
64
41
|
logger?: BasicLogger;
|
|
65
42
|
telemetry?: ITelemetryService;
|
|
66
|
-
teamToolsFactory?: TeamToolsFactory;
|
|
67
43
|
}
|
|
68
44
|
|
|
69
45
|
export interface RuntimeBuilder {
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import { mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
2
|
+
import { dirname } from "node:path";
|
|
3
|
+
import type { AgentConfig, Tool } from "@clinebot/shared";
|
|
4
|
+
import { resolveGlobalSettingsPath } from "@clinebot/shared/storage";
|
|
5
|
+
|
|
6
|
+
type AgentExtension = NonNullable<AgentConfig["extensions"]>[number];
|
|
7
|
+
type AgentExtensionApi = Parameters<NonNullable<AgentExtension["setup"]>>[0];
|
|
8
|
+
|
|
9
|
+
export interface GlobalSettings {
|
|
10
|
+
disabledTools?: string[];
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
function normalizeDisabledTools(value: unknown): string[] | undefined {
|
|
14
|
+
if (!Array.isArray(value)) {
|
|
15
|
+
return undefined;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
const normalized = [
|
|
19
|
+
...new Set(
|
|
20
|
+
value
|
|
21
|
+
.filter((entry): entry is string => typeof entry === "string")
|
|
22
|
+
.map((entry) => entry.trim())
|
|
23
|
+
.filter(Boolean),
|
|
24
|
+
),
|
|
25
|
+
].sort((left, right) => left.localeCompare(right));
|
|
26
|
+
|
|
27
|
+
return normalized.length > 0 ? normalized : undefined;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export function readGlobalSettings(): GlobalSettings {
|
|
31
|
+
const filePath = resolveGlobalSettingsPath();
|
|
32
|
+
try {
|
|
33
|
+
const parsed = JSON.parse(readFileSync(filePath, "utf8")) as GlobalSettings;
|
|
34
|
+
return {
|
|
35
|
+
disabledTools: normalizeDisabledTools(parsed.disabledTools),
|
|
36
|
+
};
|
|
37
|
+
} catch {
|
|
38
|
+
return {};
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export function writeGlobalSettings(settings: GlobalSettings): void {
|
|
43
|
+
const filePath = resolveGlobalSettingsPath();
|
|
44
|
+
mkdirSync(dirname(filePath), { recursive: true });
|
|
45
|
+
const normalizedDisabledTools = normalizeDisabledTools(
|
|
46
|
+
settings.disabledTools,
|
|
47
|
+
);
|
|
48
|
+
const normalized: GlobalSettings = normalizedDisabledTools
|
|
49
|
+
? { disabledTools: normalizedDisabledTools }
|
|
50
|
+
: {};
|
|
51
|
+
writeFileSync(filePath, `${JSON.stringify(normalized, null, 2)}\n`, "utf8");
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
export function resolveDisabledToolNames(
|
|
55
|
+
disabledToolNames?: ReadonlyArray<string>,
|
|
56
|
+
): Set<string> {
|
|
57
|
+
return new Set(disabledToolNames ?? readGlobalSettings().disabledTools ?? []);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
export function isToolDisabledGlobally(toolName: string): boolean {
|
|
61
|
+
return resolveDisabledToolNames().has(toolName);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
export function toggleDisabledTool(toolName: string): boolean {
|
|
65
|
+
const disabled = resolveDisabledToolNames();
|
|
66
|
+
if (disabled.has(toolName)) {
|
|
67
|
+
disabled.delete(toolName);
|
|
68
|
+
writeGlobalSettings({ disabledTools: [...disabled] });
|
|
69
|
+
return false;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
disabled.add(toolName);
|
|
73
|
+
writeGlobalSettings({ disabledTools: [...disabled] });
|
|
74
|
+
return true;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
export function filterDisabledTools<T extends Pick<Tool, "name">>(
|
|
78
|
+
tools: ReadonlyArray<T>,
|
|
79
|
+
disabledToolNames?: ReadonlyArray<string>,
|
|
80
|
+
): T[] {
|
|
81
|
+
const disabled = resolveDisabledToolNames(disabledToolNames);
|
|
82
|
+
if (disabled.size === 0) {
|
|
83
|
+
return [...tools];
|
|
84
|
+
}
|
|
85
|
+
return tools.filter((tool) => !disabled.has(tool.name));
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
export function filterExtensionToolRegistrations(
|
|
89
|
+
extensions: AgentConfig["extensions"],
|
|
90
|
+
disabledToolNames?: ReadonlyArray<string>,
|
|
91
|
+
): AgentConfig["extensions"] {
|
|
92
|
+
if (!extensions || extensions.length === 0) {
|
|
93
|
+
return extensions;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
const disabled = resolveDisabledToolNames(disabledToolNames);
|
|
97
|
+
if (disabled.size === 0) {
|
|
98
|
+
return extensions;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
return extensions.map((extension) => {
|
|
102
|
+
if (!extension.setup) {
|
|
103
|
+
return extension;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
return {
|
|
107
|
+
...extension,
|
|
108
|
+
setup: (api: AgentExtensionApi, ctx) =>
|
|
109
|
+
extension.setup?.(
|
|
110
|
+
{
|
|
111
|
+
...api,
|
|
112
|
+
registerTool: (tool) => {
|
|
113
|
+
if (!disabled.has(tool.name)) {
|
|
114
|
+
api.registerTool(tool);
|
|
115
|
+
}
|
|
116
|
+
},
|
|
117
|
+
},
|
|
118
|
+
ctx,
|
|
119
|
+
),
|
|
120
|
+
};
|
|
121
|
+
});
|
|
122
|
+
}
|
|
@@ -5,6 +5,7 @@ import type {
|
|
|
5
5
|
Tool,
|
|
6
6
|
ToolApprovalRequest,
|
|
7
7
|
ToolApprovalResult,
|
|
8
|
+
WorkspaceInfo,
|
|
8
9
|
} from "@clinebot/shared";
|
|
9
10
|
import { resolveAndLoadAgentPlugins } from "../extensions/plugin/plugin-config-loader";
|
|
10
11
|
import type {
|
|
@@ -24,10 +25,7 @@ import type {
|
|
|
24
25
|
LocalRuntimeStartOptions,
|
|
25
26
|
StartSessionInput,
|
|
26
27
|
} from "../runtime/runtime-host";
|
|
27
|
-
import type {
|
|
28
|
-
RuntimeBuilderInput,
|
|
29
|
-
TeamToolsFactory,
|
|
30
|
-
} from "../runtime/session-runtime";
|
|
28
|
+
import type { RuntimeBuilderInput } from "../runtime/session-runtime";
|
|
31
29
|
import type { CoreSessionConfig } from "../types/config";
|
|
32
30
|
import {
|
|
33
31
|
type ProviderConfig,
|
|
@@ -35,9 +33,10 @@ import {
|
|
|
35
33
|
toProviderConfig,
|
|
36
34
|
} from "../types/provider-settings";
|
|
37
35
|
import { resolveWorkspacePath } from "./config";
|
|
36
|
+
import { filterExtensionToolRegistrations } from "./global-settings";
|
|
38
37
|
import { hasRuntimeHooks, mergeAgentExtensions } from "./session-data";
|
|
39
38
|
import type { ProviderSettingsManager } from "./storage/provider-settings-manager";
|
|
40
|
-
import {
|
|
39
|
+
import { buildWorkspaceMetadataWithInfo } from "./workspace-manifest";
|
|
41
40
|
|
|
42
41
|
function formatPluginFailure(failure: PluginInitializationFailure): string {
|
|
43
42
|
const label = failure.pluginName ?? failure.pluginPath;
|
|
@@ -93,8 +92,17 @@ function resolveReasoningSettings(
|
|
|
93
92
|
function buildProviderConfig(
|
|
94
93
|
config: CoreSessionConfig,
|
|
95
94
|
providerSettingsManager: ProviderSettingsManager,
|
|
95
|
+
modelCatalogDefaults?: Partial<ProviderSettings["modelCatalog"]>,
|
|
96
|
+
defaultFetch?: typeof fetch,
|
|
96
97
|
): ProviderConfig {
|
|
97
98
|
const stored = providerSettingsManager.getProviderSettings(config.providerId);
|
|
99
|
+
const modelCatalog =
|
|
100
|
+
modelCatalogDefaults || stored?.modelCatalog
|
|
101
|
+
? {
|
|
102
|
+
...(modelCatalogDefaults ?? {}),
|
|
103
|
+
...(stored?.modelCatalog ?? {}),
|
|
104
|
+
}
|
|
105
|
+
: undefined;
|
|
98
106
|
const settings: ProviderSettings = {
|
|
99
107
|
...(stored ?? {}),
|
|
100
108
|
provider: config.providerId,
|
|
@@ -103,6 +111,7 @@ function buildProviderConfig(
|
|
|
103
111
|
baseUrl: config.baseUrl ?? stored?.baseUrl,
|
|
104
112
|
headers: config.headers ?? stored?.headers,
|
|
105
113
|
reasoning: resolveReasoningSettings(config, stored?.reasoning),
|
|
114
|
+
modelCatalog,
|
|
106
115
|
};
|
|
107
116
|
const providerConfig = toProviderConfig(settings);
|
|
108
117
|
if (config.knownModels) {
|
|
@@ -111,6 +120,13 @@ function buildProviderConfig(
|
|
|
111
120
|
if (config.extensionContext) {
|
|
112
121
|
providerConfig.extensionContext = config.extensionContext;
|
|
113
122
|
}
|
|
123
|
+
// Thread a host-provided custom fetch through to the AI gateway providers.
|
|
124
|
+
// Precedence: explicit per-session config > stored provider settings > host default.
|
|
125
|
+
const sessionFetch = (config as { fetch?: typeof fetch }).fetch;
|
|
126
|
+
const resolvedFetch = sessionFetch ?? providerConfig.fetch ?? defaultFetch;
|
|
127
|
+
if (resolvedFetch) {
|
|
128
|
+
providerConfig.fetch = resolvedFetch;
|
|
129
|
+
}
|
|
114
130
|
return providerConfig;
|
|
115
131
|
}
|
|
116
132
|
|
|
@@ -121,11 +137,15 @@ export interface PrepareLocalRuntimeBootstrapOptions {
|
|
|
121
137
|
providerSettingsManager: ProviderSettingsManager;
|
|
122
138
|
defaultTelemetry?: ITelemetryService;
|
|
123
139
|
defaultToolExecutors?: Partial<ToolExecutors>;
|
|
124
|
-
teamToolsFactory?: TeamToolsFactory;
|
|
125
140
|
defaultToolPolicies?: AgentConfig["toolPolicies"];
|
|
126
141
|
defaultRequestToolApproval?: (
|
|
127
142
|
request: ToolApprovalRequest,
|
|
128
143
|
) => Promise<ToolApprovalResult>;
|
|
144
|
+
/**
|
|
145
|
+
* Host-level default `fetch` threaded into `ProviderConfig.fetch` so the
|
|
146
|
+
* AI gateway providers can use a custom HTTP implementation.
|
|
147
|
+
*/
|
|
148
|
+
defaultFetch?: typeof fetch;
|
|
129
149
|
onPluginEvent: (event: { name: string; payload?: unknown }) => void;
|
|
130
150
|
onTeamEvent: (event: TeamEvent) => void;
|
|
131
151
|
createSpawnTool: () => Tool;
|
|
@@ -140,6 +160,8 @@ export interface LocalRuntimeBootstrap {
|
|
|
140
160
|
config: CoreSessionConfig;
|
|
141
161
|
providerConfig: ProviderConfig;
|
|
142
162
|
workspaceMetadata: string;
|
|
163
|
+
/** Structured git + path metadata generated alongside workspaceMetadata. */
|
|
164
|
+
workspaceInfo: WorkspaceInfo;
|
|
143
165
|
extensions: AgentConfig["extensions"];
|
|
144
166
|
hooks: AgentHooks | undefined;
|
|
145
167
|
toolPolicies: AgentConfig["toolPolicies"];
|
|
@@ -159,9 +181,9 @@ export async function prepareLocalRuntimeBootstrap(
|
|
|
159
181
|
providerSettingsManager,
|
|
160
182
|
defaultTelemetry,
|
|
161
183
|
defaultToolExecutors,
|
|
162
|
-
teamToolsFactory,
|
|
163
184
|
defaultToolPolicies,
|
|
164
185
|
defaultRequestToolApproval,
|
|
186
|
+
defaultFetch,
|
|
165
187
|
onPluginEvent,
|
|
166
188
|
onTeamEvent,
|
|
167
189
|
createSpawnTool,
|
|
@@ -173,18 +195,27 @@ export async function prepareLocalRuntimeBootstrap(
|
|
|
173
195
|
const configOverrides = localRuntime?.configOverrides as
|
|
174
196
|
| Partial<LocalRuntimeConfigOverrides>
|
|
175
197
|
| undefined;
|
|
198
|
+
const localConfig = configOverrides as Partial<CoreSessionConfig> | undefined;
|
|
199
|
+
|
|
200
|
+
// Generate workspace + git metadata once, early, so it can be forwarded to
|
|
201
|
+
// hooks and extensions. The serialized string goes into CoreSessionConfig
|
|
202
|
+
// as workspaceMetadata; the structured object is kept as workspaceInfo.
|
|
203
|
+
const { workspaceInfo, workspaceMetadata } =
|
|
204
|
+
await buildWorkspaceMetadataWithInfo(input.config.cwd);
|
|
176
205
|
|
|
177
206
|
const fileHooks = createHookConfigFileHooks({
|
|
178
207
|
cwd: input.config.cwd,
|
|
179
208
|
workspacePath,
|
|
180
209
|
rootSessionId: sessionId,
|
|
181
210
|
logger: configOverrides?.logger,
|
|
211
|
+
workspaceInfo,
|
|
182
212
|
});
|
|
183
213
|
const auditHooks = hasRuntimeHooks(configOverrides?.hooks)
|
|
184
214
|
? undefined
|
|
185
215
|
: createHookAuditHooks({
|
|
186
216
|
rootSessionId: sessionId,
|
|
187
217
|
workspacePath,
|
|
218
|
+
workspaceInfo,
|
|
188
219
|
});
|
|
189
220
|
const baseHooks = mergeAgentHooks([
|
|
190
221
|
configOverrides?.hooks,
|
|
@@ -197,10 +228,13 @@ export async function prepareLocalRuntimeBootstrap(
|
|
|
197
228
|
| undefined;
|
|
198
229
|
try {
|
|
199
230
|
loadedPlugins = await resolveAndLoadAgentPlugins({
|
|
200
|
-
pluginPaths:
|
|
231
|
+
pluginPaths: localConfig?.pluginPaths,
|
|
201
232
|
workspacePath,
|
|
202
233
|
cwd: input.config.cwd,
|
|
203
234
|
onEvent: onPluginEvent,
|
|
235
|
+
providerId: input.config.providerId,
|
|
236
|
+
modelId: input.config.modelId,
|
|
237
|
+
workspaceInfo,
|
|
204
238
|
});
|
|
205
239
|
logPluginDiagnostics(
|
|
206
240
|
loadedPlugins.failures,
|
|
@@ -216,9 +250,8 @@ export async function prepareLocalRuntimeBootstrap(
|
|
|
216
250
|
|
|
217
251
|
const extensions = mergeAgentExtensions(
|
|
218
252
|
configOverrides?.extensions,
|
|
219
|
-
loadedPlugins?.extensions,
|
|
253
|
+
filterExtensionToolRegistrations(loadedPlugins?.extensions),
|
|
220
254
|
);
|
|
221
|
-
const workspaceMetadata = await buildWorkspaceMetadata(input.config.cwd);
|
|
222
255
|
const baseConfig: CoreSessionConfig = {
|
|
223
256
|
...input.config,
|
|
224
257
|
...(configOverrides ?? {}),
|
|
@@ -229,6 +262,8 @@ export async function prepareLocalRuntimeBootstrap(
|
|
|
229
262
|
const providerConfig = buildProviderConfig(
|
|
230
263
|
baseConfig,
|
|
231
264
|
providerSettingsManager,
|
|
265
|
+
localRuntime?.modelCatalogDefaults,
|
|
266
|
+
defaultFetch,
|
|
232
267
|
);
|
|
233
268
|
const hooks = mergeAgentHooks([
|
|
234
269
|
baseConfig.hooks,
|
|
@@ -249,15 +284,19 @@ export async function prepareLocalRuntimeBootstrap(
|
|
|
249
284
|
workspaceMetadata,
|
|
250
285
|
hooks,
|
|
251
286
|
};
|
|
252
|
-
const toolPolicies =
|
|
287
|
+
const toolPolicies =
|
|
288
|
+
input.toolPolicies ?? baseConfig.toolPolicies ?? defaultToolPolicies;
|
|
253
289
|
const requestToolApproval =
|
|
254
290
|
input.requestToolApproval ?? defaultRequestToolApproval;
|
|
291
|
+
const effectiveToolExecutors =
|
|
292
|
+
localRuntime?.defaultToolExecutors ?? defaultToolExecutors;
|
|
255
293
|
|
|
256
294
|
return {
|
|
257
295
|
effectiveInput: input,
|
|
258
296
|
config,
|
|
259
297
|
providerConfig,
|
|
260
298
|
workspaceMetadata,
|
|
299
|
+
workspaceInfo,
|
|
261
300
|
extensions,
|
|
262
301
|
hooks,
|
|
263
302
|
toolPolicies,
|
|
@@ -271,10 +310,9 @@ export async function prepareLocalRuntimeBootstrap(
|
|
|
271
310
|
createSpawnTool,
|
|
272
311
|
onTeamRestored: localRuntime?.onTeamRestored,
|
|
273
312
|
userInstructionWatcher: localRuntime?.userInstructionWatcher,
|
|
274
|
-
defaultToolExecutors,
|
|
313
|
+
defaultToolExecutors: effectiveToolExecutors,
|
|
275
314
|
logger: config.logger,
|
|
276
315
|
telemetry: config.telemetry,
|
|
277
|
-
teamToolsFactory,
|
|
278
316
|
},
|
|
279
317
|
};
|
|
280
318
|
}
|