@clinebot/core 0.0.35 → 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/README.md +1 -2
- package/dist/ClineCore.d.ts +362 -39
- package/dist/ClineCore.d.ts.map +1 -1
- package/dist/account/cline-account-service.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/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/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 +68 -0
- package/dist/cron/scheduler.d.ts.map +1 -0
- package/dist/cron/sqlite-cron-store.d.ts +230 -0
- package/dist/cron/sqlite-cron-store.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 +15 -2
- package/dist/extensions/plugin/plugin-config-loader.d.ts.map +1 -1
- package/dist/extensions/plugin/plugin-loader.d.ts +13 -7
- 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 +21 -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 +237 -276
- 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 +3 -4
- 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/editor.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/helpers.d.ts +1 -0
- package/dist/extensions/tools/helpers.d.ts.map +1 -1
- package/dist/extensions/tools/index.d.ts +3 -2
- package/dist/extensions/tools/index.d.ts.map +1 -1
- package/dist/extensions/tools/presets.d.ts +27 -44
- 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 +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 +1 -0
- 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 +6 -2
- 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/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 +51 -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 +1305 -0
- package/dist/hub/daemon.d.ts +5 -0
- package/dist/hub/daemon.d.ts.map +1 -0
- package/dist/hub/defaults.d.ts +17 -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 +1294 -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 +104 -0
- package/dist/hub/server.d.ts.map +1 -0
- package/dist/hub/session-client.d.ts +90 -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 +45 -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 +29 -16
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +782 -471
- package/dist/llms/cline-recommended-models.d.ts +20 -0
- package/dist/llms/cline-recommended-models.d.ts.map +1 -0
- package/dist/llms/configured-provider-registry.d.ts +28 -0
- package/dist/llms/configured-provider-registry.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 +27 -0
- package/dist/llms/provider-defaults.d.ts.map +1 -0
- package/dist/llms/provider-settings.d.ts +245 -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/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 +1 -2
- 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/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-event-adapter.d.ts +102 -0
- package/dist/runtime/runtime-event-adapter.d.ts.map +1 -0
- package/dist/runtime/runtime-host.d.ts +49 -26
- 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-orchestrator.d.ts +261 -0
- package/dist/runtime/session-runtime-orchestrator.d.ts.map +1 -0
- package/dist/runtime/session-runtime.d.ts +16 -21
- 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/global-settings.d.ts +12 -0
- package/dist/services/global-settings.d.ts.map +1 -0
- package/dist/services/index.js +28 -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 +199 -23
- package/dist/services/providers/local-provider-registry.d.ts.map +1 -1
- package/dist/services/providers/local-provider-service.d.ts +15 -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/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 +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/services/workspace-manifest.d.ts +11 -0
- package/dist/services/workspace-manifest.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/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-manifest.d.ts +1 -1
- 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 +58 -0
- package/dist/transports/hub.d.ts.map +1 -0
- package/dist/transports/local.d.ts +23 -9
- 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 +15 -17
- package/dist/types/chat-schema.d.ts.map +1 -1
- package/dist/types/config.d.ts +17 -7
- 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 +4 -5
- package/dist/types/provider-settings.d.ts.map +1 -1
- package/dist/types/session.d.ts +7 -3
- package/dist/types/session.d.ts.map +1 -1
- package/dist/types.d.ts +11 -4
- package/dist/types.d.ts.map +1 -1
- package/package.json +20 -6
- package/src/ClineCore.ts +757 -44
- package/src/account/cline-account-service.ts +44 -6
- package/src/account/index.ts +3 -3
- package/src/account/rpc.ts +12 -12
- 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 +15 -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 +772 -0
- package/src/cron/sqlite-cron-store.ts +1286 -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 +37 -2
- package/src/extensions/plugin/plugin-loader.ts +69 -9
- package/src/extensions/plugin/plugin-module-import.ts +0 -2
- package/src/extensions/plugin/plugin-sandbox-bootstrap.ts +243 -39
- package/src/extensions/plugin/plugin-sandbox.ts +173 -29
- package/src/extensions/plugin/plugin-targeting.ts +32 -0
- package/src/extensions/tools/constants.ts +2 -0
- package/src/extensions/tools/definitions.ts +61 -71
- package/src/extensions/tools/executors/apply-patch.ts +69 -80
- package/src/extensions/tools/executors/editor.ts +4 -3
- package/src/extensions/tools/executors/search.ts +195 -3
- package/src/extensions/tools/helpers.ts +24 -0
- package/src/extensions/tools/index.ts +11 -2
- package/src/extensions/tools/presets.ts +32 -47
- package/src/extensions/tools/runtime.ts +261 -0
- package/src/extensions/tools/schemas.ts +17 -20
- 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 +172 -91
- package/src/extensions/tools/types.ts +0 -6
- package/src/hooks/hook-bridge.ts +489 -0
- package/src/hooks/hook-file-hooks.ts +66 -5
- package/src/hooks/hook-registry.ts +257 -0
- 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 +159 -0
- package/src/hub/client.ts +633 -0
- package/src/hub/connect.ts +156 -0
- package/src/hub/daemon-entry.ts +122 -0
- package/src/hub/daemon.ts +284 -0
- package/src/hub/defaults.ts +70 -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 +141 -0
- package/src/hub/server.ts +2317 -0
- package/src/hub/session-client.ts +502 -0
- package/src/hub/start-shared-server.ts +61 -0
- package/src/hub/transport.ts +14 -0
- package/src/hub/ui-client.ts +126 -0
- package/src/hub/workspace.ts +19 -0
- package/src/index.ts +169 -68
- package/src/llms/cline-recommended-models.ts +167 -0
- package/src/llms/configured-provider-registry.ts +193 -0
- package/src/llms/handler-factory.ts +56 -0
- package/src/llms/provider-defaults.ts +653 -0
- package/src/llms/provider-settings.ts +310 -0
- package/src/llms/runtime-config.ts +43 -0
- package/src/llms/runtime-registry.ts +172 -0
- package/src/llms/runtime-types.ts +121 -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 +127 -267
- package/src/runtime/index.ts +1 -0
- package/src/runtime/loop-detection.ts +162 -0
- package/src/runtime/mistake-tracker.ts +221 -0
- package/src/runtime/rules.ts +12 -0
- package/src/runtime/runtime-builder.ts +85 -13
- package/src/runtime/runtime-event-adapter.ts +412 -0
- package/src/runtime/runtime-host.ts +134 -62
- package/src/runtime/runtime-oauth-token-manager.ts +11 -15
- package/src/runtime/session-runtime-orchestrator.ts +1253 -0
- package/src/runtime/session-runtime.ts +16 -26
- package/src/runtime/user-input-builder.ts +167 -0
- package/src/services/global-settings.ts +122 -0
- package/src/services/local-runtime-bootstrap.ts +175 -31
- package/src/services/plugin-tools.ts +86 -0
- package/src/services/providers/local-provider-registry.ts +277 -61
- package/src/services/providers/local-provider-service.ts +109 -44
- package/src/services/session-data.ts +18 -10
- 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 +14 -51
- package/src/services/storage/provider-settings-manager.ts +17 -2
- package/src/services/storage/sqlite-team-store.ts +1 -5
- package/src/services/workspace-manifest.ts +18 -0
- package/src/session/conversation-store.ts +77 -0
- package/src/session/file-session-service.ts +1 -1
- package/src/session/index.ts +6 -27
- package/src/session/message-builder.ts +941 -0
- 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 +1081 -0
- package/src/transports/local.ts +419 -93
- package/src/transports/remote.ts +27 -0
- package/src/transports/runtime-host-support.ts +63 -9
- package/src/types/chat-schema.ts +4 -5
- package/src/types/config.ts +17 -7
- package/src/types/events.ts +8 -6
- package/src/types/index.ts +3 -0
- package/src/types/provider-settings.ts +18 -7
- package/src/types/session.ts +7 -6
- package/src/types.ts +42 -2
- 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/services/telemetry/index.js +0 -15
- 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
|
@@ -1,23 +1,30 @@
|
|
|
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
|
+
ProviderClient,
|
|
18
|
+
ProviderConfig,
|
|
19
|
+
ProviderProtocol,
|
|
20
|
+
ProviderSettings,
|
|
21
|
+
} from "../../llms/provider-settings";
|
|
15
22
|
import type { ProviderSettingsManager } from "../storage/provider-settings-manager";
|
|
16
23
|
import {
|
|
17
24
|
readModelsFile,
|
|
18
25
|
registerCustomProvider,
|
|
19
26
|
resolveModelsRegistryPath,
|
|
20
|
-
|
|
27
|
+
toProviderModel,
|
|
21
28
|
writeModelsFile,
|
|
22
29
|
} from "./local-provider-registry";
|
|
23
30
|
|
|
@@ -33,7 +40,9 @@ export interface UpdateLocalProviderRequest {
|
|
|
33
40
|
models?: string[];
|
|
34
41
|
defaultModelId?: string | null;
|
|
35
42
|
modelsSourceUrl?: string | null;
|
|
36
|
-
|
|
43
|
+
protocol?: ProviderProtocol | null;
|
|
44
|
+
client?: ProviderClient | null;
|
|
45
|
+
capabilities?: ProviderCapability[] | null;
|
|
37
46
|
}
|
|
38
47
|
|
|
39
48
|
export interface DeleteLocalProviderRequest {
|
|
@@ -86,12 +95,12 @@ function stableColor(id: string): string {
|
|
|
86
95
|
return palette[hash % palette.length];
|
|
87
96
|
}
|
|
88
97
|
|
|
89
|
-
function
|
|
90
|
-
modelMap: Record<string,
|
|
91
|
-
):
|
|
98
|
+
function toSortedProviderModels(
|
|
99
|
+
modelMap: Record<string, ModelInfo>,
|
|
100
|
+
): ProviderModel[] {
|
|
92
101
|
return Object.entries(modelMap)
|
|
93
102
|
.sort(([a], [b]) => a.localeCompare(b))
|
|
94
|
-
.map(([modelId, info]) =>
|
|
103
|
+
.map(([modelId, info]) => toProviderModel(modelId, info));
|
|
95
104
|
}
|
|
96
105
|
|
|
97
106
|
// --- Model ID parsing ---
|
|
@@ -163,14 +172,14 @@ async function fetchModelIdsFromSource(
|
|
|
163
172
|
|
|
164
173
|
async function resolveProviderModelMap(
|
|
165
174
|
providerId: string,
|
|
166
|
-
config?:
|
|
167
|
-
): Promise<Record<string,
|
|
175
|
+
config?: ProviderConfig,
|
|
176
|
+
): Promise<Record<string, ModelInfo>> {
|
|
168
177
|
const registeredModels = await LlmsModels.getModelsForProvider(providerId);
|
|
169
178
|
if (!config) {
|
|
170
179
|
return registeredModels;
|
|
171
180
|
}
|
|
172
181
|
|
|
173
|
-
const resolved = await
|
|
182
|
+
const resolved = await resolveProviderConfig(
|
|
174
183
|
providerId,
|
|
175
184
|
{
|
|
176
185
|
loadPrivateOnAuth: true,
|
|
@@ -202,7 +211,7 @@ function normalizeHeaders(
|
|
|
202
211
|
|
|
203
212
|
function buildProviderModels(
|
|
204
213
|
modelIds: string[],
|
|
205
|
-
capabilities:
|
|
214
|
+
capabilities: ProviderCapability[] | undefined,
|
|
206
215
|
) {
|
|
207
216
|
const supportsVision = capabilities?.includes("vision") ?? false;
|
|
208
217
|
const supportsReasoning = capabilities?.includes("reasoning") ?? false;
|
|
@@ -251,13 +260,14 @@ function removeProviderFromSettingsState(
|
|
|
251
260
|
mutated = true;
|
|
252
261
|
}
|
|
253
262
|
if (mutated) manager.write(state);
|
|
263
|
+
LlmsModels.unregisterProvider(providerId);
|
|
254
264
|
}
|
|
255
265
|
|
|
256
266
|
// --- Public API ---
|
|
257
267
|
|
|
258
268
|
export async function addLocalProvider(
|
|
259
269
|
manager: ProviderSettingsManager,
|
|
260
|
-
request: Omit<
|
|
270
|
+
request: Omit<AddProviderActionRequest, "action">,
|
|
261
271
|
): Promise<{
|
|
262
272
|
providerId: string;
|
|
263
273
|
settingsPath: string;
|
|
@@ -333,6 +343,8 @@ export async function addLocalProvider(
|
|
|
333
343
|
headers: normalizedHeaders,
|
|
334
344
|
timeout: request.timeoutMs,
|
|
335
345
|
model: defaultModelId,
|
|
346
|
+
protocol: request.protocol,
|
|
347
|
+
client: request.client,
|
|
336
348
|
},
|
|
337
349
|
{ setLastUsed: false },
|
|
338
350
|
);
|
|
@@ -345,6 +357,8 @@ export async function addLocalProvider(
|
|
|
345
357
|
name: providerName,
|
|
346
358
|
baseUrl,
|
|
347
359
|
defaultModelId,
|
|
360
|
+
protocol: request.protocol,
|
|
361
|
+
client: request.client,
|
|
348
362
|
capabilities,
|
|
349
363
|
modelsSourceUrl: sourceUrl,
|
|
350
364
|
},
|
|
@@ -375,11 +389,40 @@ export async function updateLocalProvider(
|
|
|
375
389
|
|
|
376
390
|
const modelsPath = resolveModelsRegistryPath(manager);
|
|
377
391
|
const modelsState = await readModelsFile(modelsPath);
|
|
378
|
-
|
|
392
|
+
let existingEntry = modelsState.providers[providerId];
|
|
379
393
|
if (!existingEntry) {
|
|
380
|
-
|
|
381
|
-
|
|
394
|
+
const existingSettings = manager.getProviderSettings(providerId);
|
|
395
|
+
if (!existingSettings) {
|
|
396
|
+
throw new Error(`provider "${providerId}" does not exist`);
|
|
397
|
+
}
|
|
398
|
+
|
|
399
|
+
const seedModelId =
|
|
400
|
+
uniqueTrimmed(request.models)[0] ?? existingSettings.model?.trim();
|
|
401
|
+
if (!seedModelId) {
|
|
402
|
+
throw new Error(
|
|
403
|
+
`provider "${providerId}" cannot be updated because no model is configured`,
|
|
404
|
+
);
|
|
405
|
+
}
|
|
382
406
|
|
|
407
|
+
// Ephemeral seed for the existing update path; final state is computed and written below.
|
|
408
|
+
existingEntry = {
|
|
409
|
+
provider: {
|
|
410
|
+
name: request.name?.trim() || titleCaseFromId(providerId),
|
|
411
|
+
baseUrl:
|
|
412
|
+
request.baseUrl?.trim() ?? existingSettings.baseUrl?.trim() ?? "",
|
|
413
|
+
defaultModelId: seedModelId,
|
|
414
|
+
protocol: existingSettings.protocol,
|
|
415
|
+
client: existingSettings.client,
|
|
416
|
+
capabilities: existingSettings.capabilities,
|
|
417
|
+
},
|
|
418
|
+
models: buildProviderModels([seedModelId], existingSettings.capabilities),
|
|
419
|
+
};
|
|
420
|
+
}
|
|
421
|
+
if (!existingEntry.provider) {
|
|
422
|
+
throw new Error(
|
|
423
|
+
`provider "${providerId}" cannot be updated because it is a model overlay (no provider metadata)`,
|
|
424
|
+
);
|
|
425
|
+
}
|
|
383
426
|
const providerName =
|
|
384
427
|
request.name?.trim() ?? existingEntry.provider.name.trim();
|
|
385
428
|
if (!providerName) throw new Error("name is required");
|
|
@@ -394,6 +437,14 @@ export async function updateLocalProvider(
|
|
|
394
437
|
: request.capabilities === null
|
|
395
438
|
? undefined
|
|
396
439
|
: [...new Set(request.capabilities)];
|
|
440
|
+
const protocol =
|
|
441
|
+
request.protocol === undefined
|
|
442
|
+
? existingEntry.provider.protocol
|
|
443
|
+
: (request.protocol ?? undefined);
|
|
444
|
+
const client =
|
|
445
|
+
request.client === undefined
|
|
446
|
+
? existingEntry.provider.client
|
|
447
|
+
: (request.client ?? undefined);
|
|
397
448
|
|
|
398
449
|
const explicitModels = uniqueTrimmed(request.models);
|
|
399
450
|
const nextModelsSourceUrl =
|
|
@@ -403,7 +454,7 @@ export async function updateLocalProvider(
|
|
|
403
454
|
const shouldRecomputeModels =
|
|
404
455
|
request.models !== undefined ||
|
|
405
456
|
(request.modelsSourceUrl !== undefined && !!nextModelsSourceUrl);
|
|
406
|
-
const existingModelIds = Object.keys(existingEntry.models)
|
|
457
|
+
const existingModelIds = Object.keys(existingEntry.models ?? {})
|
|
407
458
|
.map((id) => id.trim())
|
|
408
459
|
.filter(Boolean);
|
|
409
460
|
const modelIds = await resolveModelIds({
|
|
@@ -435,6 +486,10 @@ export async function updateLocalProvider(
|
|
|
435
486
|
baseUrl,
|
|
436
487
|
model: defaultModelId,
|
|
437
488
|
};
|
|
489
|
+
if (protocol) nextSettings.protocol = protocol;
|
|
490
|
+
else delete nextSettings.protocol;
|
|
491
|
+
if (client) nextSettings.client = client;
|
|
492
|
+
else delete nextSettings.client;
|
|
438
493
|
if (request.apiKey !== undefined) {
|
|
439
494
|
const apiKey = request.apiKey?.trim() ?? "";
|
|
440
495
|
if (apiKey) nextSettings.apiKey = apiKey;
|
|
@@ -460,6 +515,8 @@ export async function updateLocalProvider(
|
|
|
460
515
|
name: providerName,
|
|
461
516
|
baseUrl,
|
|
462
517
|
defaultModelId,
|
|
518
|
+
protocol,
|
|
519
|
+
client,
|
|
463
520
|
capabilities,
|
|
464
521
|
modelsSourceUrl: nextModelsSourceUrl,
|
|
465
522
|
},
|
|
@@ -508,17 +565,17 @@ export async function deleteLocalProvider(
|
|
|
508
565
|
|
|
509
566
|
export async function listLocalProviders(
|
|
510
567
|
manager: ProviderSettingsManager,
|
|
511
|
-
): Promise<{ providers:
|
|
568
|
+
): Promise<{ providers: ProviderListItem[]; settingsPath: string }> {
|
|
512
569
|
const state = manager.read();
|
|
513
570
|
const ids = LlmsModels.getProviderIds().sort((a, b) => a.localeCompare(b));
|
|
514
571
|
|
|
515
572
|
const providers = await Promise.all(
|
|
516
|
-
ids.map(async (id): Promise<
|
|
573
|
+
ids.map(async (id): Promise<ProviderListItem> => {
|
|
517
574
|
const [info, registeredModels] = await Promise.all([
|
|
518
575
|
LlmsModels.getProvider(id),
|
|
519
576
|
LlmsModels.getModelsForProvider(id),
|
|
520
577
|
]);
|
|
521
|
-
const modelList =
|
|
578
|
+
const modelList = toSortedProviderModels(registeredModels);
|
|
522
579
|
const persistedSettings = state.providers[id]?.settings;
|
|
523
580
|
const name = info?.name ?? titleCaseFromId(id);
|
|
524
581
|
return {
|
|
@@ -536,6 +593,8 @@ export async function listLocalProviders(
|
|
|
536
593
|
: undefined,
|
|
537
594
|
baseUrl: persistedSettings?.baseUrl ?? info?.baseUrl,
|
|
538
595
|
defaultModelId: info?.defaultModelId,
|
|
596
|
+
protocol: persistedSettings?.protocol ?? info?.protocol,
|
|
597
|
+
client: persistedSettings?.client ?? info?.client,
|
|
539
598
|
authDescription: "This provider uses API keys for authentication.",
|
|
540
599
|
baseUrlDescription: "The base endpoint to use for provider requests.",
|
|
541
600
|
modelList,
|
|
@@ -548,17 +607,17 @@ export async function listLocalProviders(
|
|
|
548
607
|
|
|
549
608
|
export async function getLocalProviderModels(
|
|
550
609
|
providerId: string,
|
|
551
|
-
config?:
|
|
552
|
-
): Promise<{ providerId: string; models:
|
|
610
|
+
config?: ProviderConfig,
|
|
611
|
+
): Promise<{ providerId: string; models: ProviderModel[] }> {
|
|
553
612
|
const id = providerId.trim();
|
|
554
613
|
const modelMap = await resolveProviderModelMap(id, config);
|
|
555
|
-
const models =
|
|
614
|
+
const models = toSortedProviderModels(modelMap);
|
|
556
615
|
return { providerId: id, models };
|
|
557
616
|
}
|
|
558
617
|
|
|
559
618
|
export function saveLocalProviderSettings(
|
|
560
619
|
manager: ProviderSettingsManager,
|
|
561
|
-
request: Omit<
|
|
620
|
+
request: Omit<SaveProviderSettingsActionRequest, "action">,
|
|
562
621
|
): { providerId: string; enabled: boolean; settingsPath: string } {
|
|
563
622
|
const providerId = request.providerId.trim();
|
|
564
623
|
|
|
@@ -591,6 +650,9 @@ export function saveLocalProviderSettings(
|
|
|
591
650
|
"contextWindow",
|
|
592
651
|
"timeout",
|
|
593
652
|
"apiLine",
|
|
653
|
+
"protocol",
|
|
654
|
+
"client",
|
|
655
|
+
"routingProviderId",
|
|
594
656
|
"capabilities",
|
|
595
657
|
] as const) {
|
|
596
658
|
if (Object.hasOwn(request, key)) next[key] = request[key];
|
|
@@ -621,7 +683,7 @@ export function saveLocalProviderSettings(
|
|
|
621
683
|
return { providerId, enabled: true, settingsPath: manager.getFilePath() };
|
|
622
684
|
}
|
|
623
685
|
|
|
624
|
-
export function normalizeOAuthProvider(provider: string):
|
|
686
|
+
export function normalizeOAuthProvider(provider: string): OAuthProviderId {
|
|
625
687
|
const normalized = provider.trim().toLowerCase();
|
|
626
688
|
if (normalized === "codex" || normalized === "openai-codex")
|
|
627
689
|
return "openai-codex";
|
|
@@ -632,17 +694,20 @@ export function normalizeOAuthProvider(provider: string): RpcOAuthProviderId {
|
|
|
632
694
|
}
|
|
633
695
|
|
|
634
696
|
function toProviderApiKey(
|
|
635
|
-
providerId:
|
|
697
|
+
providerId: OAuthProviderId,
|
|
636
698
|
credentials: { access: string },
|
|
637
699
|
): string {
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
700
|
+
if (providerId === "cline") {
|
|
701
|
+
return credentials.access.startsWith("workos:")
|
|
702
|
+
? credentials.access
|
|
703
|
+
: `workos:${credentials.access}`;
|
|
704
|
+
}
|
|
705
|
+
return credentials.access;
|
|
641
706
|
}
|
|
642
707
|
|
|
643
708
|
export async function loginLocalProvider(
|
|
644
|
-
providerId:
|
|
645
|
-
existing:
|
|
709
|
+
providerId: OAuthProviderId,
|
|
710
|
+
existing: ProviderSettings | undefined,
|
|
646
711
|
openUrl: (url: string) => void,
|
|
647
712
|
): Promise<{
|
|
648
713
|
access: string;
|
|
@@ -671,28 +736,28 @@ export async function loginLocalProvider(
|
|
|
671
736
|
|
|
672
737
|
export function saveLocalProviderOAuthCredentials(
|
|
673
738
|
manager: ProviderSettingsManager,
|
|
674
|
-
providerId:
|
|
675
|
-
existing:
|
|
739
|
+
providerId: OAuthProviderId,
|
|
740
|
+
existing: ProviderSettings | undefined,
|
|
676
741
|
credentials: {
|
|
677
742
|
access: string;
|
|
678
743
|
refresh: string;
|
|
679
744
|
expires: number;
|
|
680
745
|
accountId?: string;
|
|
681
746
|
},
|
|
682
|
-
):
|
|
747
|
+
): ProviderSettings {
|
|
683
748
|
const auth = {
|
|
684
749
|
...(existing?.auth ?? {}),
|
|
685
750
|
accessToken: toProviderApiKey(providerId, credentials),
|
|
686
751
|
refreshToken: credentials.refresh,
|
|
687
752
|
accountId: credentials.accountId,
|
|
688
753
|
expiresAt: credentials.expires,
|
|
689
|
-
} as
|
|
754
|
+
} as ProviderSettings["auth"] & { expiresAt?: number };
|
|
690
755
|
|
|
691
|
-
const merged:
|
|
756
|
+
const merged: ProviderSettings = {
|
|
692
757
|
...(existing ?? {
|
|
693
|
-
provider: providerId as
|
|
758
|
+
provider: providerId as ProviderSettings["provider"],
|
|
694
759
|
}),
|
|
695
|
-
provider: providerId as
|
|
760
|
+
provider: providerId as ProviderSettings["provider"],
|
|
696
761
|
auth,
|
|
697
762
|
};
|
|
698
763
|
manager.saveProviderSettings(merged, { tokenSource: "oauth" });
|
|
@@ -700,7 +765,7 @@ export function saveLocalProviderOAuthCredentials(
|
|
|
700
765
|
}
|
|
701
766
|
|
|
702
767
|
export function resolveLocalClineAuthToken(
|
|
703
|
-
settings:
|
|
768
|
+
settings: ProviderSettings | undefined,
|
|
704
769
|
): string | undefined {
|
|
705
770
|
const token = settings?.auth?.accessToken?.trim() || settings?.apiKey?.trim();
|
|
706
771
|
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";
|
|
@@ -153,23 +153,31 @@ export function withLatestAssistantTurnMetadata(
|
|
|
153
153
|
assistantIndexes.push(next.length - 1 - lastAssistantIndex);
|
|
154
154
|
}
|
|
155
155
|
|
|
156
|
-
const
|
|
156
|
+
const lastAssistantIndex = assistantIndexes[assistantIndexes.length - 1];
|
|
157
157
|
for (const targetIndex of assistantIndexes) {
|
|
158
158
|
const target = next[targetIndex];
|
|
159
|
+
// Use per-turn metrics already stamped on the message if available.
|
|
160
|
+
// Only fall back to result.usage (total run usage) for the terminal
|
|
161
|
+
// assistant message when no per-turn metrics are present, to avoid
|
|
162
|
+
// attaching session totals to intermediate turn messages.
|
|
163
|
+
let metrics = target.metrics;
|
|
164
|
+
if (!metrics && targetIndex === lastAssistantIndex) {
|
|
165
|
+
const usage = result.usage;
|
|
166
|
+
metrics = {
|
|
167
|
+
inputTokens: usage.inputTokens,
|
|
168
|
+
outputTokens: usage.outputTokens,
|
|
169
|
+
cacheReadTokens: usage.cacheReadTokens ?? 0,
|
|
170
|
+
cacheWriteTokens: usage.cacheWriteTokens ?? 0,
|
|
171
|
+
cost: usage.totalCost,
|
|
172
|
+
};
|
|
173
|
+
}
|
|
159
174
|
next[targetIndex] = {
|
|
160
175
|
...normalizeStoredMessageModelMetadata(target, {
|
|
161
176
|
id: result.model.id,
|
|
162
177
|
provider: result.model.provider,
|
|
163
178
|
family: result.model.info?.family,
|
|
164
179
|
}),
|
|
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
|
-
},
|
|
180
|
+
...(metrics ? { metrics } : {}),
|
|
173
181
|
ts: target.ts ?? result.endedAt.getTime(),
|
|
174
182
|
};
|
|
175
183
|
}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import type { ITelemetryService } from "@clinebot/shared";
|
|
2
2
|
import { resolveDocumentsExtensionPath } from "@clinebot/shared/storage";
|
|
3
3
|
import { listHookConfigFiles } from "../extensions/config/hooks-config-loader";
|
|
4
|
-
import type { SessionSource } from "../types/common";
|
|
5
4
|
import type { CoreSessionConfig } from "../types/config";
|
|
6
5
|
import {
|
|
7
6
|
captureHookDiscovery,
|
|
@@ -14,10 +13,15 @@ import {
|
|
|
14
13
|
} from "./telemetry/core-events";
|
|
15
14
|
import type { enrichPromptWithMentions } from "./workspace";
|
|
16
15
|
|
|
16
|
+
/**
|
|
17
|
+
* Emits local-only session creation telemetry (task.created/restarted and
|
|
18
|
+
* hook discovery). The transport-agnostic `session.started` event is
|
|
19
|
+
* emitted from `ClineCore.start` so it fires for every backend (local,
|
|
20
|
+
* hub, remote) at the outer API boundary.
|
|
21
|
+
*/
|
|
17
22
|
export function emitSessionCreationTelemetry(
|
|
18
23
|
config: CoreSessionConfig,
|
|
19
24
|
sessionId: string,
|
|
20
|
-
source: SessionSource,
|
|
21
25
|
isRestart: boolean,
|
|
22
26
|
workspacePath: string,
|
|
23
27
|
agentIdentity?: Partial<TelemetryAgentIdentityProperties>,
|
|
@@ -36,19 +40,6 @@ export function emitSessionCreationTelemetry(
|
|
|
36
40
|
});
|
|
37
41
|
}
|
|
38
42
|
captureHookDiscoveryTelemetry(config.telemetry, { workspacePath });
|
|
39
|
-
config.telemetry?.capture({
|
|
40
|
-
event: "session.started",
|
|
41
|
-
properties: {
|
|
42
|
-
sessionId,
|
|
43
|
-
source,
|
|
44
|
-
providerId: config.providerId,
|
|
45
|
-
modelId: config.modelId,
|
|
46
|
-
enableTools: config.enableTools,
|
|
47
|
-
enableSpawnAgent: config.enableSpawnAgent,
|
|
48
|
-
enableAgentTeams: config.enableAgentTeams,
|
|
49
|
-
...agentIdentity,
|
|
50
|
-
},
|
|
51
|
-
});
|
|
52
43
|
}
|
|
53
44
|
|
|
54
45
|
export function captureHookDiscoveryTelemetry(
|
|
@@ -138,16 +138,12 @@ export class FileTeamStore implements TeamStore {
|
|
|
138
138
|
|
|
139
139
|
loadRuntime(teamName: string): TeamRuntimeLoadResult {
|
|
140
140
|
const envelope = this.readEnvelope(teamName);
|
|
141
|
-
const interruptedRunIds = this.markInProgressRunsInterrupted(
|
|
142
|
-
teamName,
|
|
143
|
-
"runtime_recovered",
|
|
144
|
-
);
|
|
145
141
|
return {
|
|
146
142
|
state: envelope?.teamState
|
|
147
143
|
? reviveTeamRuntimeStateDates(envelope.teamState)
|
|
148
144
|
: undefined,
|
|
149
145
|
teammates: envelope?.teammates ?? [],
|
|
150
|
-
interruptedRunIds,
|
|
146
|
+
interruptedRunIds: [],
|
|
151
147
|
};
|
|
152
148
|
}
|
|
153
149
|
|
|
@@ -1,10 +1,17 @@
|
|
|
1
|
-
import { existsSync,
|
|
1
|
+
import { existsSync, readFileSync } 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";
|
|
10
|
+
import {
|
|
11
|
+
readModelsFileSync,
|
|
12
|
+
type StoredModelsFile,
|
|
13
|
+
writeModelsFileSync,
|
|
14
|
+
} from "../providers/local-provider-registry";
|
|
8
15
|
import type { ProviderSettingsManager } from "./provider-settings-manager";
|
|
9
16
|
|
|
10
17
|
type LegacyMode = "plan" | "act";
|
|
@@ -150,27 +157,6 @@ interface LegacyProviderStorage {
|
|
|
150
157
|
secrets: LegacySecrets;
|
|
151
158
|
}
|
|
152
159
|
|
|
153
|
-
type StoredModelsFile = {
|
|
154
|
-
version: 1;
|
|
155
|
-
providers: Record<
|
|
156
|
-
string,
|
|
157
|
-
{
|
|
158
|
-
provider: {
|
|
159
|
-
name: string;
|
|
160
|
-
baseUrl: string;
|
|
161
|
-
defaultModelId?: string;
|
|
162
|
-
};
|
|
163
|
-
models: Record<
|
|
164
|
-
string,
|
|
165
|
-
{
|
|
166
|
-
id: string;
|
|
167
|
-
name: string;
|
|
168
|
-
}
|
|
169
|
-
>;
|
|
170
|
-
}
|
|
171
|
-
>;
|
|
172
|
-
};
|
|
173
|
-
|
|
174
160
|
const LEGACY_OPENAI_COMPATIBLE_PROVIDER_ID = "openai";
|
|
175
161
|
|
|
176
162
|
export interface MigrateLegacyProviderSettingsOptions {
|
|
@@ -254,29 +240,6 @@ function readJsonObject<T extends object>(filePath: string): T | undefined {
|
|
|
254
240
|
return undefined;
|
|
255
241
|
}
|
|
256
242
|
|
|
257
|
-
function readModelsFile(filePath: string): StoredModelsFile {
|
|
258
|
-
const parsed = readJsonObject<StoredModelsFile>(filePath);
|
|
259
|
-
if (
|
|
260
|
-
parsed?.version === 1 &&
|
|
261
|
-
parsed.providers &&
|
|
262
|
-
typeof parsed.providers === "object"
|
|
263
|
-
) {
|
|
264
|
-
return parsed;
|
|
265
|
-
}
|
|
266
|
-
return {
|
|
267
|
-
version: 1,
|
|
268
|
-
providers: {},
|
|
269
|
-
};
|
|
270
|
-
}
|
|
271
|
-
|
|
272
|
-
function writeModelsFile(filePath: string, state: StoredModelsFile): void {
|
|
273
|
-
const dir = dirname(filePath);
|
|
274
|
-
if (!existsSync(dir)) {
|
|
275
|
-
mkdirSync(dir, { recursive: true });
|
|
276
|
-
}
|
|
277
|
-
writeFileSync(filePath, `${JSON.stringify(state, null, 2)}\n`, "utf8");
|
|
278
|
-
}
|
|
279
|
-
|
|
280
243
|
function resolveLegacyStorage(
|
|
281
244
|
options: MigrateLegacyProviderSettingsOptions,
|
|
282
245
|
): LegacyProviderStorage | undefined {
|
|
@@ -659,7 +622,7 @@ function buildLegacyProviderSettings(
|
|
|
659
622
|
...(timeout ? { timeout } : {}),
|
|
660
623
|
...providerSpecific,
|
|
661
624
|
};
|
|
662
|
-
const parsed =
|
|
625
|
+
const parsed = ProviderSettingsSchema.safeParse(settings);
|
|
663
626
|
if (!parsed.success) {
|
|
664
627
|
return undefined;
|
|
665
628
|
}
|
|
@@ -758,7 +721,7 @@ export function migrateLegacyProviderSettings(
|
|
|
758
721
|
dirname(options.providerSettingsManager.getFilePath()),
|
|
759
722
|
"models.json",
|
|
760
723
|
);
|
|
761
|
-
const modelsState =
|
|
724
|
+
const modelsState = readModelsFileSync(modelsPath);
|
|
762
725
|
let addedCustomProviderCount = 0;
|
|
763
726
|
|
|
764
727
|
for (const legacyProviderId of candidates) {
|
|
@@ -815,7 +778,7 @@ export function migrateLegacyProviderSettings(
|
|
|
815
778
|
|
|
816
779
|
options.providerSettingsManager.write(next);
|
|
817
780
|
if (addedCustomProviderCount > 0) {
|
|
818
|
-
|
|
781
|
+
writeModelsFileSync(modelsPath, modelsState);
|
|
819
782
|
}
|
|
820
783
|
|
|
821
784
|
return {
|
|
@@ -1,17 +1,21 @@
|
|
|
1
1
|
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
2
2
|
import { basename, dirname } from "node:path";
|
|
3
3
|
import { resolveProviderSettingsPath } from "@clinebot/shared/storage";
|
|
4
|
+
import { getLiveModelsCatalog } from "../..";
|
|
4
5
|
import {
|
|
5
6
|
emptyStoredProviderSettings,
|
|
6
7
|
type ProviderConfig,
|
|
7
8
|
type ProviderSettings,
|
|
8
|
-
ProviderSettingsSchema,
|
|
9
|
+
ProviderSettingsSchemaTyped as ProviderSettingsSchema,
|
|
9
10
|
type ProviderTokenSource,
|
|
10
11
|
type StoredProviderSettings,
|
|
11
12
|
StoredProviderSettingsSchema,
|
|
12
13
|
toProviderConfig,
|
|
13
14
|
} from "../../types/provider-settings";
|
|
14
|
-
import {
|
|
15
|
+
import {
|
|
16
|
+
ensureCustomProvidersLoadedSync,
|
|
17
|
+
registerConfiguredProvidersFromSettings,
|
|
18
|
+
} from "../providers/local-provider-registry";
|
|
15
19
|
import { migrateLegacyProviderSettings } from "./provider-settings-legacy-migration";
|
|
16
20
|
|
|
17
21
|
function nowIso(): string {
|
|
@@ -53,6 +57,7 @@ export class ProviderSettingsManager {
|
|
|
53
57
|
});
|
|
54
58
|
}
|
|
55
59
|
ensureCustomProvidersLoadedSync(this);
|
|
60
|
+
registerConfiguredProvidersFromSettings(this.read());
|
|
56
61
|
}
|
|
57
62
|
|
|
58
63
|
getFilePath(): string {
|
|
@@ -69,6 +74,7 @@ export class ProviderSettingsManager {
|
|
|
69
74
|
const parsed = JSON.parse(raw) as unknown;
|
|
70
75
|
const result = StoredProviderSettingsSchema.safeParse(parsed);
|
|
71
76
|
if (result.success) {
|
|
77
|
+
registerConfiguredProvidersFromSettings(result.data);
|
|
72
78
|
return result.data;
|
|
73
79
|
}
|
|
74
80
|
} catch {
|
|
@@ -89,6 +95,7 @@ export class ProviderSettingsManager {
|
|
|
89
95
|
`${JSON.stringify(normalized, null, 2)}\n`,
|
|
90
96
|
"utf8",
|
|
91
97
|
);
|
|
98
|
+
registerConfiguredProvidersFromSettings(normalized);
|
|
92
99
|
}
|
|
93
100
|
|
|
94
101
|
saveProviderSettings(
|
|
@@ -149,4 +156,12 @@ export class ProviderSettingsManager {
|
|
|
149
156
|
}
|
|
150
157
|
return toProviderConfig(settings);
|
|
151
158
|
}
|
|
159
|
+
|
|
160
|
+
async refreshCatalog(): Promise<void> {
|
|
161
|
+
try {
|
|
162
|
+
await getLiveModelsCatalog({});
|
|
163
|
+
} catch {
|
|
164
|
+
// Ignore errors
|
|
165
|
+
}
|
|
166
|
+
}
|
|
152
167
|
}
|
|
@@ -359,14 +359,10 @@ export class SqliteTeamStore implements TeamStore {
|
|
|
359
359
|
const teammates = snapshotRow
|
|
360
360
|
? parseTeammatesJson(snapshotRow.teammates_json)
|
|
361
361
|
: [];
|
|
362
|
-
const interruptedRunIds = this.markInProgressRunsInterrupted(
|
|
363
|
-
safeTeamName,
|
|
364
|
-
"runtime_recovered",
|
|
365
|
-
);
|
|
366
362
|
return {
|
|
367
363
|
state,
|
|
368
364
|
teammates,
|
|
369
|
-
interruptedRunIds,
|
|
365
|
+
interruptedRunIds: [],
|
|
370
366
|
};
|
|
371
367
|
}
|
|
372
368
|
|
|
@@ -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
|
+
}
|