@clinebot/core 0.0.33 → 0.0.35
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 +12 -8
- package/dist/ClineCore.d.ts +48 -29
- package/dist/ClineCore.d.ts.map +1 -1
- package/dist/auth/client.d.ts +19 -0
- package/dist/auth/client.d.ts.map +1 -1
- package/dist/auth/cline.d.ts.map +1 -1
- package/dist/auth/oca.d.ts.map +1 -1
- package/dist/auth/server.d.ts +32 -0
- package/dist/auth/server.d.ts.map +1 -1
- package/dist/auth/types.d.ts +29 -0
- package/dist/auth/types.d.ts.map +1 -1
- package/dist/extensions/config/agent-config-loader.d.ts +2 -2
- package/dist/extensions/config/agent-config-loader.d.ts.map +1 -1
- package/dist/extensions/config/agent-config-parser.d.ts +1 -1
- package/dist/extensions/config/agent-config-parser.d.ts.map +1 -1
- package/dist/extensions/config/hooks-config-loader.d.ts +2 -2
- package/dist/extensions/config/hooks-config-loader.d.ts.map +1 -1
- package/dist/extensions/config/index.d.ts +3 -3
- package/dist/extensions/config/index.d.ts.map +1 -1
- package/dist/extensions/config/user-instruction-config-loader.d.ts +2 -2
- package/dist/extensions/config/user-instruction-config-loader.d.ts.map +1 -1
- package/dist/extensions/index.d.ts +2 -1
- package/dist/extensions/index.d.ts.map +1 -1
- package/dist/extensions/plugin/plugin-config-loader.d.ts +2 -1
- package/dist/extensions/plugin/plugin-config-loader.d.ts.map +1 -1
- package/dist/extensions/plugin/plugin-load-report.d.ts +19 -0
- package/dist/extensions/plugin/plugin-load-report.d.ts.map +1 -0
- package/dist/extensions/plugin/plugin-loader.d.ts +6 -0
- package/dist/extensions/plugin/plugin-loader.d.ts.map +1 -1
- package/dist/extensions/plugin/plugin-sandbox.d.ts +2 -1
- package/dist/extensions/plugin/plugin-sandbox.d.ts.map +1 -1
- package/dist/extensions/plugin-sandbox-bootstrap.js +242 -242
- package/dist/extensions/tools/constants.d.ts.map +1 -0
- package/dist/extensions/tools/definitions.d.ts.map +1 -0
- package/dist/extensions/tools/executors/apply-patch-parser.d.ts.map +1 -0
- package/dist/extensions/tools/executors/apply-patch.d.ts.map +1 -0
- package/dist/extensions/tools/executors/bash.d.ts.map +1 -0
- package/dist/extensions/tools/executors/editor.d.ts.map +1 -0
- package/dist/extensions/tools/executors/file-read.d.ts.map +1 -0
- package/dist/extensions/tools/executors/index.d.ts.map +1 -0
- package/dist/extensions/tools/executors/search.d.ts.map +1 -0
- package/dist/extensions/tools/executors/web-fetch.d.ts.map +1 -0
- package/dist/extensions/tools/helpers.d.ts.map +1 -0
- package/dist/extensions/tools/index.d.ts.map +1 -0
- package/dist/{tools → extensions/tools}/model-tool-routing.d.ts +1 -1
- package/dist/extensions/tools/model-tool-routing.d.ts.map +1 -0
- package/dist/{tools → extensions/tools}/presets.d.ts +1 -2
- package/dist/extensions/tools/presets.d.ts.map +1 -0
- package/dist/extensions/tools/schemas.d.ts.map +1 -0
- package/dist/extensions/tools/team/delegated-agent.d.ts.map +1 -0
- package/dist/extensions/tools/team/index.d.ts.map +1 -0
- package/dist/{team → extensions/tools/team}/multi-agent.d.ts +1 -3
- package/dist/extensions/tools/team/multi-agent.d.ts.map +1 -0
- package/dist/extensions/tools/team/projections.d.ts.map +1 -0
- package/dist/extensions/tools/team/runtime.d.ts.map +1 -0
- package/dist/{team → extensions/tools/team}/spawn-agent-tool.d.ts +0 -1
- package/dist/extensions/tools/team/spawn-agent-tool.d.ts.map +1 -0
- package/dist/extensions/tools/team/subagent-prompts.d.ts.map +1 -0
- package/dist/extensions/tools/team/team-tools.d.ts.map +1 -0
- package/dist/{tools → extensions/tools}/types.d.ts +4 -3
- package/dist/extensions/tools/types.d.ts.map +1 -0
- package/dist/{runtime → hooks}/checkpoint-hooks.d.ts +7 -0
- package/dist/hooks/checkpoint-hooks.d.ts.map +1 -0
- package/dist/{runtime → hooks}/hook-file-hooks.d.ts +0 -2
- package/dist/hooks/hook-file-hooks.d.ts.map +1 -0
- package/dist/hooks/subprocess.d.ts +3 -130
- package/dist/hooks/subprocess.d.ts.map +1 -1
- package/dist/index.d.ts +38 -35
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +386 -384
- package/dist/runtime/history.d.ts +4 -0
- package/dist/runtime/history.d.ts.map +1 -0
- package/dist/runtime/host.d.ts +9 -0
- package/dist/runtime/host.d.ts.map +1 -0
- package/dist/{session → runtime}/rpc-runtime-ensure.d.ts +13 -1
- package/dist/{session → runtime}/rpc-runtime-ensure.d.ts.map +1 -1
- package/dist/{session → runtime}/rpc-spawn-lease.d.ts.map +1 -1
- package/dist/runtime/runtime-builder.d.ts +1 -1
- package/dist/runtime/runtime-builder.d.ts.map +1 -1
- package/dist/{session/session-manager.d.ts → runtime/runtime-host.d.ts} +55 -12
- package/dist/runtime/runtime-host.d.ts.map +1 -0
- package/dist/{session → runtime}/runtime-oauth-token-manager.d.ts +1 -1
- package/dist/{session → runtime}/runtime-oauth-token-manager.d.ts.map +1 -1
- package/dist/runtime/session-runtime.d.ts +2 -2
- package/dist/runtime/session-runtime.d.ts.map +1 -1
- package/dist/runtime/subprocess-sandbox.d.ts +2 -0
- package/dist/runtime/subprocess-sandbox.d.ts.map +1 -1
- package/dist/runtime/tool-approval.d.ts.map +1 -1
- package/dist/{session/session-agent-events.d.ts → services/agent-events.d.ts} +4 -4
- package/dist/services/agent-events.d.ts.map +1 -0
- package/dist/services/config.d.ts +3 -0
- package/dist/services/config.d.ts.map +1 -0
- package/dist/services/local-runtime-bootstrap.d.ts +41 -0
- package/dist/services/local-runtime-bootstrap.d.ts.map +1 -0
- package/dist/services/providers/local-provider-registry.d.ts.map +1 -0
- package/dist/services/providers/local-provider-service.d.ts.map +1 -0
- package/dist/{session → services}/session-artifacts.d.ts +2 -4
- package/dist/services/session-artifacts.d.ts.map +1 -0
- package/dist/{session/utils/helpers.d.ts → services/session-data.d.ts} +19 -27
- package/dist/services/session-data.d.ts.map +1 -0
- package/dist/{session → services}/session-telemetry.d.ts +2 -2
- package/dist/services/session-telemetry.d.ts.map +1 -0
- package/dist/{storage → services/storage}/file-team-store.d.ts +2 -2
- package/dist/services/storage/file-team-store.d.ts.map +1 -0
- package/dist/{storage → services/storage}/provider-settings-legacy-migration.d.ts +1 -1
- package/dist/services/storage/provider-settings-legacy-migration.d.ts.map +1 -0
- package/dist/{storage → services/storage}/provider-settings-manager.d.ts +1 -1
- package/dist/services/storage/provider-settings-manager.d.ts.map +1 -0
- package/dist/{storage → services/storage}/sqlite-session-store.d.ts +3 -3
- package/dist/services/storage/sqlite-session-store.d.ts.map +1 -0
- package/dist/{storage → services/storage}/sqlite-team-store.d.ts +2 -2
- package/dist/services/storage/sqlite-team-store.d.ts.map +1 -0
- package/dist/{storage → services/storage}/team-store.d.ts +1 -1
- package/dist/services/storage/team-store.d.ts.map +1 -0
- package/dist/services/telemetry/ITelemetryAdapter.d.ts.map +1 -0
- package/dist/services/telemetry/OpenTelemetryAdapter.d.ts.map +1 -0
- package/dist/services/telemetry/OpenTelemetryProvider.d.ts.map +1 -0
- package/dist/services/telemetry/TelemetryLoggerSink.d.ts.map +1 -0
- package/dist/services/telemetry/TelemetryService.d.ts.map +1 -0
- package/dist/services/telemetry/core-events.d.ts.map +1 -0
- package/dist/services/telemetry/distinct-id.d.ts.map +1 -0
- package/dist/services/telemetry/index.d.ts.map +1 -0
- package/dist/{telemetry → services/telemetry}/index.js +6 -6
- package/dist/{session/utils → services}/usage.d.ts +1 -1
- package/dist/services/usage.d.ts.map +1 -0
- package/dist/services/workspace/file-indexer.d.ts.map +1 -0
- package/dist/services/workspace/index.d.ts.map +1 -0
- package/dist/services/workspace/mention-enricher.d.ts.map +1 -0
- package/dist/services/workspace-manifest.d.ts.map +1 -0
- package/dist/session/file-session-service.d.ts +4 -1
- package/dist/session/file-session-service.d.ts.map +1 -1
- package/dist/session/persistence-service.d.ts +8 -6
- package/dist/session/persistence-service.d.ts.map +1 -1
- package/dist/session/rpc-session-service.d.ts +3 -0
- package/dist/session/rpc-session-service.d.ts.map +1 -1
- package/dist/session/session-service.d.ts +8 -9
- package/dist/session/session-service.d.ts.map +1 -1
- package/dist/session/session-team-coordination.d.ts +4 -4
- package/dist/session/session-team-coordination.d.ts.map +1 -1
- package/dist/session/sqlite-rpc-session-backend.d.ts.map +1 -1
- package/dist/{session/default-session-manager.d.ts → transports/local.d.ts} +24 -14
- package/dist/transports/local.d.ts.map +1 -0
- package/dist/transports/rpc.d.ts +51 -0
- package/dist/transports/rpc.d.ts.map +1 -0
- package/dist/transports/runtime-host-support.d.ts +21 -0
- package/dist/transports/runtime-host-support.d.ts.map +1 -0
- package/dist/types/chat-schema.d.ts.map +1 -0
- package/dist/types/config.d.ts +3 -2
- package/dist/types/config.d.ts.map +1 -1
- package/dist/{session/utils/types.d.ts → types/session.d.ts} +15 -6
- package/dist/types/session.d.ts.map +1 -0
- package/dist/types/sessions.d.ts +19 -0
- package/dist/types/sessions.d.ts.map +1 -1
- package/dist/types/storage.d.ts +1 -3
- package/dist/types/storage.d.ts.map +1 -1
- package/dist/types.d.ts +7 -6
- package/dist/types.d.ts.map +1 -1
- package/package.json +7 -12
- package/src/ClineCore.test.ts +95 -19
- package/src/ClineCore.ts +120 -50
- package/src/auth/client.test.ts +29 -0
- package/src/auth/client.ts +21 -0
- package/src/auth/cline.ts +3 -1
- package/src/auth/codex.ts +1 -1
- package/src/auth/oca.ts +3 -1
- package/src/auth/server.test.ts +287 -0
- package/src/auth/server.ts +50 -1
- package/src/auth/types.ts +29 -0
- package/src/extensions/config/agent-config-loader.test.ts +3 -3
- package/src/extensions/config/agent-config-loader.ts +1 -5
- package/src/extensions/config/agent-config-parser.ts +1 -1
- package/src/extensions/config/hooks-config-loader.ts +1 -2
- package/src/extensions/config/index.ts +0 -4
- package/src/extensions/config/user-instruction-config-loader.ts +0 -4
- package/src/extensions/index.ts +6 -0
- package/src/extensions/plugin/plugin-config-loader.test.ts +39 -0
- package/src/extensions/plugin/plugin-config-loader.ts +18 -10
- package/src/extensions/plugin/plugin-load-report.ts +20 -0
- package/src/extensions/plugin/plugin-loader.test.ts +45 -0
- package/src/extensions/plugin/plugin-loader.ts +57 -3
- package/src/extensions/plugin/plugin-sandbox-bootstrap.ts +158 -86
- package/src/extensions/plugin/plugin-sandbox.test.ts +70 -0
- package/src/extensions/plugin/plugin-sandbox.ts +17 -6
- package/src/{tools → extensions/tools}/definitions.ts +1 -1
- package/src/extensions/tools/executors/file-read.test.ts +125 -0
- package/src/{tools → extensions/tools}/executors/file-read.ts +29 -4
- package/src/{tools → extensions/tools}/executors/search.ts +1 -1
- package/src/{tools → extensions/tools}/model-tool-routing.ts +1 -1
- package/src/{tools → extensions/tools}/presets.ts +2 -3
- package/src/extensions/tools/team/multi-agent.lifecycle.test.ts +455 -0
- package/src/{team → extensions/tools/team}/multi-agent.ts +80 -17
- package/src/{team → extensions/tools/team}/spawn-agent-tool.test.ts +0 -6
- package/src/{team → extensions/tools/team}/spawn-agent-tool.ts +1 -7
- package/src/{team → extensions/tools/team}/subagent-prompts.ts +2 -2
- package/src/{team → extensions/tools/team}/team-tools.test.ts +146 -30
- package/src/{team → extensions/tools/team}/team-tools.ts +98 -69
- package/src/{tools → extensions/tools}/types.ts +5 -3
- package/src/{runtime → hooks}/checkpoint-hooks.ts +27 -0
- package/src/{runtime → hooks}/hook-file-hooks.test.ts +42 -7
- package/src/{runtime → hooks}/hook-file-hooks.ts +6 -11
- package/src/hooks/subprocess.ts +48 -257
- package/src/index.ts +178 -158
- package/src/runtime/history.test.ts +114 -0
- package/src/runtime/history.ts +237 -0
- package/src/runtime/host.test.ts +230 -0
- package/src/runtime/host.ts +362 -0
- package/src/runtime/rpc-runtime-ensure.test.ts +123 -0
- package/src/{session → runtime}/rpc-runtime-ensure.ts +165 -27
- package/src/{session → runtime}/rpc-spawn-lease.test.ts +33 -1
- package/src/{session → runtime}/rpc-spawn-lease.ts +54 -20
- package/src/runtime/runtime-builder.team-persistence.test.ts +6 -3
- package/src/runtime/runtime-builder.test.ts +101 -4
- package/src/runtime/runtime-builder.ts +125 -86
- package/src/runtime/runtime-host.ts +178 -0
- package/src/{session → runtime}/runtime-oauth-token-manager.ts +1 -1
- package/src/runtime/runtime-parity.test.ts +1 -1
- package/src/runtime/session-runtime.ts +2 -2
- package/src/runtime/subprocess-sandbox.ts +26 -23
- package/src/runtime/tool-approval.ts +13 -15
- package/src/{session/session-agent-events.ts → services/agent-events.ts} +7 -7
- package/src/services/config.ts +5 -0
- package/src/services/local-runtime-bootstrap.ts +280 -0
- package/src/{providers → services/providers}/local-provider-service.ts +4 -4
- package/src/{session → services}/session-artifacts.ts +23 -19
- package/src/{session/utils/helpers.test.ts → services/session-data.test.ts} +1 -1
- package/src/{session/utils/helpers.ts → services/session-data.ts} +76 -72
- package/src/{session → services}/session-telemetry.ts +7 -9
- package/src/services/storage/artifact-store.ts +1 -0
- package/src/{storage → services/storage}/file-team-store.ts +2 -2
- package/src/{storage → services/storage}/provider-settings-legacy-migration.test.ts +1 -1
- package/src/{storage → services/storage}/provider-settings-legacy-migration.ts +2 -2
- package/src/{storage → services/storage}/provider-settings-manager.ts +2 -2
- package/src/services/storage/session-store.ts +1 -0
- package/src/{storage → services/storage}/sqlite-session-store.ts +7 -12
- package/src/{storage → services/storage}/sqlite-team-store.ts +4 -4
- package/src/{storage → services/storage}/team-store.ts +1 -1
- package/src/{session/utils → services}/usage.ts +1 -1
- package/src/{input → services/workspace}/file-indexer.test.ts +30 -1
- package/src/{input → services/workspace}/file-indexer.ts +26 -2
- package/src/{input → services/workspace}/mention-enricher.test.ts +21 -0
- package/src/{input → services/workspace}/mention-enricher.ts +1 -1
- package/src/session/file-session-service.ts +9 -7
- package/src/session/index.ts +25 -17
- package/src/session/persistence-service.test.ts +121 -24
- package/src/session/persistence-service.ts +118 -102
- package/src/session/rpc-session-service.ts +9 -2
- package/src/session/session-service.team-persistence.test.ts +1 -1
- package/src/session/session-service.ts +32 -19
- package/src/session/session-team-coordination.ts +13 -6
- package/src/session/sqlite-rpc-session-backend.ts +4 -6
- package/src/session/workspace-manager.ts +1 -1
- package/src/{session/default-session-manager.e2e.test.ts → transports/local.e2e.test.ts} +13 -17
- package/src/{session/default-session-manager.test.ts → transports/local.test.ts} +316 -230
- package/src/{session/default-session-manager.ts → transports/local.ts} +138 -172
- package/src/transports/rpc.test.ts +82 -0
- package/src/transports/rpc.ts +665 -0
- package/src/transports/runtime-host-support.ts +86 -0
- package/src/types/config.ts +3 -2
- package/src/{session/utils/types.ts → types/session.ts} +18 -5
- package/src/types/sessions.ts +21 -0
- package/src/types/storage.ts +1 -6
- package/src/types.ts +25 -18
- package/dist/chat/chat-schema.d.ts.map +0 -1
- package/dist/input/file-indexer.d.ts.map +0 -1
- package/dist/input/index.d.ts.map +0 -1
- package/dist/input/mention-enricher.d.ts.map +0 -1
- package/dist/prompt/default-system.d.ts +0 -2
- package/dist/prompt/default-system.d.ts.map +0 -1
- package/dist/providers/local-provider-registry.d.ts.map +0 -1
- package/dist/providers/local-provider-service.d.ts.map +0 -1
- package/dist/runtime/checkpoint-hooks.d.ts.map +0 -1
- package/dist/runtime/hook-file-hooks.d.ts.map +0 -1
- package/dist/runtime/team-runtime-registry.d.ts +0 -13
- package/dist/runtime/team-runtime-registry.d.ts.map +0 -1
- package/dist/session/default-session-manager.d.ts.map +0 -1
- package/dist/session/session-agent-events.d.ts.map +0 -1
- package/dist/session/session-artifacts.d.ts.map +0 -1
- package/dist/session/session-config-builder.d.ts +0 -16
- package/dist/session/session-config-builder.d.ts.map +0 -1
- package/dist/session/session-host.d.ts +0 -15
- package/dist/session/session-host.d.ts.map +0 -1
- package/dist/session/session-manager.d.ts.map +0 -1
- package/dist/session/session-telemetry.d.ts.map +0 -1
- package/dist/session/utils/helpers.d.ts.map +0 -1
- package/dist/session/utils/types.d.ts.map +0 -1
- package/dist/session/utils/usage.d.ts.map +0 -1
- package/dist/session/workspace-manifest.d.ts.map +0 -1
- package/dist/storage/file-team-store.d.ts.map +0 -1
- package/dist/storage/provider-settings-legacy-migration.d.ts.map +0 -1
- package/dist/storage/provider-settings-manager.d.ts.map +0 -1
- package/dist/storage/sqlite-session-store.d.ts.map +0 -1
- package/dist/storage/sqlite-team-store.d.ts.map +0 -1
- package/dist/storage/team-store.d.ts.map +0 -1
- package/dist/team/delegated-agent.d.ts.map +0 -1
- package/dist/team/index.d.ts.map +0 -1
- package/dist/team/multi-agent.d.ts.map +0 -1
- package/dist/team/projections.d.ts.map +0 -1
- package/dist/team/runtime.d.ts.map +0 -1
- package/dist/team/spawn-agent-tool.d.ts.map +0 -1
- package/dist/team/subagent-prompts.d.ts.map +0 -1
- package/dist/team/team-tools.d.ts.map +0 -1
- package/dist/telemetry/ITelemetryAdapter.d.ts.map +0 -1
- package/dist/telemetry/OpenTelemetryAdapter.d.ts.map +0 -1
- package/dist/telemetry/OpenTelemetryProvider.d.ts.map +0 -1
- package/dist/telemetry/TelemetryLoggerSink.d.ts.map +0 -1
- package/dist/telemetry/TelemetryService.d.ts.map +0 -1
- package/dist/telemetry/core-events.d.ts.map +0 -1
- package/dist/telemetry/distinct-id.d.ts.map +0 -1
- package/dist/telemetry/index.d.ts.map +0 -1
- package/dist/tools/constants.d.ts.map +0 -1
- package/dist/tools/definitions.d.ts.map +0 -1
- package/dist/tools/executors/apply-patch-parser.d.ts.map +0 -1
- package/dist/tools/executors/apply-patch.d.ts.map +0 -1
- package/dist/tools/executors/bash.d.ts.map +0 -1
- package/dist/tools/executors/editor.d.ts.map +0 -1
- package/dist/tools/executors/file-read.d.ts.map +0 -1
- package/dist/tools/executors/index.d.ts.map +0 -1
- package/dist/tools/executors/search.d.ts.map +0 -1
- package/dist/tools/executors/web-fetch.d.ts.map +0 -1
- package/dist/tools/helpers.d.ts.map +0 -1
- package/dist/tools/index.d.ts.map +0 -1
- package/dist/tools/model-tool-routing.d.ts.map +0 -1
- package/dist/tools/presets.d.ts.map +0 -1
- package/dist/tools/schemas.d.ts.map +0 -1
- package/dist/tools/types.d.ts.map +0 -1
- package/src/prompt/default-system.ts +0 -21
- package/src/runtime/team-runtime-registry.ts +0 -43
- package/src/session/session-config-builder.ts +0 -126
- package/src/session/session-host.test.ts +0 -89
- package/src/session/session-host.ts +0 -213
- package/src/session/session-manager.ts +0 -74
- package/src/storage/artifact-store.ts +0 -1
- package/src/storage/session-store.ts +0 -1
- package/src/team/multi-agent.lifecycle.test.ts +0 -201
- package/src/tools/executors/file-read.test.ts +0 -49
- /package/dist/{tools → extensions/tools}/constants.d.ts +0 -0
- /package/dist/{tools → extensions/tools}/definitions.d.ts +0 -0
- /package/dist/{tools → extensions/tools}/executors/apply-patch-parser.d.ts +0 -0
- /package/dist/{tools → extensions/tools}/executors/apply-patch.d.ts +0 -0
- /package/dist/{tools → extensions/tools}/executors/bash.d.ts +0 -0
- /package/dist/{tools → extensions/tools}/executors/editor.d.ts +0 -0
- /package/dist/{tools → extensions/tools}/executors/file-read.d.ts +0 -0
- /package/dist/{tools → extensions/tools}/executors/index.d.ts +0 -0
- /package/dist/{tools → extensions/tools}/executors/search.d.ts +0 -0
- /package/dist/{tools → extensions/tools}/executors/web-fetch.d.ts +0 -0
- /package/dist/{tools → extensions/tools}/helpers.d.ts +0 -0
- /package/dist/{tools → extensions/tools}/index.d.ts +0 -0
- /package/dist/{tools → extensions/tools}/schemas.d.ts +0 -0
- /package/dist/{team → extensions/tools/team}/delegated-agent.d.ts +0 -0
- /package/dist/{team → extensions/tools/team}/index.d.ts +0 -0
- /package/dist/{team → extensions/tools/team}/projections.d.ts +0 -0
- /package/dist/{team → extensions/tools/team}/runtime.d.ts +0 -0
- /package/dist/{team → extensions/tools/team}/subagent-prompts.d.ts +0 -0
- /package/dist/{team → extensions/tools/team}/team-tools.d.ts +0 -0
- /package/dist/{session → runtime}/rpc-spawn-lease.d.ts +0 -0
- /package/dist/{providers → services/providers}/local-provider-registry.d.ts +0 -0
- /package/dist/{providers → services/providers}/local-provider-service.d.ts +0 -0
- /package/dist/{telemetry → services/telemetry}/ITelemetryAdapter.d.ts +0 -0
- /package/dist/{telemetry → services/telemetry}/OpenTelemetryAdapter.d.ts +0 -0
- /package/dist/{telemetry → services/telemetry}/OpenTelemetryProvider.d.ts +0 -0
- /package/dist/{telemetry → services/telemetry}/TelemetryLoggerSink.d.ts +0 -0
- /package/dist/{telemetry → services/telemetry}/TelemetryService.d.ts +0 -0
- /package/dist/{telemetry → services/telemetry}/core-events.d.ts +0 -0
- /package/dist/{telemetry → services/telemetry}/distinct-id.d.ts +0 -0
- /package/dist/{telemetry → services/telemetry}/index.d.ts +0 -0
- /package/dist/{input → services/workspace}/file-indexer.d.ts +0 -0
- /package/dist/{input → services/workspace}/index.d.ts +0 -0
- /package/dist/{input → services/workspace}/mention-enricher.d.ts +0 -0
- /package/dist/{session → services}/workspace-manifest.d.ts +0 -0
- /package/dist/{chat → types}/chat-schema.d.ts +0 -0
- /package/src/{tools → extensions/tools}/constants.ts +0 -0
- /package/src/{tools → extensions/tools}/definitions.test.ts +0 -0
- /package/src/{tools → extensions/tools}/executors/apply-patch-parser.ts +0 -0
- /package/src/{tools → extensions/tools}/executors/apply-patch.ts +0 -0
- /package/src/{tools → extensions/tools}/executors/bash.test.ts +0 -0
- /package/src/{tools → extensions/tools}/executors/bash.ts +0 -0
- /package/src/{tools → extensions/tools}/executors/editor.test.ts +0 -0
- /package/src/{tools → extensions/tools}/executors/editor.ts +0 -0
- /package/src/{tools → extensions/tools}/executors/index.ts +0 -0
- /package/src/{tools → extensions/tools}/executors/web-fetch.ts +0 -0
- /package/src/{tools → extensions/tools}/helpers.ts +0 -0
- /package/src/{tools → extensions/tools}/index.ts +0 -0
- /package/src/{tools → extensions/tools}/model-tool-routing.test.ts +0 -0
- /package/src/{tools → extensions/tools}/presets.test.ts +0 -0
- /package/src/{tools → extensions/tools}/schemas.ts +0 -0
- /package/src/{team → extensions/tools/team}/delegated-agent.ts +0 -0
- /package/src/{team → extensions/tools/team}/index.ts +0 -0
- /package/src/{team → extensions/tools/team}/projections.ts +0 -0
- /package/src/{team → extensions/tools/team}/runtime.ts +0 -0
- /package/src/{runtime → hooks}/checkpoint-hooks.test.ts +0 -0
- /package/src/{session → runtime}/runtime-oauth-token-manager.test.ts +0 -0
- /package/src/{providers → services/providers}/local-provider-registry.ts +0 -0
- /package/src/{providers → services/providers}/local-provider-service.test.ts +0 -0
- /package/src/{storage → services/storage}/index.ts +0 -0
- /package/src/{storage → services/storage}/provider-settings-manager.test.ts +0 -0
- /package/src/{telemetry → services/telemetry}/ITelemetryAdapter.ts +0 -0
- /package/src/{telemetry → services/telemetry}/OpenTelemetryAdapter.test.ts +0 -0
- /package/src/{telemetry → services/telemetry}/OpenTelemetryAdapter.ts +0 -0
- /package/src/{telemetry → services/telemetry}/OpenTelemetryProvider.test.ts +0 -0
- /package/src/{telemetry → services/telemetry}/OpenTelemetryProvider.ts +0 -0
- /package/src/{telemetry → services/telemetry}/TelemetryLoggerSink.test.ts +0 -0
- /package/src/{telemetry → services/telemetry}/TelemetryLoggerSink.ts +0 -0
- /package/src/{telemetry → services/telemetry}/TelemetryService.test.ts +0 -0
- /package/src/{telemetry → services/telemetry}/TelemetryService.ts +0 -0
- /package/src/{telemetry → services/telemetry}/core-events.ts +0 -0
- /package/src/{telemetry → services/telemetry}/distinct-id.test.ts +0 -0
- /package/src/{telemetry → services/telemetry}/distinct-id.ts +0 -0
- /package/src/{telemetry → services/telemetry}/index.ts +0 -0
- /package/src/{input → services/workspace}/file-indexer.d.ts +0 -0
- /package/src/{input → services/workspace}/index.ts +0 -0
- /package/src/{session → services}/workspace-manifest.ts +0 -0
- /package/src/{chat → types}/chat-schema.ts +0 -0
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { existsSync, readFileSync } from "node:fs";
|
|
2
1
|
import { readFile, stat } from "node:fs/promises";
|
|
3
2
|
import { homedir } from "node:os";
|
|
4
3
|
import { isAbsolute, join, resolve } from "node:path";
|
|
@@ -19,68 +18,71 @@ import {
|
|
|
19
18
|
import { setHomeDirIfUnset } from "@clinebot/shared/storage";
|
|
20
19
|
import { nanoid } from "nanoid";
|
|
21
20
|
import { createContextCompactionPrepareTurn } from "../extensions/context/compaction";
|
|
22
|
-
import { enrichPromptWithMentions } from "../input";
|
|
23
|
-
import { createCheckpointHooks } from "../runtime/checkpoint-hooks";
|
|
24
|
-
import { mergeAgentHooks } from "../runtime/hook-file-hooks";
|
|
25
|
-
import { DefaultRuntimeBuilder } from "../runtime/runtime-builder";
|
|
26
|
-
import type { RuntimeBuilder } from "../runtime/session-runtime";
|
|
27
|
-
import { ProviderSettingsManager } from "../storage/provider-settings-manager";
|
|
28
|
-
import { createSpawnAgentTool, type TeamEvent } from "../team";
|
|
29
|
-
import {
|
|
30
|
-
captureAgentCreated,
|
|
31
|
-
captureAgentTeamCreated,
|
|
32
|
-
captureConversationTurnEvent,
|
|
33
|
-
captureModeSwitch,
|
|
34
|
-
captureSubagentExecution,
|
|
35
|
-
captureTaskCompleted,
|
|
36
|
-
} from "../telemetry/core-events";
|
|
37
|
-
import { resolveCoreDistinctId } from "../telemetry/distinct-id";
|
|
38
21
|
import {
|
|
39
22
|
createBuiltinTools,
|
|
40
23
|
resolveToolPresetName,
|
|
41
24
|
type ToolExecutors,
|
|
42
25
|
ToolPresets,
|
|
43
|
-
} from "../tools";
|
|
44
|
-
import {
|
|
45
|
-
import type {
|
|
46
|
-
import
|
|
47
|
-
import type {
|
|
48
|
-
|
|
49
|
-
|
|
26
|
+
} from "../extensions/tools";
|
|
27
|
+
import { createSpawnAgentTool, type TeamEvent } from "../extensions/tools/team";
|
|
28
|
+
import type { HookEventPayload } from "../hooks";
|
|
29
|
+
import { DefaultRuntimeBuilder } from "../runtime/runtime-builder";
|
|
30
|
+
import type {
|
|
31
|
+
RuntimeHost,
|
|
32
|
+
SendSessionInput,
|
|
33
|
+
SessionAccumulatedUsage,
|
|
34
|
+
StartSessionInput,
|
|
35
|
+
StartSessionResult,
|
|
36
|
+
} from "../runtime/runtime-host";
|
|
50
37
|
import {
|
|
51
38
|
OAuthReauthRequiredError,
|
|
52
39
|
type RuntimeOAuthResolution,
|
|
53
40
|
RuntimeOAuthTokenManager,
|
|
54
|
-
} from "
|
|
41
|
+
} from "../runtime/runtime-oauth-token-manager";
|
|
42
|
+
import type { RuntimeBuilder } from "../runtime/session-runtime";
|
|
55
43
|
import {
|
|
56
44
|
type AgentEventContext,
|
|
57
45
|
buildTelemetryAgentIdentity,
|
|
58
46
|
extractAgentEventMetadata,
|
|
59
47
|
handleAgentEvent,
|
|
60
|
-
} from "
|
|
61
|
-
import {
|
|
48
|
+
} from "../services/agent-events";
|
|
49
|
+
import { resolveWorkspacePath } from "../services/config";
|
|
50
|
+
import { prepareLocalRuntimeBootstrap } from "../services/local-runtime-bootstrap";
|
|
51
|
+
import { nowIso } from "../services/session-artifacts";
|
|
62
52
|
import {
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
53
|
+
toSessionRecord,
|
|
54
|
+
withLatestAssistantTurnMetadata,
|
|
55
|
+
} from "../services/session-data";
|
|
56
|
+
import {
|
|
57
|
+
emitMentionTelemetry,
|
|
58
|
+
emitSessionCreationTelemetry,
|
|
59
|
+
} from "../services/session-telemetry";
|
|
60
|
+
import { ProviderSettingsManager } from "../services/storage/provider-settings-manager";
|
|
61
|
+
import {
|
|
62
|
+
captureAgentCreated,
|
|
63
|
+
captureAgentTeamCreated,
|
|
64
|
+
captureConversationTurnEvent,
|
|
65
|
+
captureModeSwitch,
|
|
66
|
+
captureSubagentExecution,
|
|
67
|
+
captureTaskCompleted,
|
|
68
|
+
} from "../services/telemetry/core-events";
|
|
69
|
+
import { resolveCoreDistinctId } from "../services/telemetry/distinct-id";
|
|
70
|
+
import {
|
|
71
|
+
accumulateUsageTotals,
|
|
72
|
+
createInitialAccumulatedUsage,
|
|
73
|
+
} from "../services/usage";
|
|
74
|
+
import { enrichPromptWithMentions } from "../services/workspace";
|
|
75
|
+
import type { FileSessionService } from "../session/file-session-service";
|
|
76
|
+
import type { RpcCoreSessionService } from "../session/rpc-session-service";
|
|
75
77
|
import {
|
|
76
78
|
type SessionManifest,
|
|
77
79
|
SessionManifestSchema,
|
|
78
|
-
} from "
|
|
80
|
+
} from "../session/session-manifest";
|
|
79
81
|
import type {
|
|
80
82
|
CoreSessionService,
|
|
81
83
|
RootSessionArtifacts,
|
|
82
84
|
SessionRow,
|
|
83
|
-
} from "
|
|
85
|
+
} from "../session/session-service";
|
|
84
86
|
import {
|
|
85
87
|
buildTeamRunContinuationPrompt,
|
|
86
88
|
dispatchTeamEventToBackend,
|
|
@@ -91,21 +93,18 @@ import {
|
|
|
91
93
|
shouldAutoContinueTeamRuns,
|
|
92
94
|
trackTeamRunState,
|
|
93
95
|
waitForTeamRunUpdates,
|
|
94
|
-
} from "
|
|
95
|
-
import {
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
} from "
|
|
99
|
-
import {
|
|
100
|
-
toSessionRecord,
|
|
101
|
-
withLatestAssistantTurnMetadata,
|
|
102
|
-
} from "./utils/helpers";
|
|
103
|
-
import type { ActiveSession, PreparedTurnInput } from "./utils/types";
|
|
96
|
+
} from "../session/session-team-coordination";
|
|
97
|
+
import { SessionSource, type SessionStatus } from "../types/common";
|
|
98
|
+
import type { CoreSessionConfig } from "../types/config";
|
|
99
|
+
import type { CoreSessionEvent } from "../types/events";
|
|
100
|
+
import type { ActiveSession, PreparedTurnInput } from "../types/session";
|
|
101
|
+
import type { SessionRecord } from "../types/sessions";
|
|
104
102
|
import {
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
103
|
+
cloneAccumulatedUsage,
|
|
104
|
+
RuntimeHostEventBus,
|
|
105
|
+
readPersistedMessagesFile,
|
|
106
|
+
replaySubagentHookEvent,
|
|
107
|
+
} from "./runtime-host-support";
|
|
109
108
|
|
|
110
109
|
type SessionBackend =
|
|
111
110
|
| CoreSessionService
|
|
@@ -130,12 +129,13 @@ async function loadUserFileContent(path: string): Promise<string> {
|
|
|
130
129
|
return content;
|
|
131
130
|
}
|
|
132
131
|
|
|
133
|
-
export interface
|
|
132
|
+
export interface LocalRuntimeHostOptions {
|
|
134
133
|
distinctId?: string;
|
|
135
134
|
sessionService: SessionBackend;
|
|
136
135
|
runtimeBuilder?: RuntimeBuilder;
|
|
137
136
|
createAgent?: (config: AgentConfig) => Agent;
|
|
138
137
|
defaultToolExecutors?: Partial<ToolExecutors>;
|
|
138
|
+
teamToolsFactory?: import("../runtime/session-runtime").TeamToolsFactory;
|
|
139
139
|
toolPolicies?: AgentConfig["toolPolicies"];
|
|
140
140
|
providerSettingsManager?: ProviderSettingsManager;
|
|
141
141
|
oauthTokenManager?: RuntimeOAuthTokenManager;
|
|
@@ -145,11 +145,13 @@ export interface DefaultSessionManagerOptions {
|
|
|
145
145
|
) => Promise<ToolApprovalResult>;
|
|
146
146
|
}
|
|
147
147
|
|
|
148
|
-
export class
|
|
148
|
+
export class LocalRuntimeHost implements RuntimeHost {
|
|
149
|
+
public readonly runtimeAddress = undefined;
|
|
149
150
|
private readonly sessionService: SessionBackend;
|
|
150
151
|
private readonly runtimeBuilder: RuntimeBuilder;
|
|
151
152
|
private readonly createAgentInstance: (config: AgentConfig) => Agent;
|
|
152
153
|
private readonly defaultToolExecutors?: Partial<ToolExecutors>;
|
|
154
|
+
private readonly teamToolsFactory?: import("../runtime/session-runtime").TeamToolsFactory;
|
|
153
155
|
private readonly defaultToolPolicies?: AgentConfig["toolPolicies"];
|
|
154
156
|
private readonly providerSettingsManager: ProviderSettingsManager;
|
|
155
157
|
private readonly oauthTokenManager: RuntimeOAuthTokenManager;
|
|
@@ -157,7 +159,7 @@ export class DefaultSessionManager implements SessionManager {
|
|
|
157
159
|
private readonly defaultRequestToolApproval?: (
|
|
158
160
|
request: ToolApprovalRequest,
|
|
159
161
|
) => Promise<ToolApprovalResult>;
|
|
160
|
-
private readonly
|
|
162
|
+
private readonly events = new RuntimeHostEventBus();
|
|
161
163
|
private readonly sessions = new Map<string, ActiveSession>();
|
|
162
164
|
private readonly usageBySession = new Map<string, SessionAccumulatedUsage>();
|
|
163
165
|
private readonly subAgentStarts = new Map<
|
|
@@ -165,7 +167,7 @@ export class DefaultSessionManager implements SessionManager {
|
|
|
165
167
|
{ startedAt: number; rootSessionId: string }
|
|
166
168
|
>();
|
|
167
169
|
|
|
168
|
-
constructor(options:
|
|
170
|
+
constructor(options: LocalRuntimeHostOptions) {
|
|
169
171
|
const homeDir = homedir();
|
|
170
172
|
if (homeDir) setHomeDirIfUnset(homeDir);
|
|
171
173
|
const distinctId = resolveCoreDistinctId(options.distinctId);
|
|
@@ -174,6 +176,7 @@ export class DefaultSessionManager implements SessionManager {
|
|
|
174
176
|
this.createAgentInstance =
|
|
175
177
|
options.createAgent ?? ((config) => new Agent(config));
|
|
176
178
|
this.defaultToolExecutors = options.defaultToolExecutors;
|
|
179
|
+
this.teamToolsFactory = options.teamToolsFactory;
|
|
177
180
|
this.defaultToolPolicies = options.toolPolicies;
|
|
178
181
|
this.providerSettingsManager =
|
|
179
182
|
options.providerSettingsManager ?? new ProviderSettingsManager();
|
|
@@ -223,8 +226,6 @@ export class DefaultSessionManager implements SessionManager {
|
|
|
223
226
|
}
|
|
224
227
|
|
|
225
228
|
const sessionDir = join(sessionsDir, sessionId);
|
|
226
|
-
const transcriptPath = join(sessionDir, `${sessionId}.log`);
|
|
227
|
-
const hookPath = join(sessionDir, `${sessionId}.hooks.jsonl`);
|
|
228
229
|
const messagesPath = join(sessionDir, `${sessionId}.messages.json`);
|
|
229
230
|
const manifestPath = join(sessionDir, `${sessionId}.json`);
|
|
230
231
|
const workspacePath = resolveWorkspacePath(input.config);
|
|
@@ -249,64 +250,36 @@ export class DefaultSessionManager implements SessionManager {
|
|
|
249
250
|
messages_path: messagesPath,
|
|
250
251
|
});
|
|
251
252
|
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
effectiveConfig,
|
|
265
|
-
this.providerSettingsManager,
|
|
266
|
-
resolveReasoningSettings,
|
|
267
|
-
);
|
|
268
|
-
const configWithProvider: CoreSessionConfig = {
|
|
269
|
-
...effectiveConfig,
|
|
270
|
-
providerConfig,
|
|
271
|
-
workspaceMetadata,
|
|
272
|
-
};
|
|
273
|
-
configWithProvider.hooks = mergeAgentHooks([
|
|
274
|
-
effectiveConfig.hooks,
|
|
275
|
-
effectiveConfig.checkpoint?.enabled === true
|
|
276
|
-
? createCheckpointHooks({
|
|
277
|
-
cwd: configWithProvider.cwd,
|
|
278
|
-
sessionId,
|
|
279
|
-
logger: configWithProvider.logger,
|
|
280
|
-
createCheckpoint: effectiveConfig.checkpoint?.createCheckpoint,
|
|
281
|
-
readSessionMetadata: async () =>
|
|
282
|
-
(await this.get(sessionId))?.metadata as
|
|
283
|
-
| Record<string, unknown>
|
|
284
|
-
| undefined,
|
|
285
|
-
writeSessionMetadata: async (metadata) => {
|
|
286
|
-
await this.persistSessionMetadata(sessionId, () => metadata);
|
|
287
|
-
},
|
|
288
|
-
})
|
|
289
|
-
: undefined,
|
|
290
|
-
]);
|
|
291
|
-
|
|
292
|
-
const runtime = await this.runtimeBuilder.build({
|
|
293
|
-
config: configWithProvider,
|
|
294
|
-
hooks: configWithProvider.hooks,
|
|
295
|
-
extensions: effectiveConfig.extensions,
|
|
296
|
-
logger: configWithProvider.logger,
|
|
297
|
-
telemetry: configWithProvider.telemetry,
|
|
253
|
+
let bootstrap!: Awaited<ReturnType<typeof prepareLocalRuntimeBootstrap>>;
|
|
254
|
+
bootstrap = await prepareLocalRuntimeBootstrap({
|
|
255
|
+
input: startInput,
|
|
256
|
+
localRuntime: input.localRuntime,
|
|
257
|
+
sessionId,
|
|
258
|
+
providerSettingsManager: this.providerSettingsManager,
|
|
259
|
+
defaultTelemetry: this.defaultTelemetry,
|
|
260
|
+
defaultToolExecutors: this.defaultToolExecutors,
|
|
261
|
+
teamToolsFactory: this.teamToolsFactory,
|
|
262
|
+
defaultToolPolicies: this.defaultToolPolicies,
|
|
263
|
+
defaultRequestToolApproval: this.defaultRequestToolApproval,
|
|
264
|
+
onPluginEvent: (event) => void this.handlePluginEvent(sessionId, event),
|
|
298
265
|
onTeamEvent: (event: TeamEvent) => {
|
|
299
266
|
void this.handleTeamEvent(sessionId, event);
|
|
300
|
-
|
|
267
|
+
bootstrap.config.onTeamEvent?.(event);
|
|
268
|
+
},
|
|
269
|
+
createSpawnTool: () => this.createSpawnTool(bootstrap.config, sessionId),
|
|
270
|
+
readSessionMetadata: async () =>
|
|
271
|
+
(await this.get(sessionId))?.metadata as
|
|
272
|
+
| Record<string, unknown>
|
|
273
|
+
| undefined,
|
|
274
|
+
writeSessionMetadata: async (metadata) => {
|
|
275
|
+
await this.persistSessionMetadata(sessionId, () => metadata);
|
|
301
276
|
},
|
|
302
|
-
createSpawnTool: () =>
|
|
303
|
-
this.createSpawnTool(configWithProvider, sessionId),
|
|
304
|
-
onTeamRestored: input.onTeamRestored,
|
|
305
|
-
userInstructionWatcher: input.userInstructionWatcher,
|
|
306
|
-
defaultToolExecutors:
|
|
307
|
-
input.defaultToolExecutors ?? this.defaultToolExecutors,
|
|
308
|
-
teamToolsFactory: input.teamToolsFactory,
|
|
309
277
|
});
|
|
278
|
+
const runtime = await this.runtimeBuilder.build(
|
|
279
|
+
bootstrap.runtimeBuilderInput,
|
|
280
|
+
);
|
|
281
|
+
const configWithProvider = bootstrap.config;
|
|
282
|
+
const providerConfig = bootstrap.providerConfig;
|
|
310
283
|
if (runtime.teamRuntime && !configWithProvider.teamName?.trim()) {
|
|
311
284
|
configWithProvider.teamName = runtime.teamRuntime.getTeamName();
|
|
312
285
|
}
|
|
@@ -329,14 +302,13 @@ export class DefaultSessionManager implements SessionManager {
|
|
|
329
302
|
execution: configWithProvider.execution,
|
|
330
303
|
prepareTurn: createContextCompactionPrepareTurn(configWithProvider),
|
|
331
304
|
tools,
|
|
332
|
-
hooks:
|
|
333
|
-
extensions:
|
|
305
|
+
hooks: bootstrap.hooks,
|
|
306
|
+
extensions: bootstrap.extensions,
|
|
334
307
|
hookErrorMode: configWithProvider.hookErrorMode,
|
|
335
|
-
initialMessages:
|
|
308
|
+
initialMessages: bootstrap.effectiveInput.initialMessages,
|
|
336
309
|
userFileContentLoader: loadUserFileContent,
|
|
337
|
-
toolPolicies:
|
|
338
|
-
requestToolApproval:
|
|
339
|
-
input.requestToolApproval ?? this.defaultRequestToolApproval,
|
|
310
|
+
toolPolicies: bootstrap.toolPolicies,
|
|
311
|
+
requestToolApproval: bootstrap.requestToolApproval,
|
|
340
312
|
onConsecutiveMistakeLimitReached:
|
|
341
313
|
configWithProvider.onConsecutiveMistakeLimitReached,
|
|
342
314
|
completionGuard: runtime.completionGuard,
|
|
@@ -384,6 +356,7 @@ export class DefaultSessionManager implements SessionManager {
|
|
|
384
356
|
const active: ActiveSession = {
|
|
385
357
|
sessionId,
|
|
386
358
|
config: configWithProvider,
|
|
359
|
+
sessionMetadata: startInput.sessionMetadata,
|
|
387
360
|
source,
|
|
388
361
|
startedAt,
|
|
389
362
|
pendingPrompt: manifest.prompt,
|
|
@@ -398,7 +371,7 @@ export class DefaultSessionManager implements SessionManager {
|
|
|
398
371
|
teamRunWaiters: [],
|
|
399
372
|
pendingPrompts: [],
|
|
400
373
|
drainingPendingPrompts: false,
|
|
401
|
-
pluginSandboxShutdown,
|
|
374
|
+
pluginSandboxShutdown: bootstrap.pluginSandboxShutdown,
|
|
402
375
|
};
|
|
403
376
|
this.sessions.set(sessionId, active);
|
|
404
377
|
this.emitStatus(sessionId, "running");
|
|
@@ -424,8 +397,6 @@ export class DefaultSessionManager implements SessionManager {
|
|
|
424
397
|
sessionId,
|
|
425
398
|
manifest,
|
|
426
399
|
manifestPath,
|
|
427
|
-
transcriptPath,
|
|
428
|
-
hookPath,
|
|
429
400
|
messagesPath,
|
|
430
401
|
result,
|
|
431
402
|
};
|
|
@@ -474,8 +445,7 @@ export class DefaultSessionManager implements SessionManager {
|
|
|
474
445
|
async getAccumulatedUsage(
|
|
475
446
|
sessionId: string,
|
|
476
447
|
): Promise<SessionAccumulatedUsage | undefined> {
|
|
477
|
-
|
|
478
|
-
return usage ? { ...usage } : undefined;
|
|
448
|
+
return cloneAccumulatedUsage(this.usageBySession.get(sessionId));
|
|
479
449
|
}
|
|
480
450
|
|
|
481
451
|
async abort(sessionId: string, reason?: unknown): Promise<void> {
|
|
@@ -486,6 +456,10 @@ export class DefaultSessionManager implements SessionManager {
|
|
|
486
456
|
properties: { sessionId },
|
|
487
457
|
});
|
|
488
458
|
session.aborting = true;
|
|
459
|
+
if (session.pendingPrompts.length > 0) {
|
|
460
|
+
session.pendingPrompts.length = 0;
|
|
461
|
+
this.emitPendingPrompts(session);
|
|
462
|
+
}
|
|
489
463
|
(
|
|
490
464
|
session.agent as Agent & {
|
|
491
465
|
abort: (abortReason?: unknown) => void;
|
|
@@ -555,55 +529,49 @@ export class DefaultSessionManager implements SessionManager {
|
|
|
555
529
|
return result.deleted;
|
|
556
530
|
}
|
|
557
531
|
|
|
558
|
-
async
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
}
|
|
565
|
-
|
|
532
|
+
async update(
|
|
533
|
+
sessionId: string,
|
|
534
|
+
updates: {
|
|
535
|
+
prompt?: string | null;
|
|
536
|
+
metadata?: Record<string, unknown> | null;
|
|
537
|
+
title?: string | null;
|
|
538
|
+
},
|
|
539
|
+
): Promise<{ updated: boolean }> {
|
|
540
|
+
const result = await this.invokeOptionalValue<{ updated?: boolean }>(
|
|
541
|
+
"updateSession",
|
|
542
|
+
{
|
|
543
|
+
sessionId,
|
|
544
|
+
prompt: updates.prompt,
|
|
545
|
+
metadata: updates.metadata,
|
|
546
|
+
title: updates.title,
|
|
547
|
+
},
|
|
548
|
+
);
|
|
549
|
+
return { updated: result?.updated === true };
|
|
566
550
|
}
|
|
567
551
|
|
|
568
552
|
async readMessages(sessionId: string): Promise<LlmsProviders.Message[]> {
|
|
569
553
|
const row = await this.getRow(sessionId);
|
|
570
|
-
|
|
571
|
-
if (!messagesPath || !existsSync(messagesPath)) return [];
|
|
572
|
-
try {
|
|
573
|
-
const raw = readFileSync(messagesPath, "utf8").trim();
|
|
574
|
-
if (!raw) return [];
|
|
575
|
-
const parsed = JSON.parse(raw) as unknown;
|
|
576
|
-
if (Array.isArray(parsed)) return parsed as LlmsProviders.Message[];
|
|
577
|
-
if (parsed && typeof parsed === "object" && !Array.isArray(parsed)) {
|
|
578
|
-
const messages = (parsed as { messages?: unknown }).messages;
|
|
579
|
-
if (Array.isArray(messages)) return messages as LlmsProviders.Message[];
|
|
580
|
-
}
|
|
581
|
-
return [];
|
|
582
|
-
} catch {
|
|
583
|
-
return [];
|
|
584
|
-
}
|
|
554
|
+
return readPersistedMessagesFile(row?.messagesPath);
|
|
585
555
|
}
|
|
586
556
|
|
|
587
|
-
async
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
557
|
+
async handleHookEvent(payload: HookEventPayload): Promise<void> {
|
|
558
|
+
await replaySubagentHookEvent(payload, {
|
|
559
|
+
queueSpawnRequest: (event: HookEventPayload) =>
|
|
560
|
+
this.invokeOptional("queueSpawnRequest", event),
|
|
561
|
+
upsertSubagentSessionFromHook: (event: HookEventPayload) =>
|
|
562
|
+
this.invokeOptionalValue<string | undefined>(
|
|
563
|
+
"upsertSubagentSessionFromHook",
|
|
564
|
+
event,
|
|
565
|
+
),
|
|
566
|
+
appendSubagentHookAudit: (sessionId: string, event: HookEventPayload) =>
|
|
567
|
+
this.invokeOptional("appendSubagentHookAudit", sessionId, event),
|
|
568
|
+
applySubagentStatus: (sessionId: string, event: HookEventPayload) =>
|
|
569
|
+
this.invokeOptional("applySubagentStatus", sessionId, event),
|
|
599
570
|
});
|
|
600
571
|
}
|
|
601
572
|
|
|
602
573
|
subscribe(listener: (event: CoreSessionEvent) => void): () => void {
|
|
603
|
-
this.
|
|
604
|
-
return () => {
|
|
605
|
-
this.listeners.delete(listener);
|
|
606
|
-
};
|
|
574
|
+
return this.events.subscribe(listener);
|
|
607
575
|
}
|
|
608
576
|
|
|
609
577
|
async updateSessionModel(sessionId: string, modelId: string): Promise<void> {
|
|
@@ -796,6 +764,7 @@ export class DefaultSessionManager implements SessionManager {
|
|
|
796
764
|
enableSpawn: session.config.enableSpawnAgent,
|
|
797
765
|
enableTeams: session.config.enableAgentTeams,
|
|
798
766
|
prompt: session.pendingPrompt,
|
|
767
|
+
metadata: session.sessionMetadata,
|
|
799
768
|
startedAt: session.startedAt,
|
|
800
769
|
})) as RootSessionArtifacts;
|
|
801
770
|
}
|
|
@@ -992,7 +961,7 @@ export class DefaultSessionManager implements SessionManager {
|
|
|
992
961
|
},
|
|
993
962
|
): void {
|
|
994
963
|
const session = this.sessions.get(sessionId);
|
|
995
|
-
if (!session) {
|
|
964
|
+
if (!session || session.aborting) {
|
|
996
965
|
return;
|
|
997
966
|
}
|
|
998
967
|
const { prompt, delivery, userImages, userFiles } = entry;
|
|
@@ -1041,7 +1010,7 @@ export class DefaultSessionManager implements SessionManager {
|
|
|
1041
1010
|
|
|
1042
1011
|
private async drainPendingPrompts(sessionId: string): Promise<void> {
|
|
1043
1012
|
const session = this.sessions.get(sessionId);
|
|
1044
|
-
if (!session || session.drainingPendingPrompts) {
|
|
1013
|
+
if (!session || session.aborting || session.drainingPendingPrompts) {
|
|
1045
1014
|
return;
|
|
1046
1015
|
}
|
|
1047
1016
|
const canStartRun =
|
|
@@ -1181,7 +1150,6 @@ export class DefaultSessionManager implements SessionManager {
|
|
|
1181
1150
|
...ToolPresets[
|
|
1182
1151
|
resolveToolPresetName({
|
|
1183
1152
|
mode: config.mode,
|
|
1184
|
-
yolo: config.yolo,
|
|
1185
1153
|
})
|
|
1186
1154
|
],
|
|
1187
1155
|
executors: this.defaultToolExecutors,
|
|
@@ -1391,9 +1359,7 @@ export class DefaultSessionManager implements SessionManager {
|
|
|
1391
1359
|
});
|
|
1392
1360
|
} catch (error) {
|
|
1393
1361
|
if (error instanceof OAuthReauthRequiredError) {
|
|
1394
|
-
throw new Error(
|
|
1395
|
-
`OAuth session for "${error.providerId}" requires re-authentication. Run "clite auth ${error.providerId}" and retry.`,
|
|
1396
|
-
);
|
|
1362
|
+
throw new Error(`${error.providerId} requires re-authentication.`);
|
|
1397
1363
|
}
|
|
1398
1364
|
throw error;
|
|
1399
1365
|
}
|
|
@@ -1466,7 +1432,7 @@ export class DefaultSessionManager implements SessionManager {
|
|
|
1466
1432
|
}
|
|
1467
1433
|
|
|
1468
1434
|
private emit(event: CoreSessionEvent): void {
|
|
1469
|
-
|
|
1435
|
+
this.events.emit(event);
|
|
1470
1436
|
}
|
|
1471
1437
|
|
|
1472
1438
|
private async listRows(limit: number): Promise<SessionRow[]> {
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { describe, expect, it, vi } from "vitest";
|
|
2
|
+
|
|
3
|
+
const clientCloseMock = vi.hoisted(() => vi.fn());
|
|
4
|
+
const streamEventsMock = vi.hoisted(() => vi.fn(() => () => {}));
|
|
5
|
+
const startRuntimeSessionMock = vi.hoisted(() => vi.fn());
|
|
6
|
+
const sendRuntimeSessionMock = vi.hoisted(() => vi.fn());
|
|
7
|
+
const abortRuntimeSessionMock = vi.hoisted(() => vi.fn());
|
|
8
|
+
const stopRuntimeSessionMock = vi.hoisted(() => vi.fn());
|
|
9
|
+
const getSessionMock = vi.hoisted(() => vi.fn());
|
|
10
|
+
|
|
11
|
+
vi.mock("@clinebot/rpc", () => ({
|
|
12
|
+
RpcSessionClient: class {
|
|
13
|
+
close = clientCloseMock;
|
|
14
|
+
streamEvents = streamEventsMock;
|
|
15
|
+
startRuntimeSession = startRuntimeSessionMock;
|
|
16
|
+
sendRuntimeSession = sendRuntimeSessionMock;
|
|
17
|
+
abortRuntimeSession = abortRuntimeSessionMock;
|
|
18
|
+
stopRuntimeSession = stopRuntimeSessionMock;
|
|
19
|
+
getSession = getSessionMock;
|
|
20
|
+
respondToolApproval = vi.fn();
|
|
21
|
+
},
|
|
22
|
+
}));
|
|
23
|
+
|
|
24
|
+
describe("RpcRuntimeHost", () => {
|
|
25
|
+
it("emits running status when a remote session starts", async () => {
|
|
26
|
+
const { RpcRuntimeHost } = await import("./rpc");
|
|
27
|
+
startRuntimeSessionMock.mockResolvedValue({
|
|
28
|
+
sessionId: "session-1",
|
|
29
|
+
startResult: {
|
|
30
|
+
manifestPath: "/tmp/session-1.json",
|
|
31
|
+
messagesPath: "/tmp/session-1.messages.json",
|
|
32
|
+
},
|
|
33
|
+
});
|
|
34
|
+
const backend = {
|
|
35
|
+
address: "127.0.0.1:4317",
|
|
36
|
+
close: vi.fn(),
|
|
37
|
+
readSessionManifest: vi.fn().mockReturnValue({
|
|
38
|
+
session_id: "session-1",
|
|
39
|
+
status: "running",
|
|
40
|
+
}),
|
|
41
|
+
} as unknown as import("../session/rpc-session-service").RpcCoreSessionService;
|
|
42
|
+
|
|
43
|
+
const host = new RpcRuntimeHost(backend, undefined, undefined);
|
|
44
|
+
const listener = vi.fn();
|
|
45
|
+
const unsubscribe = host.subscribe(listener);
|
|
46
|
+
|
|
47
|
+
await host.start({
|
|
48
|
+
config: {
|
|
49
|
+
cwd: "/tmp/project",
|
|
50
|
+
workspaceRoot: "/tmp/project",
|
|
51
|
+
providerId: "mock-provider",
|
|
52
|
+
modelId: "mock-model",
|
|
53
|
+
mode: "act",
|
|
54
|
+
systemPrompt: "system",
|
|
55
|
+
enableTools: true,
|
|
56
|
+
enableSpawnAgent: false,
|
|
57
|
+
enableAgentTeams: false,
|
|
58
|
+
},
|
|
59
|
+
interactive: true,
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
expect(listener).toHaveBeenCalledWith({
|
|
63
|
+
type: "status",
|
|
64
|
+
payload: { sessionId: "session-1", status: "running" },
|
|
65
|
+
});
|
|
66
|
+
unsubscribe();
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
it("does not close the shared backend on dispose", async () => {
|
|
70
|
+
const { RpcRuntimeHost } = await import("./rpc");
|
|
71
|
+
const backend = {
|
|
72
|
+
address: "127.0.0.1:4317",
|
|
73
|
+
close: vi.fn(),
|
|
74
|
+
} as unknown as import("../session/rpc-session-service").RpcCoreSessionService;
|
|
75
|
+
|
|
76
|
+
const host = new RpcRuntimeHost(backend, undefined, undefined);
|
|
77
|
+
await host.dispose();
|
|
78
|
+
|
|
79
|
+
expect(clientCloseMock).toHaveBeenCalledTimes(1);
|
|
80
|
+
expect(backend.close).not.toHaveBeenCalled();
|
|
81
|
+
});
|
|
82
|
+
});
|