@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
|
@@ -138,6 +138,23 @@ export interface SpawnTeammateOptions {
|
|
|
138
138
|
config: TeamMemberConfig;
|
|
139
139
|
}
|
|
140
140
|
|
|
141
|
+
function isAbortLikeError(error: unknown): boolean {
|
|
142
|
+
if (
|
|
143
|
+
typeof DOMException !== "undefined" &&
|
|
144
|
+
error instanceof DOMException &&
|
|
145
|
+
error.name === "AbortError"
|
|
146
|
+
) {
|
|
147
|
+
return true;
|
|
148
|
+
}
|
|
149
|
+
if (!(error instanceof Error)) {
|
|
150
|
+
return false;
|
|
151
|
+
}
|
|
152
|
+
return (
|
|
153
|
+
error.name === "AbortError" ||
|
|
154
|
+
error.message.toLowerCase().includes("aborted")
|
|
155
|
+
);
|
|
156
|
+
}
|
|
157
|
+
|
|
141
158
|
// =============================================================================
|
|
142
159
|
// AgentTeam
|
|
143
160
|
// =============================================================================
|
|
@@ -484,6 +501,7 @@ interface TeamMemberState extends TeamMemberSnapshot {
|
|
|
484
501
|
runningCount: number;
|
|
485
502
|
lastMissionStep: number;
|
|
486
503
|
lastMissionAt: number;
|
|
504
|
+
pendingSteerMessage?: string;
|
|
487
505
|
}
|
|
488
506
|
|
|
489
507
|
export class AgentTeamsRuntime {
|
|
@@ -568,8 +586,6 @@ export class AgentTeamsRuntime {
|
|
|
568
586
|
listTaskItems(options?: {
|
|
569
587
|
status?: TeamTaskStatus;
|
|
570
588
|
assignee?: string;
|
|
571
|
-
unassignedOnly?: boolean;
|
|
572
|
-
readyOnly?: boolean;
|
|
573
589
|
}): TeamTaskListItem[] {
|
|
574
590
|
return Array.from(this.tasks.values())
|
|
575
591
|
.map((task) => {
|
|
@@ -590,12 +606,6 @@ export class AgentTeamsRuntime {
|
|
|
590
606
|
if (options?.assignee && task.assignee !== options.assignee) {
|
|
591
607
|
return false;
|
|
592
608
|
}
|
|
593
|
-
if (options?.unassignedOnly && !!task.assignee) {
|
|
594
|
-
return false;
|
|
595
|
-
}
|
|
596
|
-
if (options?.readyOnly && !task.isReady) {
|
|
597
|
-
return false;
|
|
598
|
-
}
|
|
599
609
|
return true;
|
|
600
610
|
});
|
|
601
611
|
}
|
|
@@ -825,6 +835,15 @@ export class AgentTeamsRuntime {
|
|
|
825
835
|
const wrappedConfig: TeamMemberConfig = {
|
|
826
836
|
...config,
|
|
827
837
|
apiTimeoutMs: TEAMMATE_API_TIMEOUT_MS,
|
|
838
|
+
consumePendingUserMessage: () => {
|
|
839
|
+
const member = this.members.get(agentId);
|
|
840
|
+
if (!member || !member.pendingSteerMessage) {
|
|
841
|
+
return undefined;
|
|
842
|
+
}
|
|
843
|
+
const message = member.pendingSteerMessage;
|
|
844
|
+
member.pendingSteerMessage = undefined;
|
|
845
|
+
return message;
|
|
846
|
+
},
|
|
828
847
|
onEvent: (event: AgentEvent) => {
|
|
829
848
|
config.onEvent?.(event);
|
|
830
849
|
this.emitEvent({ type: TeamMessageType.AgentEvent, agentId, event });
|
|
@@ -870,7 +889,13 @@ export class AgentTeamsRuntime {
|
|
|
870
889
|
if (!member || member.role !== "teammate") {
|
|
871
890
|
throw new Error(`Teammate "${agentId}" was not found`);
|
|
872
891
|
}
|
|
873
|
-
|
|
892
|
+
try {
|
|
893
|
+
member.agent?.abort();
|
|
894
|
+
} catch (error) {
|
|
895
|
+
if (!isAbortLikeError(error)) {
|
|
896
|
+
throw error;
|
|
897
|
+
}
|
|
898
|
+
}
|
|
874
899
|
member.status = "stopped";
|
|
875
900
|
this.emitEvent({ type: TeamMessageType.TeammateShutdown, agentId, reason });
|
|
876
901
|
}
|
|
@@ -986,9 +1011,17 @@ export class AgentTeamsRuntime {
|
|
|
986
1011
|
this.emitEvent({ type: TeamMessageType.TaskStart, agentId, message });
|
|
987
1012
|
|
|
988
1013
|
try {
|
|
1014
|
+
const unreadMail = this.listMailbox(agentId, {
|
|
1015
|
+
unreadOnly: true,
|
|
1016
|
+
markRead: true,
|
|
1017
|
+
});
|
|
1018
|
+
const enrichedMessage =
|
|
1019
|
+
unreadMail.length > 0
|
|
1020
|
+
? `${this.buildMailboxNotification(unreadMail)}\n\n${message}`
|
|
1021
|
+
: message;
|
|
989
1022
|
const result = options?.continueConversation
|
|
990
|
-
? await member.agent.continue(
|
|
991
|
-
: await member.agent.run(
|
|
1023
|
+
? await member.agent.continue(enrichedMessage)
|
|
1024
|
+
: await member.agent.run(enrichedMessage);
|
|
992
1025
|
this.emitEvent({ type: TeamMessageType.TaskEnd, agentId, result });
|
|
993
1026
|
this.recordProgressStep(
|
|
994
1027
|
agentId,
|
|
@@ -1254,7 +1287,8 @@ export class AgentTeamsRuntime {
|
|
|
1254
1287
|
if (!this.members.has(fromAgentId)) {
|
|
1255
1288
|
throw new Error(`Unknown sender "${fromAgentId}"`);
|
|
1256
1289
|
}
|
|
1257
|
-
|
|
1290
|
+
const recipient = this.members.get(toAgentId);
|
|
1291
|
+
if (!recipient) {
|
|
1258
1292
|
throw new Error(`Unknown recipient "${toAgentId}"`);
|
|
1259
1293
|
}
|
|
1260
1294
|
const message: TeamMailboxMessage = {
|
|
@@ -1272,6 +1306,13 @@ export class AgentTeamsRuntime {
|
|
|
1272
1306
|
type: TeamMessageType.TeamMessage,
|
|
1273
1307
|
message: { ...message },
|
|
1274
1308
|
});
|
|
1309
|
+
if (
|
|
1310
|
+
recipient.role === "teammate" &&
|
|
1311
|
+
recipient.runningCount > 0 &&
|
|
1312
|
+
recipient.agent
|
|
1313
|
+
) {
|
|
1314
|
+
recipient.pendingSteerMessage = `[MAILBOX] You got a message from ${fromAgentId}. Subject: "${subject}". Use the team_read_mailbox tool to read it at your convenience.`;
|
|
1315
|
+
}
|
|
1275
1316
|
return { ...message };
|
|
1276
1317
|
}
|
|
1277
1318
|
|
|
@@ -1279,15 +1320,14 @@ export class AgentTeamsRuntime {
|
|
|
1279
1320
|
fromAgentId: string,
|
|
1280
1321
|
subject: string,
|
|
1281
1322
|
body: string,
|
|
1282
|
-
options?: {
|
|
1323
|
+
options?: { taskId?: string },
|
|
1283
1324
|
): TeamMailboxMessage[] {
|
|
1284
|
-
const includeLead = options?.includeLead ?? false;
|
|
1285
1325
|
const messages: TeamMailboxMessage[] = [];
|
|
1286
1326
|
for (const member of this.members.values()) {
|
|
1287
1327
|
if (member.agentId === fromAgentId) {
|
|
1288
1328
|
continue;
|
|
1289
1329
|
}
|
|
1290
|
-
if (
|
|
1330
|
+
if (member.role === "lead") {
|
|
1291
1331
|
continue;
|
|
1292
1332
|
}
|
|
1293
1333
|
messages.push(
|
|
@@ -1458,7 +1498,13 @@ export class AgentTeamsRuntime {
|
|
|
1458
1498
|
|
|
1459
1499
|
for (const member of this.members.values()) {
|
|
1460
1500
|
if (member.role === "teammate") {
|
|
1461
|
-
|
|
1501
|
+
try {
|
|
1502
|
+
member.agent?.abort();
|
|
1503
|
+
} catch (error) {
|
|
1504
|
+
if (!isAbortLikeError(error)) {
|
|
1505
|
+
throw error;
|
|
1506
|
+
}
|
|
1507
|
+
}
|
|
1462
1508
|
}
|
|
1463
1509
|
}
|
|
1464
1510
|
|
|
@@ -1526,7 +1572,7 @@ export class AgentTeamsRuntime {
|
|
|
1526
1572
|
this.appendMissionLog({
|
|
1527
1573
|
agentId,
|
|
1528
1574
|
kind: "done",
|
|
1529
|
-
summary: `
|
|
1575
|
+
summary: `Completed a delegated run (${event.iterations} iterations)`,
|
|
1530
1576
|
});
|
|
1531
1577
|
return;
|
|
1532
1578
|
}
|
|
@@ -1638,6 +1684,23 @@ export class AgentTeamsRuntime {
|
|
|
1638
1684
|
});
|
|
1639
1685
|
}
|
|
1640
1686
|
|
|
1687
|
+
private buildMailboxNotification(messages: TeamMailboxMessage[]): string {
|
|
1688
|
+
if (messages.length === 0) {
|
|
1689
|
+
return "";
|
|
1690
|
+
}
|
|
1691
|
+
const lines: string[] = [
|
|
1692
|
+
`[MAILBOX] You have ${messages.length} unread message(s):`,
|
|
1693
|
+
];
|
|
1694
|
+
for (const msg of messages) {
|
|
1695
|
+
lines.push(
|
|
1696
|
+
`--- Message from ${msg.fromAgentId} | subject: ${msg.subject} ---`,
|
|
1697
|
+
);
|
|
1698
|
+
lines.push(msg.body);
|
|
1699
|
+
}
|
|
1700
|
+
lines.push("---");
|
|
1701
|
+
return lines.join("\n");
|
|
1702
|
+
}
|
|
1703
|
+
|
|
1641
1704
|
private emitEvent(event: TeamEvent): void {
|
|
1642
1705
|
try {
|
|
1643
1706
|
this.onTeamEvent?.(event);
|
|
@@ -180,7 +180,6 @@ describe("createSpawnAgentTool", () => {
|
|
|
180
180
|
{
|
|
181
181
|
systemPrompt: "System",
|
|
182
182
|
task: "Fail task",
|
|
183
|
-
maxIterations: 6,
|
|
184
183
|
},
|
|
185
184
|
{
|
|
186
185
|
agentId: "parent-2",
|
|
@@ -197,11 +196,6 @@ describe("createSpawnAgentTool", () => {
|
|
|
197
196
|
error: expect.any(Error),
|
|
198
197
|
}),
|
|
199
198
|
);
|
|
200
|
-
expect(agentConstructorSpy).toHaveBeenCalledWith(
|
|
201
|
-
expect.objectContaining({
|
|
202
|
-
maxIterations: 6,
|
|
203
|
-
}),
|
|
204
|
-
);
|
|
205
199
|
});
|
|
206
200
|
|
|
207
201
|
it("leaves maxIterations unset when neither input nor default is provided", async () => {
|
|
@@ -32,12 +32,6 @@ export const SpawnAgentInputSchema = z.object({
|
|
|
32
32
|
.string()
|
|
33
33
|
.describe("System prompt defining the sub-agent's behavior"),
|
|
34
34
|
task: z.string().describe("Task for the sub-agent to complete"),
|
|
35
|
-
maxIterations: z
|
|
36
|
-
.number()
|
|
37
|
-
.int()
|
|
38
|
-
.min(1)
|
|
39
|
-
.optional()
|
|
40
|
-
.describe("Max iterations for the sub-agent"),
|
|
41
35
|
});
|
|
42
36
|
|
|
43
37
|
export type SpawnAgentInput = z.infer<typeof SpawnAgentInputSchema>;
|
|
@@ -136,7 +130,7 @@ export function createSpawnAgentTool(
|
|
|
136
130
|
prompt: input.systemPrompt,
|
|
137
131
|
configProvider: config.configProvider,
|
|
138
132
|
tools,
|
|
139
|
-
maxIterations:
|
|
133
|
+
maxIterations: config.defaultMaxIterations,
|
|
140
134
|
parentAgentId: context.agentId,
|
|
141
135
|
abortSignal: context.abortSignal,
|
|
142
136
|
onEvent: config.onSubAgentEvent,
|
|
@@ -11,7 +11,7 @@ export function buildTeammateSystemPrompt(
|
|
|
11
11
|
}
|
|
12
12
|
|
|
13
13
|
return buildClineSystemPrompt({
|
|
14
|
-
ide: config.clineIdeName?.trim() || "Terminal
|
|
14
|
+
ide: config.clineIdeName?.trim() || "Terminal",
|
|
15
15
|
workspaceRoot: config.cwd?.trim() || "/",
|
|
16
16
|
providerId: config.providerId,
|
|
17
17
|
rules: `# Team Teammate Role\n${trimmedPrompt}`,
|
|
@@ -31,7 +31,7 @@ export function buildSubAgentSystemPrompt(
|
|
|
31
31
|
}
|
|
32
32
|
|
|
33
33
|
return buildClineSystemPrompt({
|
|
34
|
-
ide: "Terminal
|
|
34
|
+
ide: config.clineIdeName || "Terminal",
|
|
35
35
|
workspaceRoot: config.cwd?.trim() || "/",
|
|
36
36
|
providerId: config.providerId,
|
|
37
37
|
overridePrompt: trimmedPrompt,
|
|
@@ -69,8 +69,10 @@ describe("createAgentTeamsTools schema surface", () => {
|
|
|
69
69
|
const createOutcome = tools.find(
|
|
70
70
|
(tool) => tool.name === "team_create_outcome",
|
|
71
71
|
);
|
|
72
|
-
const
|
|
73
|
-
const teamLogUpdate = tools.find(
|
|
72
|
+
const teamAwaitRuns = tools.find((tool) => tool.name === "team_await_runs");
|
|
73
|
+
const teamLogUpdate = tools.find(
|
|
74
|
+
(tool) => tool.name === "team_mission_log",
|
|
75
|
+
);
|
|
74
76
|
|
|
75
77
|
expect(spawn?.inputSchema.type).toBe("object");
|
|
76
78
|
const teamTaskSchema = teamTask?.inputSchema as
|
|
@@ -85,7 +87,7 @@ describe("createAgentTeamsTools schema surface", () => {
|
|
|
85
87
|
expect(teamTaskSchema?.required).toEqual(["action"]);
|
|
86
88
|
expect(send?.inputSchema.type).toBe("object");
|
|
87
89
|
expect(createOutcome?.inputSchema.type).toBe("object");
|
|
88
|
-
expect(
|
|
90
|
+
expect(teamAwaitRuns?.inputSchema.type).toBe("object");
|
|
89
91
|
const schema = teamLogUpdate?.inputSchema as
|
|
90
92
|
| { properties: Record<string, unknown>; required: unknown[] }
|
|
91
93
|
| undefined;
|
|
@@ -243,7 +245,7 @@ describe("createAgentTeamsTools schema surface", () => {
|
|
|
243
245
|
});
|
|
244
246
|
});
|
|
245
247
|
|
|
246
|
-
it("
|
|
248
|
+
it("ignores non-create fields for action=create and reports them back", async () => {
|
|
247
249
|
const runtime = new AgentTeamsRuntime({ teamName: "test-team" });
|
|
248
250
|
const tools = createAgentTeamsTools({
|
|
249
251
|
runtime,
|
|
@@ -252,13 +254,18 @@ describe("createAgentTeamsTools schema surface", () => {
|
|
|
252
254
|
});
|
|
253
255
|
const teamTask = tools.find((tool) => tool.name === "team_task");
|
|
254
256
|
expect(teamTask).toBeDefined();
|
|
257
|
+
if (!teamTask) {
|
|
258
|
+
throw new Error("Expected team_task tool to be defined");
|
|
259
|
+
}
|
|
255
260
|
|
|
256
261
|
await expect(
|
|
257
|
-
teamTask
|
|
262
|
+
teamTask.execute(
|
|
258
263
|
{
|
|
259
|
-
action: "
|
|
260
|
-
|
|
261
|
-
|
|
264
|
+
action: "create",
|
|
265
|
+
title: "Draft TypeScript haiku",
|
|
266
|
+
description: "Write a concise haiku",
|
|
267
|
+
status: "pending",
|
|
268
|
+
summary: "not used",
|
|
262
269
|
},
|
|
263
270
|
{
|
|
264
271
|
agentId: "lead",
|
|
@@ -266,7 +273,13 @@ describe("createAgentTeamsTools schema surface", () => {
|
|
|
266
273
|
iteration: 1,
|
|
267
274
|
},
|
|
268
275
|
),
|
|
269
|
-
).
|
|
276
|
+
).resolves.toMatchObject({
|
|
277
|
+
action: "create",
|
|
278
|
+
status: "pending",
|
|
279
|
+
taskId: expect.stringMatching(/^task_/),
|
|
280
|
+
ignoredFields: ["status", "summary"],
|
|
281
|
+
note: "Ignored fields for action=create: status, summary",
|
|
282
|
+
});
|
|
270
283
|
});
|
|
271
284
|
|
|
272
285
|
it("defaults requiredSections for team_create_outcome", async () => {
|
|
@@ -530,7 +543,7 @@ describe("createAgentTeamsTools runtime behavior", () => {
|
|
|
530
543
|
);
|
|
531
544
|
});
|
|
532
545
|
|
|
533
|
-
it("throws from
|
|
546
|
+
it("throws from team_await_runs when a requested async delegated run fails", async () => {
|
|
534
547
|
const runtime = {
|
|
535
548
|
awaitRun: vi.fn(async () => ({
|
|
536
549
|
id: "run_0001",
|
|
@@ -544,11 +557,11 @@ describe("createAgentTeamsTools runtime behavior", () => {
|
|
|
544
557
|
requesterId: "lead",
|
|
545
558
|
teammateConfigProvider: makeTeammateConfigProvider(),
|
|
546
559
|
});
|
|
547
|
-
const
|
|
548
|
-
expect(
|
|
560
|
+
const awaitRuns = tools.find((tool) => tool.name === "team_await_runs");
|
|
561
|
+
expect(awaitRuns).toBeDefined();
|
|
549
562
|
|
|
550
563
|
await expect(
|
|
551
|
-
|
|
564
|
+
awaitRuns?.execute(
|
|
552
565
|
{ runId: "run_0001" },
|
|
553
566
|
{
|
|
554
567
|
agentId: "lead",
|
|
@@ -559,7 +572,7 @@ describe("createAgentTeamsTools runtime behavior", () => {
|
|
|
559
572
|
).rejects.toThrow('Run "run_0001" failed: Authentication failed');
|
|
560
573
|
});
|
|
561
574
|
|
|
562
|
-
it("throws from
|
|
575
|
+
it("throws from team_await_runs when any delegated run is not successful in all-runs mode", async () => {
|
|
563
576
|
const runtime = {
|
|
564
577
|
awaitAllRuns: vi.fn(async () => [
|
|
565
578
|
{ id: "run_ok", status: "completed" },
|
|
@@ -572,13 +585,11 @@ describe("createAgentTeamsTools runtime behavior", () => {
|
|
|
572
585
|
requesterId: "lead",
|
|
573
586
|
teammateConfigProvider: makeTeammateConfigProvider(),
|
|
574
587
|
});
|
|
575
|
-
const
|
|
576
|
-
|
|
577
|
-
);
|
|
578
|
-
expect(awaitAllRuns).toBeDefined();
|
|
588
|
+
const awaitRuns = tools.find((tool) => tool.name === "team_await_runs");
|
|
589
|
+
expect(awaitRuns).toBeDefined();
|
|
579
590
|
|
|
580
591
|
await expect(
|
|
581
|
-
|
|
592
|
+
awaitRuns?.execute(
|
|
582
593
|
{},
|
|
583
594
|
{
|
|
584
595
|
agentId: "lead",
|
|
@@ -591,7 +602,7 @@ describe("createAgentTeamsTools runtime behavior", () => {
|
|
|
591
602
|
);
|
|
592
603
|
});
|
|
593
604
|
|
|
594
|
-
it("returns compact summaries from
|
|
605
|
+
it("returns compact summaries from team_await_runs without full teammate transcripts", async () => {
|
|
595
606
|
const runtime = {
|
|
596
607
|
awaitRun: vi.fn(async () => ({
|
|
597
608
|
id: "run_0001",
|
|
@@ -633,10 +644,10 @@ describe("createAgentTeamsTools runtime behavior", () => {
|
|
|
633
644
|
requesterId: "lead",
|
|
634
645
|
teammateConfigProvider: makeTeammateConfigProvider(),
|
|
635
646
|
});
|
|
636
|
-
const
|
|
647
|
+
const awaitRuns = tools.find((tool) => tool.name === "team_await_runs");
|
|
637
648
|
|
|
638
649
|
await expect(
|
|
639
|
-
|
|
650
|
+
awaitRuns?.execute(
|
|
640
651
|
{ runId: "run_0001" },
|
|
641
652
|
{
|
|
642
653
|
agentId: "lead",
|
|
@@ -728,22 +739,122 @@ describe("createAgentTeamsTools runtime behavior", () => {
|
|
|
728
739
|
]);
|
|
729
740
|
});
|
|
730
741
|
|
|
731
|
-
it("sets long timeout for team await
|
|
742
|
+
it("sets long timeout for team await tool", () => {
|
|
732
743
|
const runtime = new AgentTeamsRuntime({ teamName: "test-team" });
|
|
733
744
|
const tools = createAgentTeamsTools({
|
|
734
745
|
runtime,
|
|
735
746
|
requesterId: "lead",
|
|
736
747
|
teammateConfigProvider: makeTeammateConfigProvider(),
|
|
737
748
|
});
|
|
738
|
-
const
|
|
739
|
-
|
|
740
|
-
|
|
749
|
+
const awaitRuns = tools.find((tool) => tool.name === "team_await_runs");
|
|
750
|
+
expect(awaitRuns?.timeoutMs).toBe(60 * 60 * 1000);
|
|
751
|
+
});
|
|
752
|
+
|
|
753
|
+
it("deduplicates concurrent sync team_run_task calls to the same agent", async () => {
|
|
754
|
+
let resolveRoute!: (value: { text: string; iterations: number }) => void;
|
|
755
|
+
const routePromise = new Promise<{ text: string; iterations: number }>(
|
|
756
|
+
(resolve) => {
|
|
757
|
+
resolveRoute = resolve;
|
|
758
|
+
},
|
|
741
759
|
);
|
|
742
|
-
|
|
743
|
-
|
|
760
|
+
const routeToTeammate = vi.fn(() => routePromise);
|
|
761
|
+
const runtime = {
|
|
762
|
+
routeToTeammate,
|
|
763
|
+
getMemberRole: vi.fn(() => "lead"),
|
|
764
|
+
} as unknown as AgentTeamsRuntime;
|
|
765
|
+
|
|
766
|
+
const tools = createAgentTeamsTools({
|
|
767
|
+
runtime,
|
|
768
|
+
requesterId: "lead",
|
|
769
|
+
teammateConfigProvider: makeTeammateConfigProvider(),
|
|
770
|
+
});
|
|
771
|
+
const runTask = tools.find((tool) => tool.name === "team_run_task");
|
|
772
|
+
expect(runTask).toBeDefined();
|
|
773
|
+
if (!runTask) {
|
|
774
|
+
throw new Error("Expected team_run_task tool to be defined");
|
|
775
|
+
}
|
|
776
|
+
|
|
777
|
+
const ctx = { agentId: "lead", conversationId: "conv-1", iteration: 1 };
|
|
778
|
+
const input = {
|
|
779
|
+
agentId: "educator",
|
|
780
|
+
task: "Explain probability",
|
|
781
|
+
runMode: "sync",
|
|
782
|
+
};
|
|
783
|
+
|
|
784
|
+
// Fire two concurrent sync calls to the same agent
|
|
785
|
+
const call1 = runTask.execute(input, ctx);
|
|
786
|
+
const call2 = runTask.execute(input, ctx);
|
|
787
|
+
|
|
788
|
+
// Second call should throw with duplicate detection error
|
|
789
|
+
await expect(call2).rejects.toThrow(
|
|
790
|
+
'Duplicate team_run_task call detected for agent "educator"',
|
|
791
|
+
);
|
|
792
|
+
|
|
793
|
+
// Only one routeToTeammate call should have been made
|
|
794
|
+
expect(routeToTeammate).toHaveBeenCalledTimes(1);
|
|
795
|
+
|
|
796
|
+
// Now resolve the first call
|
|
797
|
+
resolveRoute({ text: "Probability explained", iterations: 3 });
|
|
798
|
+
const result1 = (await call1) as { text?: string; iterations?: number };
|
|
799
|
+
expect(result1.text).toBe("Probability explained");
|
|
800
|
+
expect(result1.iterations).toBe(3);
|
|
801
|
+
});
|
|
802
|
+
|
|
803
|
+
it("allows concurrent sync team_run_task calls to different agents", async () => {
|
|
804
|
+
let resolveRoute1!: (value: { text: string; iterations: number }) => void;
|
|
805
|
+
let resolveRoute2!: (value: { text: string; iterations: number }) => void;
|
|
806
|
+
const routeToTeammate = vi.fn((agentId: string) => {
|
|
807
|
+
if (agentId === "educator") {
|
|
808
|
+
return new Promise<{ text: string; iterations: number }>((resolve) => {
|
|
809
|
+
resolveRoute1 = resolve;
|
|
810
|
+
});
|
|
811
|
+
}
|
|
812
|
+
return new Promise<{ text: string; iterations: number }>((resolve) => {
|
|
813
|
+
resolveRoute2 = resolve;
|
|
814
|
+
});
|
|
815
|
+
});
|
|
816
|
+
const runtime = {
|
|
817
|
+
routeToTeammate,
|
|
818
|
+
getMemberRole: vi.fn(() => "lead"),
|
|
819
|
+
} as unknown as AgentTeamsRuntime;
|
|
820
|
+
|
|
821
|
+
const tools = createAgentTeamsTools({
|
|
822
|
+
runtime,
|
|
823
|
+
requesterId: "lead",
|
|
824
|
+
teammateConfigProvider: makeTeammateConfigProvider(),
|
|
825
|
+
});
|
|
826
|
+
const runTask = tools.find((tool) => tool.name === "team_run_task");
|
|
827
|
+
expect(runTask).toBeDefined();
|
|
828
|
+
if (!runTask) {
|
|
829
|
+
throw new Error("Expected team_run_task tool to be defined");
|
|
830
|
+
}
|
|
831
|
+
|
|
832
|
+
const ctx = { agentId: "lead", conversationId: "conv-1", iteration: 1 };
|
|
833
|
+
|
|
834
|
+
// Fire sync calls to two different agents - both should proceed
|
|
835
|
+
const call1 = runTask.execute(
|
|
836
|
+
{ agentId: "educator", task: "Explain probability", runMode: "sync" },
|
|
837
|
+
ctx,
|
|
838
|
+
);
|
|
839
|
+
const call2 = runTask.execute(
|
|
840
|
+
{ agentId: "assessor", task: "Evaluate answer", runMode: "sync" },
|
|
841
|
+
ctx,
|
|
842
|
+
);
|
|
843
|
+
|
|
844
|
+
// Both should have called routeToTeammate
|
|
845
|
+
expect(routeToTeammate).toHaveBeenCalledTimes(2);
|
|
846
|
+
|
|
847
|
+
// Resolve both
|
|
848
|
+
resolveRoute1({ text: "Explained", iterations: 2 });
|
|
849
|
+
resolveRoute2({ text: "Evaluated", iterations: 1 });
|
|
850
|
+
|
|
851
|
+
const result1 = (await call1) as { text?: string };
|
|
852
|
+
const result2 = (await call2) as { text?: string };
|
|
853
|
+
expect(result1.text).toBe("Explained");
|
|
854
|
+
expect(result2.text).toBe("Evaluated");
|
|
744
855
|
});
|
|
745
856
|
|
|
746
|
-
it("lists
|
|
857
|
+
it("lists team tasks through team_task list action", async () => {
|
|
747
858
|
const runtime = new AgentTeamsRuntime({ teamName: "test-team" });
|
|
748
859
|
const tools = createAgentTeamsTools({
|
|
749
860
|
runtime,
|
|
@@ -781,7 +892,7 @@ describe("createAgentTeamsTools runtime behavior", () => {
|
|
|
781
892
|
|
|
782
893
|
await expect(
|
|
783
894
|
teamTask?.execute(
|
|
784
|
-
{ action: "list"
|
|
895
|
+
{ action: "list" },
|
|
785
896
|
{
|
|
786
897
|
agentId: "lead",
|
|
787
898
|
conversationId: "conv-1",
|
|
@@ -796,6 +907,11 @@ describe("createAgentTeamsTools runtime behavior", () => {
|
|
|
796
907
|
isReady: true,
|
|
797
908
|
blockedBy: [],
|
|
798
909
|
}),
|
|
910
|
+
expect.objectContaining({
|
|
911
|
+
title: "Blocked task",
|
|
912
|
+
isReady: false,
|
|
913
|
+
blockedBy: [first.taskId],
|
|
914
|
+
}),
|
|
799
915
|
],
|
|
800
916
|
});
|
|
801
917
|
});
|