@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
package/src/transports/local.ts
CHANGED
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
import { readFile, stat } from "node:fs/promises";
|
|
2
2
|
import { homedir } from "node:os";
|
|
3
3
|
import { isAbsolute, join, resolve } from "node:path";
|
|
4
|
-
import { Agent } from "@clinebot/agents";
|
|
5
4
|
import type * as LlmsProviders from "@clinebot/llms";
|
|
6
5
|
import {
|
|
7
6
|
type AgentConfig,
|
|
8
7
|
type AgentEvent,
|
|
9
8
|
type AgentResult,
|
|
9
|
+
type AutomationEventEnvelope,
|
|
10
|
+
type BasicLogger,
|
|
11
|
+
type BasicLogMetadata,
|
|
10
12
|
createSessionId,
|
|
11
13
|
type ITelemetryService,
|
|
12
14
|
isLikelyAuthError,
|
|
@@ -28,7 +30,13 @@ import { createSpawnAgentTool, type TeamEvent } from "../extensions/tools/team";
|
|
|
28
30
|
import type { HookEventPayload } from "../hooks";
|
|
29
31
|
import { DefaultRuntimeBuilder } from "../runtime/runtime-builder";
|
|
30
32
|
import type {
|
|
33
|
+
PendingPromptMutationResult,
|
|
34
|
+
PendingPromptsAction,
|
|
35
|
+
PendingPromptsDeleteInput,
|
|
36
|
+
PendingPromptsListInput,
|
|
37
|
+
PendingPromptsUpdateInput,
|
|
31
38
|
RuntimeHost,
|
|
39
|
+
RuntimeHostSubscribeOptions,
|
|
32
40
|
SendSessionInput,
|
|
33
41
|
SessionAccumulatedUsage,
|
|
34
42
|
StartSessionInput,
|
|
@@ -40,6 +48,7 @@ import {
|
|
|
40
48
|
RuntimeOAuthTokenManager,
|
|
41
49
|
} from "../runtime/runtime-oauth-token-manager";
|
|
42
50
|
import type { RuntimeBuilder } from "../runtime/session-runtime";
|
|
51
|
+
import { SessionRuntime } from "../runtime/session-runtime-orchestrator";
|
|
43
52
|
import {
|
|
44
53
|
type AgentEventContext,
|
|
45
54
|
buildTelemetryAgentIdentity,
|
|
@@ -47,6 +56,7 @@ import {
|
|
|
47
56
|
handleAgentEvent,
|
|
48
57
|
} from "../services/agent-events";
|
|
49
58
|
import { resolveWorkspacePath } from "../services/config";
|
|
59
|
+
import { filterDisabledTools } from "../services/global-settings";
|
|
50
60
|
import { prepareLocalRuntimeBootstrap } from "../services/local-runtime-bootstrap";
|
|
51
61
|
import { nowIso } from "../services/session-artifacts";
|
|
52
62
|
import {
|
|
@@ -73,15 +83,14 @@ import {
|
|
|
73
83
|
} from "../services/usage";
|
|
74
84
|
import { enrichPromptWithMentions } from "../services/workspace";
|
|
75
85
|
import type { FileSessionService } from "../session/file-session-service";
|
|
76
|
-
import type { RpcCoreSessionService } from "../session/rpc-session-service";
|
|
77
86
|
import {
|
|
78
87
|
type SessionManifest,
|
|
79
88
|
SessionManifestSchema,
|
|
80
89
|
} from "../session/session-manifest";
|
|
90
|
+
import type { SessionRow } from "../session/session-row";
|
|
81
91
|
import type {
|
|
82
92
|
CoreSessionService,
|
|
83
93
|
RootSessionArtifacts,
|
|
84
|
-
SessionRow,
|
|
85
94
|
} from "../session/session-service";
|
|
86
95
|
import {
|
|
87
96
|
buildTeamRunContinuationPrompt,
|
|
@@ -96,8 +105,12 @@ import {
|
|
|
96
105
|
} from "../session/session-team-coordination";
|
|
97
106
|
import { SessionSource, type SessionStatus } from "../types/common";
|
|
98
107
|
import type { CoreSessionConfig } from "../types/config";
|
|
99
|
-
import type { CoreSessionEvent } from "../types/events";
|
|
100
|
-
import type {
|
|
108
|
+
import type { CoreSessionEvent, SessionPendingPrompt } from "../types/events";
|
|
109
|
+
import type {
|
|
110
|
+
ActiveSession,
|
|
111
|
+
PendingPrompt,
|
|
112
|
+
PreparedTurnInput,
|
|
113
|
+
} from "../types/session";
|
|
101
114
|
import type { SessionRecord } from "../types/sessions";
|
|
102
115
|
import {
|
|
103
116
|
cloneAccumulatedUsage,
|
|
@@ -106,10 +119,7 @@ import {
|
|
|
106
119
|
replaySubagentHookEvent,
|
|
107
120
|
} from "./runtime-host-support";
|
|
108
121
|
|
|
109
|
-
type SessionBackend =
|
|
110
|
-
| CoreSessionService
|
|
111
|
-
| RpcCoreSessionService
|
|
112
|
-
| FileSessionService;
|
|
122
|
+
type SessionBackend = CoreSessionService | FileSessionService;
|
|
113
123
|
|
|
114
124
|
const MAX_SCAN_LIMIT = 5000;
|
|
115
125
|
const MAX_USER_FILE_BYTES = 20 * 1_000 * 1_024;
|
|
@@ -129,13 +139,57 @@ async function loadUserFileContent(path: string): Promise<string> {
|
|
|
129
139
|
return content;
|
|
130
140
|
}
|
|
131
141
|
|
|
142
|
+
function toActiveSessionRecord(session: ActiveSession): SessionRecord {
|
|
143
|
+
return {
|
|
144
|
+
sessionId: session.sessionId,
|
|
145
|
+
source: session.source,
|
|
146
|
+
pid: process.pid,
|
|
147
|
+
startedAt: session.startedAt,
|
|
148
|
+
endedAt: session.endedAt ?? null,
|
|
149
|
+
exitCode: session.exitCode ?? null,
|
|
150
|
+
status: session.status,
|
|
151
|
+
interactive: session.interactive,
|
|
152
|
+
provider: session.config.providerId,
|
|
153
|
+
model: session.config.modelId,
|
|
154
|
+
cwd: session.config.cwd,
|
|
155
|
+
workspaceRoot: resolveWorkspacePath(session.config),
|
|
156
|
+
teamName: session.config.teamName?.trim() || undefined,
|
|
157
|
+
enableTools: session.config.enableTools,
|
|
158
|
+
enableSpawn: session.config.enableSpawnAgent,
|
|
159
|
+
enableTeams: session.config.enableAgentTeams,
|
|
160
|
+
parentSessionId:
|
|
161
|
+
typeof session.sessionMetadata?.parentSessionId === "string"
|
|
162
|
+
? session.sessionMetadata.parentSessionId
|
|
163
|
+
: undefined,
|
|
164
|
+
parentAgentId:
|
|
165
|
+
typeof session.sessionMetadata?.parentAgentId === "string"
|
|
166
|
+
? session.sessionMetadata.parentAgentId
|
|
167
|
+
: undefined,
|
|
168
|
+
agentId:
|
|
169
|
+
typeof session.sessionMetadata?.agentId === "string"
|
|
170
|
+
? session.sessionMetadata.agentId
|
|
171
|
+
: undefined,
|
|
172
|
+
conversationId:
|
|
173
|
+
typeof session.sessionMetadata?.conversationId === "string"
|
|
174
|
+
? session.sessionMetadata.conversationId
|
|
175
|
+
: undefined,
|
|
176
|
+
isSubagent:
|
|
177
|
+
typeof session.sessionMetadata?.isSubagent === "boolean"
|
|
178
|
+
? session.sessionMetadata.isSubagent
|
|
179
|
+
: false,
|
|
180
|
+
prompt: session.pendingPrompt,
|
|
181
|
+
metadata: session.sessionMetadata,
|
|
182
|
+
messagesPath: session.artifacts?.messagesPath,
|
|
183
|
+
updatedAt: session.startedAt,
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
|
|
132
187
|
export interface LocalRuntimeHostOptions {
|
|
133
188
|
distinctId?: string;
|
|
134
189
|
sessionService: SessionBackend;
|
|
135
190
|
runtimeBuilder?: RuntimeBuilder;
|
|
136
|
-
createAgent?: (config: AgentConfig) =>
|
|
191
|
+
createAgent?: (config: AgentConfig) => SessionRuntime;
|
|
137
192
|
defaultToolExecutors?: Partial<ToolExecutors>;
|
|
138
|
-
teamToolsFactory?: import("../runtime/session-runtime").TeamToolsFactory;
|
|
139
193
|
toolPolicies?: AgentConfig["toolPolicies"];
|
|
140
194
|
providerSettingsManager?: ProviderSettingsManager;
|
|
141
195
|
oauthTokenManager?: RuntimeOAuthTokenManager;
|
|
@@ -143,19 +197,25 @@ export interface LocalRuntimeHostOptions {
|
|
|
143
197
|
requestToolApproval?: (
|
|
144
198
|
request: ToolApprovalRequest,
|
|
145
199
|
) => Promise<ToolApprovalResult>;
|
|
200
|
+
/**
|
|
201
|
+
* Default custom `fetch` implementation threaded into every
|
|
202
|
+
* `ProviderConfig.fetch` built during local session bootstrap. Used by
|
|
203
|
+
* the AI gateway providers when issuing HTTP requests.
|
|
204
|
+
*/
|
|
205
|
+
fetch?: typeof fetch;
|
|
146
206
|
}
|
|
147
207
|
|
|
148
208
|
export class LocalRuntimeHost implements RuntimeHost {
|
|
149
209
|
public readonly runtimeAddress = undefined;
|
|
150
210
|
private readonly sessionService: SessionBackend;
|
|
151
211
|
private readonly runtimeBuilder: RuntimeBuilder;
|
|
152
|
-
private readonly createAgentInstance: (config: AgentConfig) =>
|
|
212
|
+
private readonly createAgentInstance: (config: AgentConfig) => SessionRuntime;
|
|
153
213
|
private readonly defaultToolExecutors?: Partial<ToolExecutors>;
|
|
154
|
-
private readonly teamToolsFactory?: import("../runtime/session-runtime").TeamToolsFactory;
|
|
155
214
|
private readonly defaultToolPolicies?: AgentConfig["toolPolicies"];
|
|
156
215
|
private readonly providerSettingsManager: ProviderSettingsManager;
|
|
157
216
|
private readonly oauthTokenManager: RuntimeOAuthTokenManager;
|
|
158
217
|
private readonly defaultTelemetry?: ITelemetryService;
|
|
218
|
+
private readonly defaultFetch?: typeof fetch;
|
|
159
219
|
private readonly defaultRequestToolApproval?: (
|
|
160
220
|
request: ToolApprovalRequest,
|
|
161
221
|
) => Promise<ToolApprovalResult>;
|
|
@@ -174,9 +234,8 @@ export class LocalRuntimeHost implements RuntimeHost {
|
|
|
174
234
|
this.sessionService = options.sessionService;
|
|
175
235
|
this.runtimeBuilder = options.runtimeBuilder ?? new DefaultRuntimeBuilder();
|
|
176
236
|
this.createAgentInstance =
|
|
177
|
-
options.createAgent ?? ((config) => new
|
|
237
|
+
options.createAgent ?? ((config) => new SessionRuntime(config));
|
|
178
238
|
this.defaultToolExecutors = options.defaultToolExecutors;
|
|
179
|
-
this.teamToolsFactory = options.teamToolsFactory;
|
|
180
239
|
this.defaultToolPolicies = options.toolPolicies;
|
|
181
240
|
this.providerSettingsManager =
|
|
182
241
|
options.providerSettingsManager ?? new ProviderSettingsManager();
|
|
@@ -188,6 +247,7 @@ export class LocalRuntimeHost implements RuntimeHost {
|
|
|
188
247
|
});
|
|
189
248
|
this.defaultTelemetry = options.telemetry;
|
|
190
249
|
this.defaultTelemetry?.setDistinctId(distinctId);
|
|
250
|
+
this.defaultFetch = options.fetch;
|
|
191
251
|
this.defaultRequestToolApproval = options.requestToolApproval;
|
|
192
252
|
}
|
|
193
253
|
|
|
@@ -198,21 +258,7 @@ export class LocalRuntimeHost implements RuntimeHost {
|
|
|
198
258
|
const startedAt = nowIso();
|
|
199
259
|
const requestedSessionId = input.config.sessionId?.trim() ?? "";
|
|
200
260
|
const sessionId = requestedSessionId || createSessionId();
|
|
201
|
-
const
|
|
202
|
-
? await this.getRow(sessionId)
|
|
203
|
-
: undefined;
|
|
204
|
-
const startInput: StartSessionInput =
|
|
205
|
-
resumedRow &&
|
|
206
|
-
!input.config.teamName?.trim() &&
|
|
207
|
-
resumedRow.teamName?.trim()
|
|
208
|
-
? {
|
|
209
|
-
...input,
|
|
210
|
-
config: {
|
|
211
|
-
...input.config,
|
|
212
|
-
teamName: resumedRow.teamName,
|
|
213
|
-
},
|
|
214
|
-
}
|
|
215
|
-
: input;
|
|
261
|
+
const startInput: StartSessionInput = input;
|
|
216
262
|
this.usageBySession.set(sessionId, createInitialAccumulatedUsage());
|
|
217
263
|
|
|
218
264
|
const sessionsDir =
|
|
@@ -250,6 +296,15 @@ export class LocalRuntimeHost implements RuntimeHost {
|
|
|
250
296
|
messages_path: messagesPath,
|
|
251
297
|
});
|
|
252
298
|
|
|
299
|
+
const sessionToolExecutors =
|
|
300
|
+
input.localRuntime?.defaultToolExecutors ?? this.defaultToolExecutors;
|
|
301
|
+
const inputLocalConfig = input.localRuntime?.configOverrides as
|
|
302
|
+
| Partial<CoreSessionConfig>
|
|
303
|
+
| undefined;
|
|
304
|
+
const pluginEventFallbackLogger =
|
|
305
|
+
inputLocalConfig?.extensionContext?.logger ?? inputLocalConfig?.logger;
|
|
306
|
+
const pluginEventFallbackAutomation =
|
|
307
|
+
inputLocalConfig?.extensionContext?.automation;
|
|
253
308
|
let bootstrap!: Awaited<ReturnType<typeof prepareLocalRuntimeBootstrap>>;
|
|
254
309
|
bootstrap = await prepareLocalRuntimeBootstrap({
|
|
255
310
|
input: startInput,
|
|
@@ -257,16 +312,31 @@ export class LocalRuntimeHost implements RuntimeHost {
|
|
|
257
312
|
sessionId,
|
|
258
313
|
providerSettingsManager: this.providerSettingsManager,
|
|
259
314
|
defaultTelemetry: this.defaultTelemetry,
|
|
260
|
-
defaultToolExecutors:
|
|
261
|
-
teamToolsFactory: this.teamToolsFactory,
|
|
315
|
+
defaultToolExecutors: sessionToolExecutors,
|
|
262
316
|
defaultToolPolicies: this.defaultToolPolicies,
|
|
263
317
|
defaultRequestToolApproval: this.defaultRequestToolApproval,
|
|
264
|
-
|
|
318
|
+
defaultFetch: this.defaultFetch,
|
|
319
|
+
onPluginEvent: (event) => {
|
|
320
|
+
if (event.name === "plugin_log") {
|
|
321
|
+
this.handlePluginLog(
|
|
322
|
+
sessionId,
|
|
323
|
+
event.payload,
|
|
324
|
+
pluginEventFallbackLogger,
|
|
325
|
+
);
|
|
326
|
+
return;
|
|
327
|
+
}
|
|
328
|
+
void this.handlePluginEvent(
|
|
329
|
+
sessionId,
|
|
330
|
+
event,
|
|
331
|
+
pluginEventFallbackAutomation,
|
|
332
|
+
);
|
|
333
|
+
},
|
|
265
334
|
onTeamEvent: (event: TeamEvent) => {
|
|
266
335
|
void this.handleTeamEvent(sessionId, event);
|
|
267
336
|
bootstrap.config.onTeamEvent?.(event);
|
|
268
337
|
},
|
|
269
|
-
createSpawnTool: () =>
|
|
338
|
+
createSpawnTool: () =>
|
|
339
|
+
this.createSpawnTool(bootstrap.config, sessionId, sessionToolExecutors),
|
|
270
340
|
readSessionMetadata: async () =>
|
|
271
341
|
(await this.get(sessionId))?.metadata as
|
|
272
342
|
| Record<string, unknown>
|
|
@@ -287,6 +357,7 @@ export class LocalRuntimeHost implements RuntimeHost {
|
|
|
287
357
|
const tools = [...runtime.tools, ...(configWithProvider.extraTools ?? [])];
|
|
288
358
|
|
|
289
359
|
const agentConfig = {
|
|
360
|
+
sessionId,
|
|
290
361
|
providerId: providerConfig.providerId,
|
|
291
362
|
modelId: providerConfig.modelId,
|
|
292
363
|
apiKey: providerConfig.apiKey,
|
|
@@ -319,10 +390,13 @@ export class LocalRuntimeHost implements RuntimeHost {
|
|
|
319
390
|
this.onAgentEvent(sessionId, configWithProvider, event),
|
|
320
391
|
} as AgentConfig;
|
|
321
392
|
const agent = this.createAgentInstance(agentConfig);
|
|
393
|
+
if (agentConfig.onEvent) {
|
|
394
|
+
agent.subscribeEvents(agentConfig.onEvent);
|
|
395
|
+
}
|
|
322
396
|
runtime.registerLeadAgent?.(agent);
|
|
323
397
|
const rootAgentIdentity = buildTelemetryAgentIdentity({
|
|
324
|
-
agentId:
|
|
325
|
-
conversationId:
|
|
398
|
+
agentId: agent.getAgentId(),
|
|
399
|
+
conversationId: agent.getConversationId(),
|
|
326
400
|
teamId: runtime.teamRuntime?.getTeamId(),
|
|
327
401
|
teamName: runtime.teamRuntime?.getTeamName(),
|
|
328
402
|
teamRole: runtime.teamRuntime ? "lead" : undefined,
|
|
@@ -330,7 +404,6 @@ export class LocalRuntimeHost implements RuntimeHost {
|
|
|
330
404
|
emitSessionCreationTelemetry(
|
|
331
405
|
configWithProvider,
|
|
332
406
|
sessionId,
|
|
333
|
-
source,
|
|
334
407
|
requestedSessionId.length > 0,
|
|
335
408
|
workspacePath,
|
|
336
409
|
rootAgentIdentity,
|
|
@@ -348,7 +421,7 @@ export class LocalRuntimeHost implements RuntimeHost {
|
|
|
348
421
|
ulid: sessionId,
|
|
349
422
|
teamId: runtime.teamRuntime.getTeamId(),
|
|
350
423
|
teamName: runtime.teamRuntime.getTeamName(),
|
|
351
|
-
leadAgentId:
|
|
424
|
+
leadAgentId: agent.getAgentId(),
|
|
352
425
|
restoredFromPersistence: runtime.teamRestoredFromPersistence === true,
|
|
353
426
|
});
|
|
354
427
|
}
|
|
@@ -363,6 +436,7 @@ export class LocalRuntimeHost implements RuntimeHost {
|
|
|
363
436
|
runtime,
|
|
364
437
|
agent,
|
|
365
438
|
started: false,
|
|
439
|
+
status: "running",
|
|
366
440
|
aborting: false,
|
|
367
441
|
interactive: input.interactive === true,
|
|
368
442
|
persistedMessages: startInput.initialMessages,
|
|
@@ -375,6 +449,18 @@ export class LocalRuntimeHost implements RuntimeHost {
|
|
|
375
449
|
};
|
|
376
450
|
this.sessions.set(sessionId, active);
|
|
377
451
|
this.emitStatus(sessionId, "running");
|
|
452
|
+
if ((startInput.initialMessages?.length ?? 0) > 0) {
|
|
453
|
+
await this.ensureSessionPersisted(active);
|
|
454
|
+
await this.invoke<void>(
|
|
455
|
+
"persistSessionMessages",
|
|
456
|
+
active.sessionId,
|
|
457
|
+
startInput.initialMessages,
|
|
458
|
+
active.config.systemPrompt,
|
|
459
|
+
);
|
|
460
|
+
if (!startInput.prompt?.trim()) {
|
|
461
|
+
await this.updateStatus(active, "completed", 0);
|
|
462
|
+
}
|
|
463
|
+
}
|
|
378
464
|
|
|
379
465
|
let result: AgentResult | undefined;
|
|
380
466
|
try {
|
|
@@ -404,6 +490,10 @@ export class LocalRuntimeHost implements RuntimeHost {
|
|
|
404
490
|
|
|
405
491
|
async send(input: SendSessionInput): Promise<AgentResult | undefined> {
|
|
406
492
|
const session = this.getSessionOrThrow(input.sessionId);
|
|
493
|
+
const canStartRun = session.agent.canStartRun();
|
|
494
|
+
const delivery =
|
|
495
|
+
input.delivery ??
|
|
496
|
+
(session.interactive && !canStartRun ? ("queue" as const) : undefined);
|
|
407
497
|
session.config.telemetry?.capture({
|
|
408
498
|
event: "session.input_sent",
|
|
409
499
|
properties: {
|
|
@@ -411,13 +501,13 @@ export class LocalRuntimeHost implements RuntimeHost {
|
|
|
411
501
|
promptLength: input.prompt.length,
|
|
412
502
|
userImageCount: input.userImages?.length ?? 0,
|
|
413
503
|
userFileCount: input.userFiles?.length ?? 0,
|
|
414
|
-
delivery:
|
|
504
|
+
delivery: delivery ?? "immediate",
|
|
415
505
|
},
|
|
416
506
|
});
|
|
417
|
-
if (
|
|
507
|
+
if (delivery === "queue" || delivery === "steer") {
|
|
418
508
|
this.enqueuePendingPrompt(input.sessionId, {
|
|
419
509
|
prompt: input.prompt,
|
|
420
|
-
delivery
|
|
510
|
+
delivery,
|
|
421
511
|
userImages: input.userImages,
|
|
422
512
|
userFiles: input.userFiles,
|
|
423
513
|
});
|
|
@@ -442,6 +532,122 @@ export class LocalRuntimeHost implements RuntimeHost {
|
|
|
442
532
|
}
|
|
443
533
|
}
|
|
444
534
|
|
|
535
|
+
async pendingPrompts(
|
|
536
|
+
action: "list",
|
|
537
|
+
input: PendingPromptsListInput,
|
|
538
|
+
): Promise<SessionPendingPrompt[]>;
|
|
539
|
+
async pendingPrompts(
|
|
540
|
+
action: "update",
|
|
541
|
+
input: PendingPromptsUpdateInput,
|
|
542
|
+
): Promise<PendingPromptMutationResult>;
|
|
543
|
+
async pendingPrompts(
|
|
544
|
+
action: "delete",
|
|
545
|
+
input: PendingPromptsDeleteInput,
|
|
546
|
+
): Promise<PendingPromptMutationResult>;
|
|
547
|
+
async pendingPrompts(
|
|
548
|
+
action: PendingPromptsAction,
|
|
549
|
+
input:
|
|
550
|
+
| PendingPromptsListInput
|
|
551
|
+
| PendingPromptsUpdateInput
|
|
552
|
+
| PendingPromptsDeleteInput,
|
|
553
|
+
): Promise<SessionPendingPrompt[] | PendingPromptMutationResult> {
|
|
554
|
+
switch (action) {
|
|
555
|
+
case "list":
|
|
556
|
+
return this.listPendingPromptEntries(input.sessionId);
|
|
557
|
+
case "update":
|
|
558
|
+
return this.editPendingPromptEntry(input as PendingPromptsUpdateInput);
|
|
559
|
+
case "delete":
|
|
560
|
+
return this.deletePendingPromptEntry(
|
|
561
|
+
input as PendingPromptsDeleteInput,
|
|
562
|
+
);
|
|
563
|
+
}
|
|
564
|
+
}
|
|
565
|
+
|
|
566
|
+
private listPendingPromptEntries(sessionId: string): SessionPendingPrompt[] {
|
|
567
|
+
const session = this.sessions.get(sessionId);
|
|
568
|
+
return session ? this.snapshotPendingPrompts(session) : [];
|
|
569
|
+
}
|
|
570
|
+
|
|
571
|
+
private editPendingPromptEntry(
|
|
572
|
+
input: PendingPromptsUpdateInput,
|
|
573
|
+
): PendingPromptMutationResult {
|
|
574
|
+
const session = this.sessions.get(input.sessionId);
|
|
575
|
+
if (!session || session.aborting) {
|
|
576
|
+
return { sessionId: input.sessionId, prompts: [], updated: false };
|
|
577
|
+
}
|
|
578
|
+
const promptId = input.promptId.trim();
|
|
579
|
+
const index = session.pendingPrompts.findIndex(
|
|
580
|
+
(entry) => entry.id === promptId,
|
|
581
|
+
);
|
|
582
|
+
if (index < 0) {
|
|
583
|
+
return {
|
|
584
|
+
sessionId: input.sessionId,
|
|
585
|
+
prompts: this.snapshotPendingPrompts(session),
|
|
586
|
+
updated: false,
|
|
587
|
+
};
|
|
588
|
+
}
|
|
589
|
+
|
|
590
|
+
const existing = session.pendingPrompts[index]!;
|
|
591
|
+
const prompt =
|
|
592
|
+
input.prompt === undefined
|
|
593
|
+
? existing.prompt
|
|
594
|
+
: normalizeUserInput(input.prompt).trim();
|
|
595
|
+
if (!prompt) {
|
|
596
|
+
throw new Error("prompt cannot be empty");
|
|
597
|
+
}
|
|
598
|
+
const delivery = input.delivery ?? existing.delivery;
|
|
599
|
+
const next: PendingPrompt = {
|
|
600
|
+
...existing,
|
|
601
|
+
prompt,
|
|
602
|
+
delivery,
|
|
603
|
+
};
|
|
604
|
+
session.pendingPrompts.splice(index, 1);
|
|
605
|
+
if (delivery === "steer") {
|
|
606
|
+
session.pendingPrompts.unshift(next);
|
|
607
|
+
} else if (existing.delivery === "steer") {
|
|
608
|
+
session.pendingPrompts.push(next);
|
|
609
|
+
} else {
|
|
610
|
+
session.pendingPrompts.splice(index, 0, next);
|
|
611
|
+
}
|
|
612
|
+
this.emitPendingPrompts(session);
|
|
613
|
+
this.schedulePendingPromptDrain(input.sessionId, session);
|
|
614
|
+
return {
|
|
615
|
+
sessionId: input.sessionId,
|
|
616
|
+
prompts: this.snapshotPendingPrompts(session),
|
|
617
|
+
prompt: this.snapshotPendingPrompt(next),
|
|
618
|
+
updated: true,
|
|
619
|
+
};
|
|
620
|
+
}
|
|
621
|
+
|
|
622
|
+
private deletePendingPromptEntry(
|
|
623
|
+
input: PendingPromptsDeleteInput,
|
|
624
|
+
): PendingPromptMutationResult {
|
|
625
|
+
const session = this.sessions.get(input.sessionId);
|
|
626
|
+
if (!session || session.aborting) {
|
|
627
|
+
return { sessionId: input.sessionId, prompts: [], removed: false };
|
|
628
|
+
}
|
|
629
|
+
const promptId = input.promptId.trim();
|
|
630
|
+
const index = session.pendingPrompts.findIndex(
|
|
631
|
+
(entry) => entry.id === promptId,
|
|
632
|
+
);
|
|
633
|
+
if (index < 0) {
|
|
634
|
+
return {
|
|
635
|
+
sessionId: input.sessionId,
|
|
636
|
+
prompts: this.snapshotPendingPrompts(session),
|
|
637
|
+
removed: false,
|
|
638
|
+
};
|
|
639
|
+
}
|
|
640
|
+
const [removed] = session.pendingPrompts.splice(index, 1);
|
|
641
|
+
this.emitPendingPrompts(session);
|
|
642
|
+
this.schedulePendingPromptDrain(input.sessionId, session);
|
|
643
|
+
return {
|
|
644
|
+
sessionId: input.sessionId,
|
|
645
|
+
prompts: this.snapshotPendingPrompts(session),
|
|
646
|
+
prompt: removed ? this.snapshotPendingPrompt(removed) : undefined,
|
|
647
|
+
removed: true,
|
|
648
|
+
};
|
|
649
|
+
}
|
|
650
|
+
|
|
445
651
|
async getAccumulatedUsage(
|
|
446
652
|
sessionId: string,
|
|
447
653
|
): Promise<SessionAccumulatedUsage | undefined> {
|
|
@@ -460,11 +666,7 @@ export class LocalRuntimeHost implements RuntimeHost {
|
|
|
460
666
|
session.pendingPrompts.length = 0;
|
|
461
667
|
this.emitPendingPrompts(session);
|
|
462
668
|
}
|
|
463
|
-
(
|
|
464
|
-
session.agent as Agent & {
|
|
465
|
-
abort: (abortReason?: unknown) => void;
|
|
466
|
-
}
|
|
467
|
-
).abort(reason);
|
|
669
|
+
session.agent.abort(reason);
|
|
468
670
|
}
|
|
469
671
|
|
|
470
672
|
async stop(sessionId: string): Promise<void> {
|
|
@@ -476,11 +678,7 @@ export class LocalRuntimeHost implements RuntimeHost {
|
|
|
476
678
|
});
|
|
477
679
|
// Abort the agent first if it's running, so shutdown can proceed
|
|
478
680
|
session.aborting = true;
|
|
479
|
-
(
|
|
480
|
-
session.agent as Agent & {
|
|
481
|
-
abort: (abortReason?: unknown) => void;
|
|
482
|
-
}
|
|
483
|
-
).abort(new Error("session_stop"));
|
|
681
|
+
session.agent.abort(new Error("session_stop"));
|
|
484
682
|
await this.shutdownSession(session, {
|
|
485
683
|
status: "cancelled",
|
|
486
684
|
exitCode: 0,
|
|
@@ -506,13 +704,25 @@ export class LocalRuntimeHost implements RuntimeHost {
|
|
|
506
704
|
}
|
|
507
705
|
|
|
508
706
|
async get(sessionId: string): Promise<SessionRecord | undefined> {
|
|
707
|
+
const active = this.sessions.get(sessionId);
|
|
708
|
+
if (active) {
|
|
709
|
+
return toActiveSessionRecord(active);
|
|
710
|
+
}
|
|
509
711
|
const row = await this.getRow(sessionId);
|
|
510
712
|
return row ? toSessionRecord(row) : undefined;
|
|
511
713
|
}
|
|
512
714
|
|
|
513
715
|
async list(limit = 200): Promise<SessionRecord[]> {
|
|
514
716
|
const rows = await this.listRows(limit);
|
|
515
|
-
|
|
717
|
+
const persisted = rows.map(toSessionRecord);
|
|
718
|
+
const seen = new Set(persisted.map((row) => row.sessionId));
|
|
719
|
+
for (const active of this.sessions.values()) {
|
|
720
|
+
if (seen.has(active.sessionId)) {
|
|
721
|
+
continue;
|
|
722
|
+
}
|
|
723
|
+
persisted.unshift(toActiveSessionRecord(active));
|
|
724
|
+
}
|
|
725
|
+
return persisted.slice(0, limit);
|
|
516
726
|
}
|
|
517
727
|
|
|
518
728
|
async delete(sessionId: string): Promise<boolean> {
|
|
@@ -570,8 +780,11 @@ export class LocalRuntimeHost implements RuntimeHost {
|
|
|
570
780
|
});
|
|
571
781
|
}
|
|
572
782
|
|
|
573
|
-
subscribe(
|
|
574
|
-
|
|
783
|
+
subscribe(
|
|
784
|
+
listener: (event: CoreSessionEvent) => void,
|
|
785
|
+
options?: RuntimeHostSubscribeOptions,
|
|
786
|
+
): () => void {
|
|
787
|
+
return this.events.subscribe(listener, options);
|
|
575
788
|
}
|
|
576
789
|
|
|
577
790
|
async updateSessionModel(sessionId: string, modelId: string): Promise<void> {
|
|
@@ -806,10 +1019,11 @@ export class LocalRuntimeHost implements RuntimeHost {
|
|
|
806
1019
|
): Promise<void> {
|
|
807
1020
|
if (hasPendingTeamRunWork(session)) return;
|
|
808
1021
|
const isAborted = finishReason === "aborted" || session.aborting;
|
|
1022
|
+
const isError = finishReason === "error";
|
|
809
1023
|
await this.shutdownSession(session, {
|
|
810
|
-
status: isAborted ? "cancelled" : "completed",
|
|
811
|
-
exitCode: 0,
|
|
812
|
-
shutdownReason: "session_complete",
|
|
1024
|
+
status: isAborted ? "cancelled" : isError ? "failed" : "completed",
|
|
1025
|
+
exitCode: isError ? 1 : 0,
|
|
1026
|
+
shutdownReason: isError ? "session_error" : "session_complete",
|
|
813
1027
|
endReason: finishReason,
|
|
814
1028
|
});
|
|
815
1029
|
}
|
|
@@ -844,12 +1058,39 @@ export class LocalRuntimeHost implements RuntimeHost {
|
|
|
844
1058
|
}
|
|
845
1059
|
notifyTeamRunWaiters(session);
|
|
846
1060
|
|
|
1061
|
+
const cleanupErrors: unknown[] = [];
|
|
1062
|
+
const recordCleanupError = (stage: string, error: unknown) => {
|
|
1063
|
+
cleanupErrors.push(error);
|
|
1064
|
+
session.config.logger?.log("Session shutdown cleanup failed", {
|
|
1065
|
+
sessionId: session.sessionId,
|
|
1066
|
+
stage,
|
|
1067
|
+
error,
|
|
1068
|
+
severity: "warn",
|
|
1069
|
+
});
|
|
1070
|
+
};
|
|
1071
|
+
|
|
847
1072
|
if (session.artifacts) {
|
|
848
|
-
|
|
849
|
-
|
|
1073
|
+
try {
|
|
1074
|
+
await this.updateStatus(session, input.status, input.exitCode);
|
|
1075
|
+
} catch (error) {
|
|
1076
|
+
recordCleanupError("update_status", error);
|
|
1077
|
+
}
|
|
1078
|
+
try {
|
|
1079
|
+
await session.agent.shutdown(input.shutdownReason);
|
|
1080
|
+
} catch (error) {
|
|
1081
|
+
recordCleanupError("agent_shutdown", error);
|
|
1082
|
+
}
|
|
1083
|
+
}
|
|
1084
|
+
try {
|
|
1085
|
+
await Promise.resolve(session.runtime.shutdown(input.shutdownReason));
|
|
1086
|
+
} catch (error) {
|
|
1087
|
+
recordCleanupError("runtime_shutdown", error);
|
|
1088
|
+
}
|
|
1089
|
+
try {
|
|
1090
|
+
await session.pluginSandboxShutdown?.();
|
|
1091
|
+
} catch (error) {
|
|
1092
|
+
recordCleanupError("plugin_sandbox_shutdown", error);
|
|
850
1093
|
}
|
|
851
|
-
await Promise.resolve(session.runtime.shutdown(input.shutdownReason));
|
|
852
|
-
await session.pluginSandboxShutdown?.();
|
|
853
1094
|
this.sessions.delete(session.sessionId);
|
|
854
1095
|
this.emit({
|
|
855
1096
|
type: "ended",
|
|
@@ -859,6 +1100,9 @@ export class LocalRuntimeHost implements RuntimeHost {
|
|
|
859
1100
|
ts: Date.now(),
|
|
860
1101
|
},
|
|
861
1102
|
});
|
|
1103
|
+
if (cleanupErrors.length > 0 && input.status === "failed") {
|
|
1104
|
+
throw cleanupErrors[0];
|
|
1105
|
+
}
|
|
862
1106
|
}
|
|
863
1107
|
|
|
864
1108
|
private async updateStatus(
|
|
@@ -883,6 +1127,9 @@ export class LocalRuntimeHost implements RuntimeHost {
|
|
|
883
1127
|
latestManifest.ended_at = result.endedAt ?? nowIso();
|
|
884
1128
|
latestManifest.exit_code = typeof exitCode === "number" ? exitCode : null;
|
|
885
1129
|
session.artifacts.manifest = latestManifest;
|
|
1130
|
+
session.status = status;
|
|
1131
|
+
session.endedAt = latestManifest.ended_at;
|
|
1132
|
+
session.exitCode = latestManifest.exit_code;
|
|
886
1133
|
await this.invoke<void>(
|
|
887
1134
|
"writeSessionManifest",
|
|
888
1135
|
session.artifacts.manifestPath,
|
|
@@ -894,7 +1141,31 @@ export class LocalRuntimeHost implements RuntimeHost {
|
|
|
894
1141
|
private async handlePluginEvent(
|
|
895
1142
|
rootSessionId: string,
|
|
896
1143
|
event: { name: string; payload?: unknown },
|
|
1144
|
+
fallbackAutomation?: NonNullable<
|
|
1145
|
+
CoreSessionConfig["extensionContext"]
|
|
1146
|
+
>["automation"],
|
|
897
1147
|
): Promise<void> {
|
|
1148
|
+
if (event.name === "plugin_log") {
|
|
1149
|
+
this.handlePluginLog(rootSessionId, event.payload);
|
|
1150
|
+
return;
|
|
1151
|
+
}
|
|
1152
|
+
if (event.name === "automation_event") {
|
|
1153
|
+
const session = this.sessions.get(rootSessionId);
|
|
1154
|
+
const automation =
|
|
1155
|
+
session?.config.extensionContext?.automation ?? fallbackAutomation;
|
|
1156
|
+
if (!automation) {
|
|
1157
|
+
return;
|
|
1158
|
+
}
|
|
1159
|
+
const payload =
|
|
1160
|
+
event.payload && typeof event.payload === "object"
|
|
1161
|
+
? (event.payload as AutomationEventEnvelope)
|
|
1162
|
+
: undefined;
|
|
1163
|
+
if (!payload) {
|
|
1164
|
+
return;
|
|
1165
|
+
}
|
|
1166
|
+
await automation.ingestEvent(payload);
|
|
1167
|
+
return;
|
|
1168
|
+
}
|
|
898
1169
|
if (
|
|
899
1170
|
event.name !== "steer_message" &&
|
|
900
1171
|
event.name !== "queue_message" &&
|
|
@@ -930,6 +1201,49 @@ export class LocalRuntimeHost implements RuntimeHost {
|
|
|
930
1201
|
});
|
|
931
1202
|
}
|
|
932
1203
|
|
|
1204
|
+
private handlePluginLog(
|
|
1205
|
+
rootSessionId: string,
|
|
1206
|
+
payload: unknown,
|
|
1207
|
+
fallbackLogger?: BasicLogger,
|
|
1208
|
+
): void {
|
|
1209
|
+
const session = this.sessions.get(rootSessionId);
|
|
1210
|
+
const logger =
|
|
1211
|
+
fallbackLogger ??
|
|
1212
|
+
session?.config.extensionContext?.logger ??
|
|
1213
|
+
session?.config.logger;
|
|
1214
|
+
if (!logger || !payload || typeof payload !== "object") {
|
|
1215
|
+
return;
|
|
1216
|
+
}
|
|
1217
|
+
const record = payload as Record<string, unknown>;
|
|
1218
|
+
const message = typeof record.message === "string" ? record.message : "";
|
|
1219
|
+
if (!message) {
|
|
1220
|
+
return;
|
|
1221
|
+
}
|
|
1222
|
+
const metadata =
|
|
1223
|
+
record.metadata && typeof record.metadata === "object"
|
|
1224
|
+
? ({
|
|
1225
|
+
...(record.metadata as Record<string, unknown>),
|
|
1226
|
+
} as BasicLogMetadata)
|
|
1227
|
+
: {};
|
|
1228
|
+
metadata.sessionId ??= rootSessionId;
|
|
1229
|
+
if (typeof record.pluginName === "string" && record.pluginName) {
|
|
1230
|
+
metadata.pluginName = record.pluginName;
|
|
1231
|
+
}
|
|
1232
|
+
if (record.level === "debug") {
|
|
1233
|
+
logger.debug(message, metadata);
|
|
1234
|
+
return;
|
|
1235
|
+
}
|
|
1236
|
+
if (record.level === "error") {
|
|
1237
|
+
if (logger.error) {
|
|
1238
|
+
logger.error(message, metadata);
|
|
1239
|
+
} else {
|
|
1240
|
+
logger.log(message, { ...metadata, severity: "error" });
|
|
1241
|
+
}
|
|
1242
|
+
return;
|
|
1243
|
+
}
|
|
1244
|
+
logger.log(message, metadata);
|
|
1245
|
+
}
|
|
1246
|
+
|
|
933
1247
|
/**
|
|
934
1248
|
* Consume the first steer-delivery pending prompt for injection into the
|
|
935
1249
|
* running agent loop. Called synchronously by the agent between iterations.
|
|
@@ -1003,6 +1317,21 @@ export class LocalRuntimeHost implements RuntimeHost {
|
|
|
1003
1317
|
});
|
|
1004
1318
|
}
|
|
1005
1319
|
this.emitPendingPrompts(session);
|
|
1320
|
+
this.schedulePendingPromptDrain(sessionId, session);
|
|
1321
|
+
}
|
|
1322
|
+
|
|
1323
|
+
private schedulePendingPromptDrain(
|
|
1324
|
+
sessionId: string,
|
|
1325
|
+
session: ActiveSession,
|
|
1326
|
+
): void {
|
|
1327
|
+
if (
|
|
1328
|
+
session.pendingPrompts.length === 0 ||
|
|
1329
|
+
session.aborting ||
|
|
1330
|
+
session.drainingPendingPrompts ||
|
|
1331
|
+
!session.agent.canStartRun()
|
|
1332
|
+
) {
|
|
1333
|
+
return;
|
|
1334
|
+
}
|
|
1006
1335
|
queueMicrotask(() => {
|
|
1007
1336
|
void this.drainPendingPrompts(sessionId);
|
|
1008
1337
|
});
|
|
@@ -1013,15 +1342,7 @@ export class LocalRuntimeHost implements RuntimeHost {
|
|
|
1013
1342
|
if (!session || session.aborting || session.drainingPendingPrompts) {
|
|
1014
1343
|
return;
|
|
1015
1344
|
}
|
|
1016
|
-
const canStartRun =
|
|
1017
|
-
typeof (session.agent as Agent & { canStartRun?: () => boolean })
|
|
1018
|
-
.canStartRun === "function"
|
|
1019
|
-
? (
|
|
1020
|
-
session.agent as Agent & {
|
|
1021
|
-
canStartRun: () => boolean;
|
|
1022
|
-
}
|
|
1023
|
-
).canStartRun()
|
|
1024
|
-
: true;
|
|
1345
|
+
const canStartRun = session.agent.canStartRun();
|
|
1025
1346
|
if (!canStartRun) {
|
|
1026
1347
|
return;
|
|
1027
1348
|
}
|
|
@@ -1103,17 +1424,29 @@ export class LocalRuntimeHost implements RuntimeHost {
|
|
|
1103
1424
|
type: "pending_prompts",
|
|
1104
1425
|
payload: {
|
|
1105
1426
|
sessionId: session.sessionId,
|
|
1106
|
-
prompts:
|
|
1107
|
-
id: entry.id,
|
|
1108
|
-
prompt: entry.prompt,
|
|
1109
|
-
delivery: entry.delivery,
|
|
1110
|
-
attachmentCount:
|
|
1111
|
-
(entry.userImages?.length ?? 0) + (entry.userFiles?.length ?? 0),
|
|
1112
|
-
})),
|
|
1427
|
+
prompts: this.snapshotPendingPrompts(session),
|
|
1113
1428
|
},
|
|
1114
1429
|
});
|
|
1115
1430
|
}
|
|
1116
1431
|
|
|
1432
|
+
private snapshotPendingPrompt(entry: PendingPrompt): SessionPendingPrompt {
|
|
1433
|
+
return {
|
|
1434
|
+
id: entry.id,
|
|
1435
|
+
prompt: entry.prompt,
|
|
1436
|
+
delivery: entry.delivery,
|
|
1437
|
+
attachmentCount:
|
|
1438
|
+
(entry.userImages?.length ?? 0) + (entry.userFiles?.length ?? 0),
|
|
1439
|
+
};
|
|
1440
|
+
}
|
|
1441
|
+
|
|
1442
|
+
private snapshotPendingPrompts(
|
|
1443
|
+
session: ActiveSession,
|
|
1444
|
+
): SessionPendingPrompt[] {
|
|
1445
|
+
return session.pendingPrompts.map((entry) =>
|
|
1446
|
+
this.snapshotPendingPrompt(entry),
|
|
1447
|
+
);
|
|
1448
|
+
}
|
|
1449
|
+
|
|
1117
1450
|
private emitPendingPromptSubmitted(
|
|
1118
1451
|
session: ActiveSession,
|
|
1119
1452
|
entry: {
|
|
@@ -1142,6 +1475,7 @@ export class LocalRuntimeHost implements RuntimeHost {
|
|
|
1142
1475
|
private createSpawnTool(
|
|
1143
1476
|
config: CoreSessionConfig,
|
|
1144
1477
|
rootSessionId: string,
|
|
1478
|
+
toolExecutors?: Partial<ToolExecutors>,
|
|
1145
1479
|
): Tool {
|
|
1146
1480
|
const createSubAgentTools = () => {
|
|
1147
1481
|
const tools: Tool[] = config.enableTools
|
|
@@ -1152,13 +1486,13 @@ export class LocalRuntimeHost implements RuntimeHost {
|
|
|
1152
1486
|
mode: config.mode,
|
|
1153
1487
|
})
|
|
1154
1488
|
],
|
|
1155
|
-
executors:
|
|
1489
|
+
executors: toolExecutors,
|
|
1156
1490
|
})
|
|
1157
1491
|
: [];
|
|
1158
1492
|
if (config.enableSpawnAgent) {
|
|
1159
|
-
tools.push(this.createSpawnTool(config, rootSessionId));
|
|
1493
|
+
tools.push(this.createSpawnTool(config, rootSessionId, toolExecutors));
|
|
1160
1494
|
}
|
|
1161
|
-
return tools;
|
|
1495
|
+
return filterDisabledTools(tools);
|
|
1162
1496
|
};
|
|
1163
1497
|
|
|
1164
1498
|
return createSpawnAgentTool({
|
|
@@ -1395,13 +1729,7 @@ export class LocalRuntimeHost implements RuntimeHost {
|
|
|
1395
1729
|
session: ActiveSession,
|
|
1396
1730
|
overrides: { apiKey?: string; modelId?: string },
|
|
1397
1731
|
): void {
|
|
1398
|
-
|
|
1399
|
-
updateConnection?: (overrides: {
|
|
1400
|
-
apiKey?: string;
|
|
1401
|
-
modelId?: string;
|
|
1402
|
-
}) => void;
|
|
1403
|
-
};
|
|
1404
|
-
agentWithConnection.updateConnection?.(overrides);
|
|
1732
|
+
session.agent.updateConnection(overrides);
|
|
1405
1733
|
}
|
|
1406
1734
|
|
|
1407
1735
|
private getSessionAgentTelemetryIdentity(session: ActiveSession) {
|
|
@@ -1414,14 +1742,12 @@ export class LocalRuntimeHost implements RuntimeHost {
|
|
|
1414
1742
|
});
|
|
1415
1743
|
}
|
|
1416
1744
|
|
|
1417
|
-
private readAgentId(agent:
|
|
1418
|
-
return
|
|
1745
|
+
private readAgentId(agent: SessionRuntime): string {
|
|
1746
|
+
return agent.getAgentId();
|
|
1419
1747
|
}
|
|
1420
1748
|
|
|
1421
|
-
private readAgentConversationId(agent:
|
|
1422
|
-
return (
|
|
1423
|
-
agent as Agent & { getConversationId?: () => string }
|
|
1424
|
-
).getConversationId?.();
|
|
1749
|
+
private readAgentConversationId(agent: SessionRuntime): string {
|
|
1750
|
+
return agent.getConversationId();
|
|
1425
1751
|
}
|
|
1426
1752
|
|
|
1427
1753
|
private emitStatus(sessionId: string, status: string): void {
|