diff --git a/frontend/README.md b/frontend/README.md index 6b006fd88..da87d3120 100644 --- a/frontend/README.md +++ b/frontend/README.md @@ -1538,13 +1538,13 @@ agent terminology rather than exposing these control-plane resource types. `StudioEnv`,火山引擎继续使用 `Private`。创建时获取模型凭据并配置模型名称、 地址、API Key、鉴权和快照;已有工作区绑定保持不变。 -按云环境和地域选择 `studio-sandbox-1.0.1` 镜像: +按云环境和地域选择 `all-in-one-1.0.2` 镜像: | 云环境 | 地域 | 镜像 | | --- | --- | --- | -| 火山引擎 | cn-beijing | `enterprise-public-cn-beijing.cr.volces.com/vefaas-public/agentkit-sandbox:studio-sandbox-1.0.1` | -| 火山引擎 | cn-shanghai | `enterprise-cn-shanghai-cn-shanghai.cr.volces.com/vefaas-public/agentkit-sandbox:studio-sandbox-1.0.1` | -| BytePlus | ap-southeast-1 | `enterprise-public-ap-southeast-1.cr.volces.com/vefaas-public/agentkit-sandbox:studio-sandbox-1.0.1` | +| 火山引擎 | cn-beijing | `enterprise-public-cn-beijing.cr.volces.com/vefaas-public/agentkit-sandbox:all-in-one-1.0.2` | +| 火山引擎 | cn-shanghai | `enterprise-cn-shanghai-cn-shanghai.cr.volces.com/vefaas-public/agentkit-sandbox:all-in-one-1.0.2` | +| BytePlus | ap-southeast-1 | `enterprise-public-ap-southeast-1.cr.volces.com/vefaas-public/agentkit-sandbox:all-in-one-1.0.2` | 可通过 `STUDIO_WORKSPACE_IMAGE` 指定区域可访问的其他镜像。启动命令使用镜像内的 `/opt/gem/run.sh`,不再注入编辑器补丁。火山引擎默认中文,BytePlus 默认英文, diff --git a/frontend/server/environments/dockerfile.py b/frontend/server/environments/dockerfile.py index 438be5ddc..e49302c96 100644 --- a/frontend/server/environments/dockerfile.py +++ b/frontend/server/environments/dockerfile.py @@ -35,10 +35,21 @@ class _Package: "ubuntu-24.04": ("Ubuntu 24.04", "ubuntu:24.04"), } -AIO_BASE_IMAGE = ( - "agentkit-cli-2107625663-cn-beijing.cr.volces.com/agentkit/" - "agent-native-requirements-aio:0.2.1-20260831" -) +AIO_BASE_IMAGES = { + ( + "volcengine", + "cn-beijing", + ): "enterprise-public-cn-beijing.cr.volces.com/vefaas-public/agentkit-sandbox:all-in-one-1.0.2", + ( + "volcengine", + "cn-shanghai", + ): "enterprise-cn-shanghai-cn-shanghai.cr.volces.com/vefaas-public/agentkit-sandbox:all-in-one-1.0.2", + ( + "byteplus", + "ap-southeast-1", + ): "enterprise-public-ap-southeast-1.cr.volces.com/vefaas-public/agentkit-sandbox:all-in-one-1.0.2", +} +AIO_BASE_IMAGE = AIO_BASE_IMAGES[("volcengine", "cn-beijing")] _PYTHON_PATCH_VERSIONS = { "3.10": "3.10.18", @@ -198,7 +209,24 @@ def _apt_packages( return packages -def build_dockerfile(config: EnvironmentInput) -> str: +def resolve_aio_base_image(provider: str = "volcengine", region: str = "") -> str: + provider = provider.strip() or "volcengine" + region = region.strip() + if region: + image = AIO_BASE_IMAGES.get((provider, region)) + if image is not None: + return image + if provider == "byteplus": + return AIO_BASE_IMAGES[("byteplus", "ap-southeast-1")] + return AIO_BASE_IMAGES[("volcengine", "cn-beijing")] + + +def build_dockerfile( + config: EnvironmentInput, + *, + provider: str = "volcengine", + region: str = "", +) -> str: """Build the canonical Dockerfile when the user did not provide one.""" if config.dockerfile: return validate_dockerfile(config.dockerfile) @@ -221,7 +249,7 @@ def build_dockerfile(config: EnvironmentInput) -> str: ) lines = ( [ - f"ARG AIO_BASE_IMAGE={AIO_BASE_IMAGE}", + f"ARG AIO_BASE_IMAGE={resolve_aio_base_image(provider, region)}", "ARG AIO_BASE_PLATFORM=linux/amd64", "", f"# Base environment: AIO Sandbox ({os_label})", @@ -350,9 +378,14 @@ def build_dockerfile(config: EnvironmentInput) -> str: return "\n".join(lines) -def environment_base_image(config: EnvironmentInput) -> str: +def environment_base_image( + config: EnvironmentInput, + *, + provider: str = "volcengine", + region: str = "", +) -> str: if config.base_environment == "aio-sandbox": - return AIO_BASE_IMAGE + return resolve_aio_base_image(provider, region) if config.base_environment == "codex-sandbox": match = re.search( r"^\s*FROM(?:\s+--platform=\S+)?\s+(\S+)", @@ -384,8 +417,10 @@ def validate_dockerfile(value: str) -> str: __all__ = [ "AIO_BASE_IMAGE", + "AIO_BASE_IMAGES", "build_dockerfile", "environment_base_image", "environment_capabilities", + "resolve_aio_base_image", "validate_dockerfile", ] diff --git a/frontend/server/environments/service.py b/frontend/server/environments/service.py index 1aced2044..69fbd8290 100644 --- a/frontend/server/environments/service.py +++ b/frontend/server/environments/service.py @@ -303,7 +303,14 @@ async def create(self, owner_id: str, body: EnvironmentInput) -> EnvironmentView elif body.git_source is not None: body = body.model_copy(update={"dockerfile": ""}) else: - body = body.model_copy(update={"dockerfile": build_dockerfile(body)}) + provider, region = self._cloud_location() + body = body.model_copy( + update={ + "dockerfile": build_dockerfile( + body, provider=provider, region=region + ) + } + ) environment_id = uuid4().hex selected_skills = await self._persist_local_skill_assets( owner_id, environment_id, body.selected_skills @@ -386,11 +393,16 @@ async def update( ) } ) + provider, region = self._cloud_location() values["dockerfile"] = ( "" if merged_input.git_source is not None or merged_input.image_source is not None - else build_dockerfile(merged_input) + else build_dockerfile( + merged_input, + provider=provider, + region=region, + ) ) external_binding: tuple[EnvironmentResources, str] | None = None if ( @@ -653,6 +665,11 @@ async def get_manifest( skills = await repository.get_skill_manifest( owner_id, environment_id, version_id ) + base_provider, base_region = ( + (build.resources.provider, build.resources.region) + if isinstance(build.resources, EnvironmentResources) + else self._cloud_location() + ) return EnvironmentManifest( apiVersion="agentkit.studio/v3", metadata=EnvironmentManifestMetadata( @@ -664,7 +681,11 @@ async def get_manifest( spec=EnvironmentManifestSpec( image=build.image, baseEnvironment=environment.base_environment, - baseImage=environment_base_image(environment), + baseImage=environment_base_image( + environment, + provider=base_provider, + region=base_region, + ), operatingSystem=environment.operating_system, language=environment.language, executionRuntime=environment.execution_runtime, @@ -1301,6 +1322,12 @@ def _require_cloud(self) -> EnvironmentCloudGateway: ) return self._cloud + def _cloud_location(self) -> tuple[str, str]: + if self._cloud is None: + return "volcengine", "cn-beijing" + info = self._cloud.describe() + return info.provider, info.region + async def _to_thread_start( cloud: EnvironmentCloudGateway, diff --git a/frontend/server/workspace_tool.py b/frontend/server/workspace_tool.py index 7c452b3da..4dfb2bdde 100644 --- a/frontend/server/workspace_tool.py +++ b/frontend/server/workspace_tool.py @@ -30,15 +30,15 @@ ( "volcengine", "cn-beijing", - ): "enterprise-public-cn-beijing.cr.volces.com/vefaas-public/agentkit-sandbox:studio-sandbox-1.0.1", + ): "enterprise-public-cn-beijing.cr.volces.com/vefaas-public/agentkit-sandbox:all-in-one-1.0.2", ( "volcengine", "cn-shanghai", - ): "enterprise-cn-shanghai-cn-shanghai.cr.volces.com/vefaas-public/agentkit-sandbox:studio-sandbox-1.0.1", + ): "enterprise-cn-shanghai-cn-shanghai.cr.volces.com/vefaas-public/agentkit-sandbox:all-in-one-1.0.2", ( "byteplus", "ap-southeast-1", - ): "enterprise-public-ap-southeast-1.cr.volces.com/vefaas-public/agentkit-sandbox:studio-sandbox-1.0.1", + ): "enterprise-public-ap-southeast-1.cr.volces.com/vefaas-public/agentkit-sandbox:all-in-one-1.0.2", } diff --git a/frontend/src/ui/EnvironmentCenter.tsx b/frontend/src/ui/EnvironmentCenter.tsx index ec48b5de9..4d8f1dd7e 100644 --- a/frontend/src/ui/EnvironmentCenter.tsx +++ b/frontend/src/ui/EnvironmentCenter.tsx @@ -75,7 +75,7 @@ import { } from "../adk/client"; import { buildEnvironmentDockerfile, - AIO_BASE_IMAGE, + AIO_BASE_IMAGES, CODEX_SANDBOX_BASE_IMAGES, EMPTY_ENVIRONMENT_DRAFT, ENVIRONMENT_BASE_ENVIRONMENTS, @@ -147,7 +147,7 @@ function dockerfilePresetEnvironmentOptions(t: TFunction): Option[] { function dockerfilePresetEnvironmentFromContent(content: string): DockerfilePresetEnvironment { const baseImage = dockerfileBaseImage(content, ""); - if (baseImage === AIO_BASE_IMAGE) return "aio-sandbox"; + if (Object.values(AIO_BASE_IMAGES).includes(baseImage)) return "aio-sandbox"; if (baseImage.includes("/codexenv:")) return "codex-sandbox"; return "none"; } @@ -1566,7 +1566,7 @@ function EnvironmentEditor({ const customDockerfile = draft.dockerfile ?? generatedDockerfile; const hasDockerfilePresetEnvironment = dockerfilePresetEnvironment !== "none"; const selectedBaseImage = dockerfilePresetEnvironment === "aio-sandbox" - ? AIO_BASE_IMAGE + ? AIO_BASE_IMAGES[cloudProvider] : dockerfilePresetEnvironment === "codex-sandbox" ? CODEX_SANDBOX_BASE_IMAGES[cloudProvider] : ""; diff --git a/frontend/src/ui/environmentModel.ts b/frontend/src/ui/environmentModel.ts index 87af32dc9..f8facc61c 100644 --- a/frontend/src/ui/environmentModel.ts +++ b/frontend/src/ui/environmentModel.ts @@ -84,7 +84,12 @@ export const ENVIRONMENT_BASE_ENVIRONMENTS: ReadonlyArray<{ }, ]; -export const AIO_BASE_IMAGE = "agentkit-cli-2107625663-cn-beijing.cr.volces.com/agentkit/agent-native-requirements-aio:0.2.1-20260831"; +export const AIO_BASE_IMAGES: Record = { + volcengine: "enterprise-public-cn-beijing.cr.volces.com/vefaas-public/agentkit-sandbox:all-in-one-1.0.2", + byteplus: "enterprise-public-ap-southeast-1.cr.volces.com/vefaas-public/agentkit-sandbox:all-in-one-1.0.2", +}; + +export const AIO_BASE_IMAGE = AIO_BASE_IMAGES.volcengine; export const CODEX_SANDBOX_BASE_IMAGES: Record = { volcengine: "enterprise-public-cn-beijing.cr.volces.com/vefaas-public/codexenv:1.1.0", @@ -335,7 +340,7 @@ export function buildEnvironmentDockerfile( ); const lines = usesAioPython ? [ - `ARG AIO_BASE_IMAGE=${AIO_BASE_IMAGE}`, + `ARG AIO_BASE_IMAGE=${AIO_BASE_IMAGES[cloudProvider]}`, "ARG AIO_BASE_PLATFORM=linux/amd64", "", `# Base environment: AIO Sandbox (${operatingSystem.label})`, diff --git a/frontend/tests/environmentCenter.test.mjs b/frontend/tests/environmentCenter.test.mjs index 863467440..0cf955254 100644 --- a/frontend/tests/environmentCenter.test.mjs +++ b/frontend/tests/environmentCenter.test.mjs @@ -544,7 +544,11 @@ test("uses AIO Sandbox as the default base environment and preserves its runtime const model = await server.ssrLoadModule("/src/ui/environmentModel.ts"); assert.equal(model.EMPTY_ENVIRONMENT_DRAFT.baseEnvironment, "aio-sandbox"); const dockerfile = model.buildEnvironmentDockerfile(model.EMPTY_ENVIRONMENT_DRAFT); - assert.match(dockerfile, /^ARG AIO_BASE_IMAGE=agentkit-cli-2107625663-cn-beijing\.cr\.volces\.com\/agentkit\/agent-native-requirements-aio:0\.2\.1-20260831$/m); + assert.match(dockerfile, /^ARG AIO_BASE_IMAGE=enterprise-public-cn-beijing\.cr\.volces\.com\/vefaas-public\/agentkit-sandbox:all-in-one-1\.0\.2$/m); + assert.match( + model.buildEnvironmentDockerfile(model.EMPTY_ENVIRONMENT_DRAFT, "byteplus"), + /^ARG AIO_BASE_IMAGE=enterprise-public-ap-southeast-1\.cr\.volces\.com\/vefaas-public\/agentkit-sandbox:all-in-one-1\.0\.2$/m, + ); assert.match(dockerfile, /^FROM --platform=\$\{AIO_BASE_PLATFORM\} \$\{AIO_BASE_IMAGE\}$/m); assert.match(dockerfile, /BASH_VENV_PATH=\/opt\/veadk-environment\/\.venv/); assert.match(dockerfile, /^EXPOSE 8080$/m); diff --git a/tests/cli/test_generated_agent_backend_codegen_extended.py b/tests/cli/test_generated_agent_backend_codegen_extended.py index 9ac3471be..0fbdeba51 100644 --- a/tests/cli/test_generated_agent_backend_codegen_extended.py +++ b/tests/cli/test_generated_agent_backend_codegen_extended.py @@ -75,7 +75,7 @@ "agents/__init__.py": "a6449a6cac3bfda8b834ea39ea95ca2f8d0471ac480e1e876313d7398eea59ba", "agents/demo_agent/agent.py": "3c28f3e63f185d1ee8402d58b62c8654cf18fe4180a1f348abaa63547d91446c", "agents/demo_agent/__init__.py": "ba3abbb199bbae74dc75151a44ba53a557e5f47d509835950ca756346c5a9582", - "agents/demo_agent/dynamic_a2a.py": "d136f27d6a77439708c415686a3d167f2ad2fb9a96a5f8a0751916b09d46e364", + "agents/demo_agent/dynamic_a2a.py": "d8f1854d78267a9a1a8a568881a7630cd1ae98cb8fc2a736d432576b31415ec5", ".env.example": "ec3258da9bef4e74333376d8554c265ccb12a4a1e5d4e1e1b0acdf5c9ae93ab6", "requirements.txt": "9f55ba1a16ae8199165fde7de39f5f93133963634ebb6d1bdb241cc3cefa10ee", "README.md": "a34208314cf9061c02662028d7a9dd97448e6b73c1d732cb4aeaa8f70dbbc684", @@ -87,7 +87,7 @@ "agents/__init__.py": "a6449a6cac3bfda8b834ea39ea95ca2f8d0471ac480e1e876313d7398eea59ba", "agents/full_agent/agent.py": "35560cfa5ea93955244482d727c8f8369599fa5b9560ba1f3804df7273e245ce", "agents/full_agent/__init__.py": "ba3abbb199bbae74dc75151a44ba53a557e5f47d509835950ca756346c5a9582", - "agents/full_agent/dynamic_a2a.py": "d136f27d6a77439708c415686a3d167f2ad2fb9a96a5f8a0751916b09d46e364", + "agents/full_agent/dynamic_a2a.py": "d8f1854d78267a9a1a8a568881a7630cd1ae98cb8fc2a736d432576b31415ec5", ".env.example": "2bfd3afda4e661fbb71588ec5f0d584ce6682363cacc81b0394f8da09f7977e8", "requirements.txt": "3372cfe49df006b3d0e5bdc4f7b4fcc152a16f663d9e10770f09c708e6daa32b", "README.md": "1bf4dc889c7d1076f50784d253b53412ba7c49bcb69a5d948f9092dbbecb18ac", @@ -2410,6 +2410,9 @@ def test_agentkit_app_adds_dynamic_a2a_tools_per_run() -> None: assert "def _spawn_dynamic_a2a_agent(" in source assert "def _configure_dynamic_a2a_routes(" in source assert "def _run_request_custom_metadata(" in source + assert "class _SsePayloadEventIdRewriter" in source + assert "event_id_rewriter.prepare(" in source + assert ":veid:" in source assert 'getattr(req, "custom_metadata", None)' in source assert "plugins=[FrontendInvocationPlugin()]" in source assert "session_service is None or not _has_a2a_registry_config" not in source @@ -2440,6 +2443,9 @@ def test_generated_agent_always_enables_per_invocation_metadata() -> None: in files["agents/demo_agent/dynamic_a2a.py"] ) dynamic_source = files["agents/demo_agent/dynamic_a2a.py"] + assert "class _SsePayloadEventIdRewriter" in dynamic_source + assert "event_id_rewriter.prepare(" in dynamic_source + assert ":veid:" in dynamic_source run_sse_body = dynamic_source[ dynamic_source.index('@app.post("/run_sse")') : dynamic_source.index( "async def event_generator" diff --git a/tests/cloud/test_harness_app_http.py b/tests/cloud/test_harness_app_http.py index f9f223e0b..0a22b5272 100644 --- a/tests/cloud/test_harness_app_http.py +++ b/tests/cloud/test_harness_app_http.py @@ -15,6 +15,7 @@ import importlib import types import uuid +from pathlib import Path import pytest from fastapi.responses import PlainTextResponse @@ -38,6 +39,13 @@ def _closure_cell(function, name): return closure[freevars.index(name)] +def test_harness_run_sse_rewrites_stream_payload_event_ids() -> None: + source = Path("veadk/cloud/harness_app/app.py").read_text() + + assert "_SsePayloadEventIdRewriter" in source + assert "event_id_rewriter.prepare(event_to_stream)" in source + + def test_harness_app_exposes_agent_info(monkeypatch): monkeypatch.delenv("MODEL_AGENT_NAME", raising=False) monkeypatch.setenv("MODEL_AGENT_API_KEY", "test-api-key") diff --git a/tests/frontend/server/environments/test_environments.py b/tests/frontend/server/environments/test_environments.py index ac4598c45..54b00f2a8 100644 --- a/tests/frontend/server/environments/test_environments.py +++ b/tests/frontend/server/environments/test_environments.py @@ -454,8 +454,8 @@ def test_aio_environment_preserves_the_shell_runtime_contract(): assert config.language == "python-3.12" assert ( "ARG AIO_BASE_IMAGE=" - "agentkit-cli-2107625663-cn-beijing.cr.volces.com/agentkit/" - "agent-native-requirements-aio:0.2.1-20260831" + "enterprise-public-cn-beijing.cr.volces.com/vefaas-public/" + "agentkit-sandbox:all-in-one-1.0.2" ) in dockerfile assert "FROM --platform=${AIO_BASE_PLATFORM} ${AIO_BASE_IMAGE}" in dockerfile assert "BASH_VENV_PATH=/opt/veadk-environment/.venv" in dockerfile @@ -464,6 +464,37 @@ def test_aio_environment_preserves_the_shell_runtime_contract(): assert "ENTRYPOINT " not in dockerfile +@pytest.mark.parametrize( + "provider,region,expected", + [ + ( + "volcengine", + "cn-beijing", + "enterprise-public-cn-beijing.cr.volces.com/vefaas-public/agentkit-sandbox:all-in-one-1.0.2", + ), + ( + "volcengine", + "cn-shanghai", + "enterprise-cn-shanghai-cn-shanghai.cr.volces.com/vefaas-public/agentkit-sandbox:all-in-one-1.0.2", + ), + ( + "byteplus", + "ap-southeast-1", + "enterprise-public-ap-southeast-1.cr.volces.com/vefaas-public/agentkit-sandbox:all-in-one-1.0.2", + ), + ], +) +def test_aio_environment_base_image_matches_provider_region(provider, region, expected): + from frontend.server.environments.dockerfile import resolve_aio_base_image + + config = EnvironmentInput.model_validate(_payload(baseEnvironment="aio-sandbox")) + + assert resolve_aio_base_image(provider, region) == expected + assert f"ARG AIO_BASE_IMAGE={expected}" in build_dockerfile( + config, provider=provider, region=region + ) + + @pytest.mark.parametrize("operating_system", ["ubuntu-22.04", "ubuntu-24.04"]) @pytest.mark.parametrize("language", ["python-3.10", "python-3.12"]) def test_all_os_language_combinations_generate_buildable_commented_dockerfiles( diff --git a/tests/frontend/server/test_workspace_tool.py b/tests/frontend/server/test_workspace_tool.py index 30f8340ea..e625b942a 100644 --- a/tests/frontend/server/test_workspace_tool.py +++ b/tests/frontend/server/test_workspace_tool.py @@ -64,7 +64,7 @@ def test_workspace_image_matches_deployment_region( monkeypatch.delenv("STUDIO_WORKSPACE_IMAGE", raising=False) assert resolve_workspace_image(provider, region) == ( - f"{registry}.cr.volces.com/vefaas-public/agentkit-sandbox:studio-sandbox-1.0.1" + f"{registry}.cr.volces.com/vefaas-public/agentkit-sandbox:all-in-one-1.0.2" ) diff --git a/tests/integrations/agentkit/test_app.py b/tests/integrations/agentkit/test_app.py index 9a6866e57..701843a82 100644 --- a/tests/integrations/agentkit/test_app.py +++ b/tests/integrations/agentkit/test_app.py @@ -62,6 +62,15 @@ def __init__(self, backend: str) -> None: self.backend = backend +class _FakeSseEvent: + def __init__(self, event_id: str, *, partial: bool = False) -> None: + self.id = event_id + self.partial = partial + + def model_copy(self, *, deep: bool = False) -> _FakeSseEvent: + return _FakeSseEvent(self.id, partial=self.partial) + + @pytest.fixture(autouse=True) def fake_agentkit_server(monkeypatch: pytest.MonkeyPatch) -> None: _FakeAgentServer.instances.clear() @@ -87,6 +96,21 @@ def _root_agent() -> BaseAgent: return cast(BaseAgent, root) +def test_sse_payload_event_id_rewriter_keeps_stream_payload_ids_unique() -> None: + rewriter = agentkit_app._SsePayloadEventIdRewriter() + + first_partial = _FakeSseEvent("event-1", partial=True) + second_partial = _FakeSseEvent("event-1", partial=True) + final = _FakeSseEvent("event-1") + duplicate_final = _FakeSseEvent("event-1") + + assert rewriter.prepare(first_partial).id == "event-1:veid:0" + assert first_partial.id == "event-1" + assert rewriter.prepare(second_partial).id == "event-1:veid:1" + assert rewriter.prepare(final).id == "event-1" + assert rewriter.prepare(duplicate_final).id == "event-1:veid:2" + + def test_create_agentkit_app_preserves_platform_route_contract() -> None: app = agentkit_app.create_agentkit_app( _root_agent(), diff --git a/veadk/cli/generated_agent_codegen.py b/veadk/cli/generated_agent_codegen.py index 4e65f520a..93ec0d469 100644 --- a/veadk/cli/generated_agent_codegen.py +++ b/veadk/cli/generated_agent_codegen.py @@ -1751,8 +1751,8 @@ def _render_dynamic_a2a_py() -> str: from fastapi import FastAPI, HTTPException, Request, Response from fastapi.responses import StreamingResponse from google.adk.agents import RunConfig +from google.adk.agents._streaming_mode import StreamingMode from google.adk.agents.base_agent import BaseAgent -from google.adk.agents.run_config import StreamingMode from google.adk.apps.app import App from google.adk.cli.adk_web_server import RunAgentRequest from google.adk.runners import Runner as AdkRunner @@ -1782,6 +1782,34 @@ def _content_text(content: object) -> str: return "\n".join(texts) +class _SsePayloadEventIdRewriter: + def __init__(self) -> None: + self._emitted_ids: set[str] = set() + self._next_id = 0 + + def prepare(self, event: Any) -> Any: + event_id = str(getattr(event, "id", "") or "") + should_rewrite = ( + bool(getattr(event, "partial", False)) + or not event_id + or event_id in self._emitted_ids + ) + if should_rewrite: + event = event.model_copy(deep=True) + unique_id = ( + f"{event_id}:veid:{self._next_id}" + if event_id + else f"veid:{self._next_id}" + ) + self._next_id += 1 + event.id = unique_id + + emitted_id = str(getattr(event, "id", "") or "") + if emitted_id: + self._emitted_ids.add(emitted_id) + return event + + def _has_a2a_registry_config(agent: object) -> bool: if getattr(agent, _REGISTRY_CONFIG_ATTR, None) is not None: return True @@ -2038,6 +2066,7 @@ async def run_agent_sse_dynamic(req: RunAgentRequest) -> StreamingResponse: ) async def event_generator(): + event_id_rewriter = _SsePayloadEventIdRewriter() try: async with Aclosing( runner.run_async( @@ -2067,6 +2096,9 @@ async def event_generator(): events_to_stream = [content_event, artifact_event] for event_to_stream in events_to_stream: + event_to_stream = event_id_rewriter.prepare( + event_to_stream + ) yield ( "data: " + event_to_stream.model_dump_json( @@ -2108,6 +2140,7 @@ async def invoke_agent_dynamic(request: Request) -> StreamingResponse: ) async def event_generator(): + event_id_rewriter = _SsePayloadEventIdRewriter() try: async with Aclosing( runner.run_async( @@ -2118,6 +2151,7 @@ async def event_generator(): ) ) as agen: async for event in agen: + event = event_id_rewriter.prepare(event) yield ( "data: " + event.model_dump_json( diff --git a/veadk/cloud/harness_app/app.py b/veadk/cloud/harness_app/app.py index aa10d0d88..4dc69e098 100644 --- a/veadk/cloud/harness_app/app.py +++ b/veadk/cloud/harness_app/app.py @@ -44,8 +44,8 @@ from fastapi import FastAPI, HTTPException, Query, Request from fastapi.responses import StreamingResponse from google.adk.agents import RunConfig +from google.adk.agents._streaming_mode import StreamingMode from google.adk.agents.base_agent import BaseAgent -from google.adk.agents.run_config import StreamingMode from google.adk.artifacts.in_memory_artifact_service import InMemoryArtifactService from google.adk.auth.credential_service.in_memory_credential_service import ( InMemoryCredentialService, @@ -99,6 +99,7 @@ _ADK_SERVER_STATE_KEY, _add_introspection_routes, _configure_studio_tool_routes, + _SsePayloadEventIdRewriter, ) from veadk.memory.short_term_memory import ShortTermMemory from veadk.runner import Runner @@ -564,7 +565,7 @@ def _mount_run_sse_override(self): if getattr(r, "path", None) == "/run_sse" and "POST" in getattr( r, "methods", set() ): - adk_run_sse = r.endpoint + adk_run_sse = getattr(r, "endpoint", None) break @self.app.post("/run_sse") @@ -612,6 +613,9 @@ async def _run_sse_events( plugins: list[BasePlugin] | None = None, ): """Yield SSE ``data:`` lines for a run, spawning the agent on override.""" + event_id_rewriter = _SsePayloadEventIdRewriter() + app_name = req.app_name or self.harness_name + req.app_name = app_name run_config_kwargs: dict[str, Any] = { "streaming_mode": StreamingMode.SSE if req.streaming else StreamingMode.NONE } @@ -639,7 +643,7 @@ async def _run_sse_events( prompt, req.harness, download_dir=Path(work_dir_ctx.name), - app_name=req.app_name, + app_name=app_name, registry_tip_token=tip_token, registry_authorization=auth_header, ) @@ -651,7 +655,7 @@ async def _run_sse_events( agent = spawn_harness_run_agent( self.agent, prompt, - app_name=req.app_name, + app_name=app_name, registry_tip_token=tip_token, registry_authorization=auth_header, ) @@ -661,17 +665,17 @@ async def _run_sse_events( runner = Runner( agent=agent, short_term_memory=self.short_term_memory, - app_name=req.app_name, + app_name=app_name, plugins=plugins or None, ) # Be self-sufficient: create the session if the caller did not. if not await runner.session_service.get_session( - app_name=req.app_name, + app_name=app_name, user_id=req.user_id, session_id=req.session_id, ): await runner.session_service.create_session( - app_name=req.app_name, + app_name=app_name, user_id=req.user_id, session_id=req.session_id, ) @@ -701,6 +705,7 @@ async def _run_sse_events( events_to_stream = [content_event, artifact_event] for event_to_stream in events_to_stream: + event_to_stream = event_id_rewriter.prepare(event_to_stream) yield ( "data: " + event_to_stream.model_dump_json( diff --git a/veadk/integrations/agentkit/app.py b/veadk/integrations/agentkit/app.py index bec48fdc4..7a04eb5ef 100644 --- a/veadk/integrations/agentkit/app.py +++ b/veadk/integrations/agentkit/app.py @@ -33,9 +33,9 @@ from fastapi.responses import FileResponse, StreamingResponse from fastapi.staticfiles import StaticFiles from google.adk.agents import LoopAgent, ParallelAgent, RunConfig, SequentialAgent +from google.adk.agents._streaming_mode import StreamingMode from google.adk.agents.base_agent import BaseAgent from google.adk.agents.remote_a2a_agent import RemoteA2aAgent -from google.adk.agents.run_config import StreamingMode from google.adk.apps.app import App from google.adk.cli.api_server import RunAgentRequest from google.adk.runners import Runner as AdkRunner @@ -119,6 +119,34 @@ def _content_text(content: object) -> str: return "\n".join(texts) +class _SsePayloadEventIdRewriter: + def __init__(self) -> None: + self._emitted_ids: set[str] = set() + self._next_id = 0 + + def prepare(self, event: Any) -> Any: + event_id = str(getattr(event, "id", "") or "") + should_rewrite = ( + bool(getattr(event, "partial", False)) + or not event_id + or event_id in self._emitted_ids + ) + if should_rewrite: + event = event.model_copy(deep=True) + unique_id = ( + f"{event_id}:veid:{self._next_id}" + if event_id + else f"veid:{self._next_id}" + ) + self._next_id += 1 + event.id = unique_id + + emitted_id = str(getattr(event, "id", "") or "") + if emitted_id: + self._emitted_ids.add(emitted_id) + return event + + def _has_a2a_registry_config(agent: object) -> bool: if getattr(agent, _REGISTRY_CONFIG_ATTR, None) is not None: return True @@ -819,6 +847,7 @@ async def run_agent_sse_dynamic(req: RunAgentRequest) -> StreamingResponse: ) async def event_generator(): + event_id_rewriter = _SsePayloadEventIdRewriter() try: async with Aclosing( runner.run_async( @@ -848,6 +877,7 @@ async def event_generator(): events_to_stream = [content_event, artifact_event] for event_to_stream in events_to_stream: + event_to_stream = event_id_rewriter.prepare(event_to_stream) yield ( "data: " + event_to_stream.model_dump_json( @@ -891,6 +921,7 @@ async def invoke_agent_dynamic(request: Request) -> StreamingResponse: ) async def event_generator(): + event_id_rewriter = _SsePayloadEventIdRewriter() try: async with Aclosing( runner.run_async( @@ -901,6 +932,7 @@ async def event_generator(): ) ) as agen: async for event in agen: + event = event_id_rewriter.prepare(event) yield ( "data: " + event.model_dump_json( diff --git a/veadk/webui/assets/app/index-ChVoaita.js b/veadk/webui/assets/app/index-B9g_ubeS.js similarity index 98% rename from veadk/webui/assets/app/index-ChVoaita.js rename to veadk/webui/assets/app/index-B9g_ubeS.js index adde06b9e..2a7672288 100644 --- a/veadk/webui/assets/app/index-ChVoaita.js +++ b/veadk/webui/assets/app/index-B9g_ubeS.js @@ -1,4 +1,4 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/visualizations/mermaid/mermaid.core-CVx1WIOc.js","assets/chunks/purify.es-BnINGy_Y.js","assets/chunks/MarkdownPromptEditor-DT7EN2zV.js","assets/styles/MarkdownPromptEditor-ZH9qtki0.css","assets/chunks/QuickAgentCreateDialog-DOAkxXHW.js","assets/styles/QuickAgentCreateDialog-DGsLIlOX.css"])))=>i.map(i=>d[i]); +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/visualizations/mermaid/mermaid.core-XxufBR_D.js","assets/chunks/purify.es-BnINGy_Y.js","assets/chunks/MarkdownPromptEditor-CUs3kNVJ.js","assets/styles/MarkdownPromptEditor-ZH9qtki0.css","assets/chunks/QuickAgentCreateDialog-CZBvCs8Q.js","assets/styles/QuickAgentCreateDialog-DGsLIlOX.css"])))=>i.map(i=>d[i]); var xWe=Object.defineProperty;var eX=e=>{throw TypeError(e)};var wWe=(e,t,n)=>t in e?xWe(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var en=(e,t,n)=>wWe(e,typeof t!="symbol"?t+"":t,n),tX=(e,t,n)=>t.has(e)||eX("Cannot "+n);var Al=(e,t,n)=>(tX(e,t,"read from private field"),n?n.call(e):t.get(e)),nX=(e,t,n)=>t.has(e)?eX("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(e):t.set(e,n),M5=(e,t,n,i)=>(tX(e,t,"write to private field"),i?i.call(e,n):t.set(e,n),n);function kWe(e,t){for(var n=0;ni[r]})}}}return Object.freeze(Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}))}(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const r of document.querySelectorAll('link[rel="modulepreload"]'))i(r);new MutationObserver(r=>{for(const s of r)if(s.type==="childList")for(const o of s.addedNodes)o.tagName==="LINK"&&o.rel==="modulepreload"&&i(o)}).observe(document,{childList:!0,subtree:!0});function n(r){const s={};return r.integrity&&(s.integrity=r.integrity),r.referrerPolicy&&(s.referrerPolicy=r.referrerPolicy),r.crossOrigin==="use-credentials"?s.credentials="include":r.crossOrigin==="anonymous"?s.credentials="omit":s.credentials="same-origin",s}function i(r){if(r.ep)return;r.ep=!0;const s=n(r);fetch(r.href,s)}})();var bg=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function F1(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var rde={exports:{}},cD={};/** * @license React * react-jsx-runtime.production.js @@ -523,7 +523,7 @@ data: ${JSON.stringify({...n,...r?{id:r}:{},...o?{snapshot:!0}:{}})}`)}(t.type== "peer": {"enabled": true}, "working_memory": {"enabled": true}, "memory_types": null -}`,Qyt=[{key:"DATABASE_VIKING_PROJECT",required:!1,placeholder:"default"},{key:"DATABASE_VIKING_REGION",required:!1},{key:"DATABASE_VIKING_COLLECTION_KIND",required:!1},{key:"DATABASE_VIKING_RESOURCE_ID",required:!1}],zyt=[Ed({key:"DATABASE_VIKINGMEM_PROJECT",required:!1,placeholder:"default",hidden:!0},{comment:"traditional.catalog.env.vikingMemoryProject.comment"}),Ed({key:"DATABASE_VIKING_REGION",required:!1,hidden:!0},{comment:"traditional.catalog.env.vikingMemoryRegion.comment"}),Ed({key:"DATABASE_VIKINGMEM_MEMORY_TYPE",required:!1,placeholder:"sys_event_v1,sys_profile_v1",hidden:!0},{comment:"traditional.catalog.env.vikingMemoryType.comment"})],xO=[Ed({key:"FEISHU_APP_ID",required:!0,placeholder:"cli_xxx"},{comment:"traditional.catalog.env.feishuAppId.comment"}),Ed({key:"FEISHU_APP_SECRET",required:!0,secret:!0},{placeholder:"traditional.catalog.env.feishuAppSecret.placeholder",comment:"traditional.catalog.env.feishuAppSecret.comment"})],bw={topK:"3",region:"cn-beijing",endpoint:"https://open.volcengineapi.com/"};function jM(e){if(e==="byteplus"){const t="ap-southeast-1";return{topK:bw.topK,region:t,endpoint:`https://agentkit.${t}.byteplusapi.com/`}}return bw}const fLe=[Ed({key:"REGISTRY_SPACE_ID",required:!0},{placeholder:"traditional.catalog.env.registrySpaceId.placeholder",comment:"traditional.catalog.env.registrySpaceId.comment"}),Ed({key:"REGISTRY_TOP_K",required:!1,placeholder:bw.topK},{comment:"traditional.catalog.env.registryTopK.comment"}),Ed({key:"REGISTRY_REGION",required:!1,placeholder:bw.region},{comment:"traditional.catalog.env.registryRegion.comment"}),Ed({key:"REGISTRY_ENDPOINT",required:!1,placeholder:bw.endpoint},{comment:"traditional.catalog.env.registryEndpoint.comment"})],mT=pT([{id:"web_search",importLine:"from veadk.tools.builtin_tools.web_search import web_search",toolNames:["web_search"],env:jI},{id:"parallel_web_search",importLine:"from veadk.tools.builtin_tools.parallel_web_search import parallel_web_search",toolNames:["parallel_web_search"],env:jI},{id:"link_reader",importLine:"from veadk.tools.builtin_tools.link_reader import link_reader",toolNames:["link_reader"],env:[]},{id:"web_scraper",importLine:"from veadk.tools.builtin_tools.web_scraper import web_scraper",toolNames:["web_scraper"],env:[{key:"TOOL_WEB_SCRAPER_ENDPOINT",required:!0},{key:"TOOL_WEB_SCRAPER_API_KEY",required:!0}]},{id:"image_generate",importLine:"from veadk.tools.builtin_tools.image_generate import image_generate",toolNames:["image_generate"],env:[{key:"MODEL_IMAGE_NAME",required:!1,placeholder:"doubao-seedream-5-0-260128"}]},{id:"image_edit",importLine:"from veadk.tools.builtin_tools.image_edit import image_edit",toolNames:["image_edit"],env:[{key:"MODEL_EDIT_NAME",required:!1,placeholder:"doubao-seededit-3-0-i2i-250628"}]},{id:"video_generate",importLine:"from veadk.tools.builtin_tools.video_generate import video_generate, video_task_query",toolNames:["video_generate","video_task_query"],env:[{key:"MODEL_VIDEO_NAME",required:!1,placeholder:"doubao-seedance-2-0-260128"}]},{id:"text_to_speech",importLine:"from veadk.tools.builtin_tools.tts import text_to_speech",toolNames:["text_to_speech"],env:[{key:"TOOL_VESPEECH_APP_ID",required:!0},{key:"TOOL_VESPEECH_SPEAKER",required:!1,placeholder:"zh_female_vv_uranus_bigtts"}]},{id:"run_code",importLine:"from veadk.tools.builtin_tools.run_code import run_code",toolNames:["run_code"],env:[{key:"AGENTKIT_TOOL_ID",required:!0,placeholder:"t-xxxx",get comment(){return Jt("traditional.catalog.env.agentKitToolId.comment")}},{key:"AGENTKIT_TOOL_REGION",required:!1,placeholder:"cn-beijing",get comment(){return Jt("traditional.catalog.env.agentKitToolRegion.comment")}}]},{id:"vesearch",importLine:"from veadk.tools.builtin_tools.vesearch import vesearch",toolNames:["vesearch"],env:[{key:"TOOL_VESEARCH_ENDPOINT",required:!0,comment:"VeSearch bot_id"}]}],"traditional.catalog"),Vyt=new Set(["web_scraper","text_to_speech","vesearch"]),Hyt=new Set(["web_search","parallel_web_search"]),qyt=mT.filter(e=>!Vyt.has(e.id));function hLe(e="volcengine"){const t=e==="byteplus"?Hyt:new Set;return qyt.filter(n=>!t.has(n.id))}const yw=pT([{id:"local",env:[]},{id:"sqlite",extraArgs:'local_database_path="./short_term_memory.db"',env:[]},{id:"mysql",env:[{key:"DATABASE_MYSQL_HOST",required:!0},{key:"DATABASE_MYSQL_USER",required:!0},{key:"DATABASE_MYSQL_PASSWORD",required:!0},{key:"DATABASE_MYSQL_DATABASE",required:!0}]},{id:"postgresql",env:[{key:"DATABASE_POSTGRESQL_HOST",required:!0},{key:"DATABASE_POSTGRESQL_PORT",required:!1,placeholder:"5432"},{key:"DATABASE_POSTGRESQL_USER",required:!0},{key:"DATABASE_POSTGRESQL_PASSWORD",required:!0},{key:"DATABASE_POSTGRESQL_DATABASE",required:!0}]}],"traditional.backends.shortTerm"),HB=pT([{id:"local",env:$N,pipExtra:"extensions",needsEmbedding:!0},{id:"opensearch",env:[{key:"DATABASE_OPENSEARCH_HOST",required:!0},{key:"DATABASE_OPENSEARCH_PORT",required:!1,placeholder:"9200"},{key:"DATABASE_OPENSEARCH_USERNAME",required:!0},{key:"DATABASE_OPENSEARCH_PASSWORD",required:!0},...$N],pipExtra:"extensions",needsEmbedding:!0},{id:"redis",env:[{key:"DATABASE_REDIS_HOST",required:!0},{key:"DATABASE_REDIS_PORT",required:!1,placeholder:"6379"},{key:"DATABASE_REDIS_PASSWORD",required:!1},...$N],pipExtra:"extensions",needsEmbedding:!0},{id:"viking",env:zyt},{id:"openviking",env:[{key:"DATABASE_OPENVIKING_URL",required:!0,placeholder:dLe,get comment(){return Jt("traditional.catalog.env.openVikingUrl.comment")},link:NI},{key:"DATABASE_OPENVIKING_API_KEY",required:!0,comment:"OpenViking API Key",link:NI},{key:"DATABASE_OPENVIKING_USER_ID",required:!1,placeholder:"default",get comment(){return Jt("traditional.catalog.env.openVikingMemoryUserId.comment")},get help(){return Jt("traditional.catalog.env.openVikingMemoryUserId.help")}},{key:"DATABASE_OPENVIKING_MEMORY_POLICY",required:!1,placeholder:Uyt,get comment(){return Jt("traditional.catalog.env.openVikingMemoryPolicy.comment")},multiline:!0,format:"json",get help(){return Jt("traditional.catalog.env.openVikingMemoryPolicy.help")},link:Byt}]},{id:"mem0",env:[{key:"DATABASE_MEM0_API_KEY",required:!0},{key:"DATABASE_MEM0_BASE_URL",required:!1}],pipExtra:"database"}],"traditional.backends.longTerm"),zg="viking",qB=pT([{id:"viking",env:Qyt},{id:"opensearch",env:[{key:"DATABASE_OPENSEARCH_HOST",required:!0},{key:"DATABASE_OPENSEARCH_PORT",required:!1,placeholder:"9200"},{key:"DATABASE_OPENSEARCH_USERNAME",required:!0},{key:"DATABASE_OPENSEARCH_PASSWORD",required:!0},...$N],pipExtra:"extensions",needsEmbedding:!0},{id:"context_search",env:[...jI,{key:"DATABASE_CONTEXT_SEARCH_ENGINE_ID",required:!0},{key:"DATABASE_CONTEXT_SEARCH_ENGINE_ENDPOINT",required:!0},{key:"DATABASE_CONTEXT_SEARCH_ENGINE_APIKEY",required:!0}]},{id:"openviking",env:[{key:"DATABASE_OPENVIKING_URL",required:!0,placeholder:dLe,get comment(){return Jt("traditional.catalog.env.openVikingUrl.comment")},link:NI},{key:"DATABASE_OPENVIKING_API_KEY",required:!0,comment:"OpenViking API Key",link:NI},{key:"DATABASE_OPENVIKING_USER_ID",required:!1,placeholder:"default",get comment(){return Jt("traditional.catalog.env.openVikingKnowledgeUserId.comment")},get help(){return Jt("traditional.catalog.env.openVikingKnowledgeUserId.help")}},{key:"DATABASE_OPENVIKING_TARGET_URI",required:!1,placeholder:"viking://user/default/resources//",get comment(){return Jt("traditional.catalog.env.openVikingTargetUri.comment")},get help(){return Jt("traditional.catalog.env.openVikingTargetUri.help")}}]}],"traditional.backends.knowledge"),Wyt=pT([{id:"apmplus",enableFlag:"ENABLE_APMPLUS",env:[{key:"OBSERVABILITY_OPENTELEMETRY_APMPLUS_SERVICE_NAME",required:!1}]},{id:"cozeloop",enableFlag:"ENABLE_COZELOOP",env:[{key:"OBSERVABILITY_OPENTELEMETRY_COZELOOP_API_KEY",required:!0},{key:"OBSERVABILITY_OPENTELEMETRY_COZELOOP_SERVICE_NAME",required:!1,comment:"CozeLoop space_id"}]},{id:"tls",enableFlag:"ENABLE_TLS",env:[...jI,Ed({key:"OBSERVABILITY_OPENTELEMETRY_TLS_SERVICE_NAME",required:!1},{comment:"traditional.catalog.env.tlsServiceName.comment"})]}],"traditional.exporters");function Pd(e="volcengine"){return{name:"",description:Jt("defaults.description"),instruction:Jt("defaults.instruction"),dynamicAgentDelegation:!1,agentType:"llm",cloudProvider:e,maxIterations:3,a2aUrl:"",tools:[],skills:[],memory:{shortTerm:!1,longTerm:!1},knowledgebase:!1,tracing:!1,subAgents:[],builtinTools:[],customTools:[],mcpTools:[],a2aRegistry:{enabled:!1,registrySpaceId:"",registryTopK:"",registryRegion:"",registryEndpoint:""},modelName:nm(e),modelFallbacks:[],modelSource:"ark",modelProvider:"",modelApiBase:"",shortTermBackend:"local",longTermBackend:"local",longTermMemoryIndex:"",autoSaveSession:!1,knowledgebaseBackend:zg,knowledgebaseIndex:"",tracingExporters:[],selectedSkills:[],cloudEnvironment:{environmentId:"",environmentVersionId:""},deployment:{feishuEnabled:!1,modelApiKeyId:"",modelApiKeyName:""}}}function kS(e){return{id:e,get displayName(){return Jt(`traditional.optimization.options.${e}.label`)},get description(){return Jt(`traditional.optimization.options.${e}.description`)}}}const EH=[kS("context_engine"),kS("compressor"),kS("verifier"),kS("long_run_control"),kS("mcp_resilience")],Kyt=[{id:"quality",get displayName(){return Jt("traditional.optimization.groups.quality")},componentIds:["context_engine","verifier"]},{id:"cost",get displayName(){return Jt("traditional.optimization.groups.cost")},componentIds:["compressor"]},{id:"stability",get displayName(){return Jt("traditional.optimization.groups.stability")},componentIds:["long_run_control","mcp_resilience"]}],ck=EH.map(e=>e.id);function Gyt(e){return e==="byteplus"?Jt("traditional.optimization.bytePlusUnavailable"):null}const pLe=["context_engine","compressor","verifier","long_run_control"],Xyt=new Set(["1","true","yes","on"]),CH=[{id:"default",get displayName(){return Jt("traditional.optimization.profiles.default.label")},get description(){return Jt("traditional.optimization.profiles.default.description")},defaultComponents:[],autoAddedComponents:[]},{id:"ops",get displayName(){return Jt("traditional.optimization.profiles.ops.label")},get description(){return Jt("traditional.optimization.profiles.ops.description")},defaultComponents:["context_engine","verifier","long_run_control","mcp_resilience"],autoAddedComponents:["sql_readonly"]}];function FN(e){var t;return((t=EH.find(n=>n.id===e))==null?void 0:t.displayName)??e}function Yyt(e){var t;return((t=CH.find(n=>n.id===e))==null?void 0:t.displayName)??e}function AH(e){const t=CH.find(n=>n.id===e);return t?[...t.defaultComponents]:[]}function qy(e,t="default"){const n=new Set(e);return{enabled:n.size>0,profile:t,componentOverrides:Object.fromEntries(ck.map(r=>[r,n.has(r)]))}}function TH(e){if(!e)return;const t=e.profile==="ops"?"ops":"default",n=t==="ops"?AH(t):ck.filter(i=>{var r;return((r=e.componentOverrides)==null?void 0:r[i])===!0});return{...qy(n,t),...e.catalogVersion?{catalogVersion:e.catalogVersion}:{},...e.planHash?{planHash:e.planHash}:{}}}function x4(e){return Xyt.has((e==null?void 0:e.trim().toLowerCase())??"")}function Zyt(e){if(!e)return null;try{const t=JSON.parse(e);return t&&typeof t=="object"&&!Array.isArray(t)?t:null}catch{return null}}function Jyt(e){var o;const t=new Map((e==null?void 0:e.map(({key:l,value:c})=>[l,c]))??[]),n=t.get("HARNESS_SIDECAR_ENABLED");if(n===void 0)return null;const i=((o=t.get("HARNESS_PROFILE"))==null?void 0:o.trim())==="ops"?"ops":"default";if(!x4(n))return qy([],i);const r=Zyt(t.get("HARNESS_SIDECAR_COMPONENT_OVERRIDES"));if(r){const l={...qy(ck.filter(c=>r[c]===!0),i),enabled:!0};return i==="ops"?TH(l)??l:l}if(i==="ops")return qy(AH(i),i);const s=[...x4(t.get("HARNESS_MODEL_PROXY_ENABLED"))?pLe:[],...x4(t.get("HARNESS_MCP_GATEWAY_ENABLED"))?["mcp_resilience"]:[]];return{...qy(s,i),enabled:!0}}function evt(e,t){return{...e,modelName:t.modelName||e.modelName,description:t.description,instruction:t.instruction}}function tvt(e){var t;return((t=e.harnessSidecar)==null?void 0:t.profile)??"default"}function RI(e){var n;const t=(n=e.harnessSidecar)==null?void 0:n.componentOverrides;return t?ck.filter(i=>t[i]):[]}function nvt(e){const t=new Set(RI(e));return pLe.filter(n=>t.has(n))}function ivt(e,t){const n=i=>({...i,mcpTools:(i.mcpTools??[]).map(r=>{var o,l;const s=!!(r.authTokenEnv&&(t.has(r.authTokenEnv)||r.authToken));return{...r,credentialConfigured:s,...s?{credentialSourceUrl:((o=r.url)==null?void 0:o.trim())??"",credentialSourceAuthTokenEnv:((l=r.authTokenEnv)==null?void 0:l.trim())??""}:{}}}),subAgents:i.subAgents.map(n),...i.workflow?{workflow:{...i.workflow,nodes:i.workflow.nodes.map(r=>({...r,agent:n(r.agent)}))}}:{}});return n(e)}function uk(e){const t=(e==null?void 0:e.trim())??"",n=t.indexOf("/");return n<=0||n===t.length-1?{modelName:t,modelProvider:""}:{modelName:t.slice(n+1),modelProvider:t.slice(0,n)}}function _H(e){return uk(e).modelName}function mLe(e,t,n,i=!1){var c,u,d,f;const r=uk((t==null?void 0:t.model)||(n==null?void 0:n.model)),s=(t==null?void 0:t.children)??[],o=t==null?void 0:t.type,l=e.agentType==="a2a"&&((c=e.a2aRegistry)!=null&&c.enabled)&&o==="llm"?"a2a":o??e.agentType;return{...e,name:((u=t==null?void 0:t.name)==null?void 0:u.trim())||((d=n==null?void 0:n.name)==null?void 0:d.trim())||e.name,description:(t==null?void 0:t.description)??e.description,instruction:i?e.instruction:(t==null?void 0:t.instruction)??e.instruction,agentType:l,modelName:r.modelName||e.modelName,modelProvider:r.modelProvider||e.modelProvider,skills:((f=t==null?void 0:t.skills)==null?void 0:f.map(h=>h.name))??e.skills,subAgents:e.subAgents.map((h,m)=>mLe(h,s[m],void 0,i))}}function rvt(e,t){const n=new Map(t.map(({key:o,value:l})=>[o,l]));if(!["REGISTRY_SPACE_ID","REGISTRY_TOP_K","REGISTRY_REGION","REGISTRY_ENDPOINT"].some(o=>n.has(o)))return e;const r=(o,l)=>n.has(o)?n.get(o)??"":l??"",s=o=>{var l;return{...o,...(l=o.a2aRegistry)!=null&&l.enabled?{a2aRegistry:{...o.a2aRegistry,registrySpaceId:r("REGISTRY_SPACE_ID",o.a2aRegistry.registrySpaceId),registryTopK:r("REGISTRY_TOP_K",o.a2aRegistry.registryTopK),registryRegion:r("REGISTRY_REGION",o.a2aRegistry.registryRegion),registryEndpoint:r("REGISTRY_ENDPOINT",o.a2aRegistry.registryEndpoint)}}:{},subAgents:o.subAgents.map(s)}};return s(e)}function WB(e,t){var c,u,d;const n=e.cloudProvider??t,i=Pd(n),r=e.deployment,s=r==null?void 0:r.network,o=e.cloudEnvironment,l=e.a2aRegistry;return{...i,...e,name:e.name??i.name,description:e.description??i.description,instruction:e.instruction??i.instruction,agentType:e.agentType??i.agentType,cloudProvider:n,maxIterations:e.maxIterations??i.maxIterations,a2aUrl:e.a2aUrl??i.a2aUrl,model:e.model??void 0,modelSource:e.modelSource==="ark"||e.modelSource==="custom"?e.modelSource:void 0,modelName:e.modelName??i.modelName,modelProvider:e.modelProvider??i.modelProvider,modelApiBase:e.modelApiBase??i.modelApiBase,memory:{shortTerm:((c=e.memory)==null?void 0:c.shortTerm)??i.memory.shortTerm,longTerm:((u=e.memory)==null?void 0:u.longTerm)??i.memory.longTerm},tools:[...e.tools??[]],skills:[...e.skills??[]],knowledgebase:e.knowledgebase??i.knowledgebase,tracing:e.tracing??i.tracing,harnessSidecar:TH(e.harnessSidecar),subAgents:(e.subAgents??[]).map(f=>WB(f,n)),builtinTools:[...e.builtinTools??[]],customTools:[...e.customTools??[]],mcpTools:[...e.mcpTools??[]],a2aRegistry:{...i.a2aRegistry,...l??{},enabled:(l==null?void 0:l.enabled)??!1,registrySpaceId:(l==null?void 0:l.registrySpaceId)??"",registryTopK:(l==null?void 0:l.registryTopK)??"",registryRegion:(l==null?void 0:l.registryRegion)??"",registryEndpoint:(l==null?void 0:l.registryEndpoint)??""},shortTermBackend:e.shortTermBackend??i.shortTermBackend,longTermBackend:e.longTermBackend??i.longTermBackend,longTermMemoryIndex:e.longTermMemoryIndex??i.longTermMemoryIndex,autoSaveSession:e.autoSaveSession??i.autoSaveSession,knowledgebaseBackend:e.knowledgebaseBackend??i.knowledgebaseBackend,knowledgebaseIndex:e.knowledgebaseIndex??i.knowledgebaseIndex,tracingExporters:[...e.tracingExporters??[]],selectedSkills:[...e.selectedSkills??[]],cloudEnvironment:{...i.cloudEnvironment,...o??{},cliTools:[...(o==null?void 0:o.cliTools)??[]],dockerfile:typeof(o==null?void 0:o.dockerfile)=="string"?o.dockerfile:void 0},deployment:{...i.deployment,...r??{},feishuEnabled:(r==null?void 0:r.feishuEnabled)??!1,runtimeName:(r==null?void 0:r.runtimeName)??void 0,runtimeNameCustomized:(r==null?void 0:r.runtimeNameCustomized)??((d=i.deployment)==null?void 0:d.runtimeNameCustomized),network:s?{...s,vpcId:s.vpcId??"",subnetIds:s.subnetIds??"",enableSharedInternetAccess:s.enableSharedInternetAccess??!1}:void 0,modelApiKeyId:(r==null?void 0:r.modelApiKeyId)??"",modelApiKeyName:(r==null?void 0:r.modelApiKeyName)??"",envValues:(r==null?void 0:r.envValues)??void 0},...e.workflow?{workflow:{...e.workflow,nodes:e.workflow.nodes.map(f=>({...f,agent:WB(f.agent,n)}))}}:{}}}const svt=["动态子智能体协作规则:","Dynamic sub-agent collaboration rules:"],avt=["collect_resources","create_agents","handoff_to"];function ovt(e){return e.replace(/\\([\\`*_[\]{}()<>#+\-.!|])/g,"$1")}function lvt(e){const t=svt.flatMap(i=>{const r=[];let s=0;for(;si-r),n=t.find((i,r)=>{const s=t[r+1]??e.length,o=ovt(e.slice(i,s));return avt.every(l=>o.includes(l))});return n===void 0?e:e.slice(0,n).trimEnd()}function cvt(e){const t=n=>({...n,instruction:n.dynamicAgentDelegation===!0?lvt(n.instruction):n.instruction,subAgents:n.subAgents.map(t),...n.workflow?{workflow:{...n.workflow,nodes:n.workflow.nodes.map(i=>({...i,agent:t(i.agent)}))}}:{}});return t(e)}function gLe(e,t){var l,c;const n=Pd(t),i=[...e.tools??[]],r=mT.filter(u=>u.toolNames.some(d=>i.includes(d))),s=new Set(r.flatMap(u=>u.toolNames)),o=uk(e.model);return{...n,modelSource:void 0,name:((l=e.name)==null?void 0:l.trim())??"",description:e.description??"",instruction:e.instruction||n.instruction,agentType:e.type??"llm",modelName:o.modelName,modelProvider:o.modelProvider,tools:i.filter(u=>!s.has(u)),builtinTools:r.map(u=>u.id),skills:((c=e.skills)==null?void 0:c.map(u=>u.name))??[],subAgents:(e.children??[]).map(u=>gLe(u,t))}}function jH(e,t,n=[]){var l,c,u,d;const i=((l=e.draft)==null?void 0:l.cloudProvider)??t,r=uk(e.model),s=e.draft?WB(e.draft,i):e.graph?gLe(e.graph,i):{...Pd(i),modelSource:void 0,name:((c=e.name)==null?void 0:c.trim())||e.appName.trim(),description:e.description??"",instruction:e.instruction||Pd(i).instruction,agentType:e.type??"llm",modelName:r.modelName,modelProvider:r.modelProvider,tools:[...e.tools??[]],skills:((u=e.skills)==null?void 0:u.map(f=>f.name))??[]},o=e.draft&&s.dynamicAgentDelegation===!0?cvt(s):s;return ivt(mLe(o,e.graph,{name:((d=e.name)==null?void 0:d.trim())||e.appName.trim(),model:e.model},!!e.draft),new Set(n))}function uvt(e,t){const n=i=>{var s;const r=((s=i.modelName)==null?void 0:s.trim())??"";return{...i,modelSource:i.agentType==="llm"||!i.agentType?t.has(r)?"ark":"custom":i.modelSource,subAgents:i.subAgents.map(n),...i.workflow?{workflow:{...i.workflow,nodes:i.workflow.nodes.map(o=>({...o,agent:n(o.agent)}))}}:{}}};return n(e)}const II=[{id:"ubuntu-22.04",label:"Ubuntu 22.04",image:"ubuntu:22.04"},{id:"ubuntu-24.04",label:"Ubuntu 24.04",image:"ubuntu:24.04"}],bLe=[{id:"aio-sandbox",label:"AIO Sandbox",description:"内置 Sandbox Shell 能力 · Ubuntu 22.04"},{id:"codex-sandbox",label:"Codex Sandbox",description:"内置 Codex CLI、浏览器与代码执行环境"},{id:"ubuntu",label:"Ubuntu",description:"标准 Linux 基础镜像"}],NH="agentkit-cli-2107625663-cn-beijing.cr.volces.com/agentkit/agent-native-requirements-aio:0.2.1-20260831",yLe={volcengine:"enterprise-public-cn-beijing.cr.volces.com/vefaas-public/codexenv:1.1.0",byteplus:"enterprise-public-ap-southeast-1.cr.volces.com/vefaas-public/codexenv:1.1.0"},vLe=[{id:"python-3.10",label:"Python 3.10"},{id:"python-3.12",label:"Python 3.12"}],dvt={"python-3.10":"3.10.18","python-3.12":"3.12.11"},RH=[{id:"tools",label:"工具",description:"常用 CLI 与内容处理工具",options:[{id:"lark-cli",label:"lark-cli",description:"飞书开放平台命令行工具",installer:"pip",packageName:"lark-cli"},{id:"pandoc",label:"pandoc",description:"文档格式转换工具",installer:"apt",packageName:"pandoc"},{id:"opencli",label:"opencli",description:"将网站与桌面应用转换为命令行工具",installer:"npm",packageName:"@jackwener/opencli@1.8.7"}]},{id:"productivity",label:"效率",description:"加速依赖安装、检索和协作",options:[{id:"uv",label:"uv",description:"快速 Python 包与项目管理器",installer:"pip",packageName:"uv"},{id:"ripgrep",label:"ripgrep",description:"高性能文本检索工具",installer:"apt",packageName:"ripgrep"},{id:"jq",label:"jq",description:"JSON 查询与转换工具",installer:"apt",packageName:"jq"},{id:"github-cli",label:"GitHub CLI",description:"在终端中管理 GitHub 工作流",installer:"apt",packageName:"gh"}]},{id:"browser",label:"浏览器自动化",description:"网页操作、测试与内容采集",options:[{id:"playwright",label:"Playwright",description:"浏览器自动化与端到端测试",installer:"pip",packageName:"playwright"},{id:"chromium",label:"Chromium",description:"无头浏览器运行时",installer:"apt",packageName:"chromium"}]},{id:"system",label:"系统与媒体",description:"基础开发、网络和媒体处理能力",options:[{id:"git",label:"Git",description:"代码版本管理",installer:"apt",packageName:"git"},{id:"curl",label:"curl",description:"网络请求与文件下载",installer:"apt",packageName:"curl"},{id:"ffmpeg",label:"FFmpeg",description:"音视频转码与处理",installer:"apt",packageName:"ffmpeg"},{id:"imagemagick",label:"ImageMagick",description:"图片转换与批处理",installer:"apt",packageName:"imagemagick"}]}],fvt=RH.flatMap(e=>e.options),hvt=["build-essential","curl","libbz2-dev","libffi-dev","libgdbm-dev","liblzma-dev","libncursesw5-dev","libreadline-dev","libsqlite3-dev","libssl-dev","tk-dev","uuid-dev","zlib1g-dev"],pvt=["xvfb","fonts-noto-color-emoji","fonts-unifont","libfontconfig1","libfreetype6","xfonts-cyrillic","xfonts-scalable","fonts-liberation","fonts-ipafont-gothic","fonts-wqy-zenhei","fonts-tlwg-loma-otf","fonts-freefont-ttf"],mvt={"ubuntu-22.04":["libasound2","libatk-bridge2.0-0","libatk1.0-0","libatspi2.0-0","libcairo2","libcups2","libdbus-1-3","libdrm2","libgbm1","libglib2.0-0","libnspr4","libnss3","libpango-1.0-0","libwayland-client0","libx11-6","libxcb1","libxcomposite1","libxdamage1","libxext6","libxfixes3","libxkbcommon0","libxrandr2"],"ubuntu-24.04":["libasound2t64","libatk-bridge2.0-0t64","libatk1.0-0t64","libatspi2.0-0t64","libcairo2","libcups2t64","libdbus-1-3","libdrm2","libgbm1","libglib2.0-0t64","libnspr4","libnss3","libpango-1.0-0","libx11-6","libxcb1","libxcomposite1","libxdamage1","libxext6","libxfixes3","libxkbcommon0","libxrandr2"]};function SS(e,t){for(const n of t)e.includes(n)||e.push(n)}function gvt(e,t,n,i,r){const s=["ca-certificates"];r||SS(s,i?[`python${n}`,`python${n}-venv`]:hvt);for(const o of t)o.id==="playwright"||o.id==="chromium"||(o.installer==="apt"&&SS(s,[o.packageName]),o.id==="opencli"&&SS(s,["curl","xz-utils"]));return e.optionIds.some(o=>o==="playwright"||o==="chromium")&&(SS(s,pvt),SS(s,mvt[e.operatingSystem])),s}const w4={name:"",description:"",baseEnvironment:"aio-sandbox",operatingSystem:"ubuntu-22.04",language:"python-3.12",optionIds:[],selectedSkills:[]};function Vp(e){var t;return((t=vLe.find(n=>n.id===e))==null?void 0:t.label)??e}function KB(e){var t;return((t=II.find(n=>n.id===e))==null?void 0:t.label)??e}function GB(e){var t;return((t=bLe.find(n=>n.id===e))==null?void 0:t.label)??e}function bvt(e){var n;const t=((n=e.match(/^\s*FROM\s+(.+)$/im))==null?void 0:n[1])??"";return{baseEnvironment:/\/codexenv:/i.test(t)?"codex-sandbox":/aio\.sandbox/i.test(e)?"aio-sandbox":"ubuntu",operatingSystem:/ubuntu:24\.04/i.test(t)?"ubuntu-24.04":"ubuntu-22.04"}}function IH(e,t="volcengine"){const n=fvt.filter(b=>e.optionIds.includes(b.id)),i=e.baseEnvironment==="aio-sandbox",r=e.baseEnvironment==="codex-sandbox",s=i||r,o=s?"python-3.12":e.language,l=o.replace("python-",""),c=dvt[o],u=II.find(b=>b.id===e.operatingSystem)??II[0],d=e.operatingSystem==="ubuntu-22.04"&&l==="3.10"||e.operatingSystem==="ubuntu-24.04"&&l==="3.12",f=gvt(e,n,l,d,s),h=i?[`ARG AIO_BASE_IMAGE=${NH}`,"ARG AIO_BASE_PLATFORM=linux/amd64","",`# Base environment: AIO Sandbox (${u.label})`,"FROM --platform=${AIO_BASE_PLATFORM} ${AIO_BASE_IMAGE}"]:r?[`ARG CODEX_BASE_IMAGE=${yLe[t]}`,"ARG CODEX_BASE_PLATFORM=linux/amd64","","# Base environment: Codex Sandbox","FROM --platform=${CODEX_BASE_PLATFORM} ${CODEX_BASE_IMAGE}"]:[`# Operating system: ${u.label}`,`FROM ${u.image}`];h.push("","ARG DEBIAN_FRONTEND=noninteractive","ARG APT_MIRROR_URL=http://archive.ubuntu.com/ubuntu","ARG PIP_INDEX_URL=https://pypi.org/simple","ARG PYTHON_SOURCE_BASE_URL=https://www.python.org/ftp/python","ARG PLAYWRIGHT_DOWNLOAD_HOST=https://cdn.playwright.dev","ARG PIP_DEFAULT_TIMEOUT=300","ARG PIP_RETRIES=10","","# Install all system dependencies in one transaction from the provider-local mirror.","RUN set -eux; \\",' mirror="${APT_MIRROR_URL%/}"; \\'," for source_file in /etc/apt/sources.list /etc/apt/sources.list.d/*.sources; do \\",' [ -f "$source_file" ] || continue; \\',' sed -i -E "s#https?://(archive|security).ubuntu.com/ubuntu/?#${mirror}#g" "$source_file"; \\'," done; \\",` printf 'Acquire::Retries "5";\\nAcquire::ForceIPv4 "true";\\nAcquire::http::Timeout "60";\\nAcquire::https::Timeout "60";\\n' > /etc/apt/apt.conf.d/80-veadk-network; \\`," apt-get update; \\"," apt-get install -y --no-install-recommends \\",...f.map(b=>" "+b+" \\")," ; rm -rf /var/lib/apt/lists/*","","ENV PYTHONDONTWRITEBYTECODE=1 \\"," PYTHONUNBUFFERED=1 \\"," PIP_NO_CACHE_DIR=1","",`# Python ${l}`),i?h.push("# Keep Studio dependencies isolated from AIO's system interpreter.","RUN /opt/python3.12/bin/python -m venv /opt/veadk-environment/.venv","","ENV VIRTUAL_ENV=/opt/veadk-environment/.venv \\"," BASH_VENV_PATH=/opt/veadk-environment/.venv \\",' PATH="/opt/veadk-environment/.venv/bin:$PATH"'):r?h.push("# Keep Studio dependencies isolated from the Codex runtime.","RUN python3 -m venv /opt/veadk-environment/.venv","","ENV VIRTUAL_ENV=/opt/veadk-environment/.venv \\",' PATH="/opt/veadk-environment/.venv/bin:$PATH"'):d?h.push(`RUN python${l} -m venv /opt/venv`):h.push(`RUN curl --retry 5 --retry-all-errors --connect-timeout 30 -fsSL "\${PYTHON_SOURCE_BASE_URL}/${c}/Python-${c}.tgz" -o /tmp/python.tgz \\`," && mkdir -p /tmp/python-source \\"," && tar -xzf /tmp/python.tgz --strip-components=1 -C /tmp/python-source \\"," && cd /tmp/python-source \\"," && ./configure --prefix=/opt/python --with-ensurepip=install \\",' && make -j"$(nproc)" \\'," && make install \\",` && /opt/python/bin/python${l} -m venv /opt/venv \\`," && rm -rf /tmp/python-source /tmp/python.tgz"),s||h.push("",'ENV PATH="/opt/venv/bin:$PATH"');const m=new Set(e.optionIds);(m.has("playwright")||m.has("chromium"))&&h.push("","ENV PLAYWRIGHT_BROWSERS_PATH=/ms-playwright \\"," PLAYWRIGHT_DOWNLOAD_CONNECTION_TIMEOUT=300000"),h.push("","WORKDIR /workspace","","# VeADK","RUN python -m pip install --upgrade veadk-python");let g=!1;for(const b of n)h.push("",`# ${b.label}`),b.id==="opencli"?h.push('RUN node_arch="$(dpkg --print-architecture)" \\',' && case "$node_arch" in amd64) node_arch=x64 ;; arm64) node_arch=arm64 ;; *) echo "Unsupported architecture: $node_arch" >&2; exit 1 ;; esac \\',' && curl --retry 5 --connect-timeout 30 -fsSL "https://nodejs.org/dist/v22.18.0/node-v22.18.0-linux-${node_arch}.tar.xz" -o /tmp/node.tar.xz \\'," && tar -xJf /tmp/node.tar.xz -C /usr/local --strip-components=1 \\",` && npm install --global ${b.packageName} \\`," && npm cache clean --force \\"," && rm -f /tmp/node.tar.xz"):b.id==="playwright"||b.id==="chromium"?g||(h.push("RUN python -m pip install --upgrade playwright"),h.push("RUN python -m playwright install chromium"),g=!0):b.installer!=="apt"&&h.push(`RUN python -m pip install --upgrade ${b.packageName}`);return i?h.push("","# Keep AIO's inherited /opt/gem/run.sh startup chain and shell API.","EXPOSE 8080"):r||h.push("",'CMD ["/bin/bash"]'),h.join(` +}`,Qyt=[{key:"DATABASE_VIKING_PROJECT",required:!1,placeholder:"default"},{key:"DATABASE_VIKING_REGION",required:!1},{key:"DATABASE_VIKING_COLLECTION_KIND",required:!1},{key:"DATABASE_VIKING_RESOURCE_ID",required:!1}],zyt=[Ed({key:"DATABASE_VIKINGMEM_PROJECT",required:!1,placeholder:"default",hidden:!0},{comment:"traditional.catalog.env.vikingMemoryProject.comment"}),Ed({key:"DATABASE_VIKING_REGION",required:!1,hidden:!0},{comment:"traditional.catalog.env.vikingMemoryRegion.comment"}),Ed({key:"DATABASE_VIKINGMEM_MEMORY_TYPE",required:!1,placeholder:"sys_event_v1,sys_profile_v1",hidden:!0},{comment:"traditional.catalog.env.vikingMemoryType.comment"})],xO=[Ed({key:"FEISHU_APP_ID",required:!0,placeholder:"cli_xxx"},{comment:"traditional.catalog.env.feishuAppId.comment"}),Ed({key:"FEISHU_APP_SECRET",required:!0,secret:!0},{placeholder:"traditional.catalog.env.feishuAppSecret.placeholder",comment:"traditional.catalog.env.feishuAppSecret.comment"})],bw={topK:"3",region:"cn-beijing",endpoint:"https://open.volcengineapi.com/"};function jM(e){if(e==="byteplus"){const t="ap-southeast-1";return{topK:bw.topK,region:t,endpoint:`https://agentkit.${t}.byteplusapi.com/`}}return bw}const fLe=[Ed({key:"REGISTRY_SPACE_ID",required:!0},{placeholder:"traditional.catalog.env.registrySpaceId.placeholder",comment:"traditional.catalog.env.registrySpaceId.comment"}),Ed({key:"REGISTRY_TOP_K",required:!1,placeholder:bw.topK},{comment:"traditional.catalog.env.registryTopK.comment"}),Ed({key:"REGISTRY_REGION",required:!1,placeholder:bw.region},{comment:"traditional.catalog.env.registryRegion.comment"}),Ed({key:"REGISTRY_ENDPOINT",required:!1,placeholder:bw.endpoint},{comment:"traditional.catalog.env.registryEndpoint.comment"})],mT=pT([{id:"web_search",importLine:"from veadk.tools.builtin_tools.web_search import web_search",toolNames:["web_search"],env:jI},{id:"parallel_web_search",importLine:"from veadk.tools.builtin_tools.parallel_web_search import parallel_web_search",toolNames:["parallel_web_search"],env:jI},{id:"link_reader",importLine:"from veadk.tools.builtin_tools.link_reader import link_reader",toolNames:["link_reader"],env:[]},{id:"web_scraper",importLine:"from veadk.tools.builtin_tools.web_scraper import web_scraper",toolNames:["web_scraper"],env:[{key:"TOOL_WEB_SCRAPER_ENDPOINT",required:!0},{key:"TOOL_WEB_SCRAPER_API_KEY",required:!0}]},{id:"image_generate",importLine:"from veadk.tools.builtin_tools.image_generate import image_generate",toolNames:["image_generate"],env:[{key:"MODEL_IMAGE_NAME",required:!1,placeholder:"doubao-seedream-5-0-260128"}]},{id:"image_edit",importLine:"from veadk.tools.builtin_tools.image_edit import image_edit",toolNames:["image_edit"],env:[{key:"MODEL_EDIT_NAME",required:!1,placeholder:"doubao-seededit-3-0-i2i-250628"}]},{id:"video_generate",importLine:"from veadk.tools.builtin_tools.video_generate import video_generate, video_task_query",toolNames:["video_generate","video_task_query"],env:[{key:"MODEL_VIDEO_NAME",required:!1,placeholder:"doubao-seedance-2-0-260128"}]},{id:"text_to_speech",importLine:"from veadk.tools.builtin_tools.tts import text_to_speech",toolNames:["text_to_speech"],env:[{key:"TOOL_VESPEECH_APP_ID",required:!0},{key:"TOOL_VESPEECH_SPEAKER",required:!1,placeholder:"zh_female_vv_uranus_bigtts"}]},{id:"run_code",importLine:"from veadk.tools.builtin_tools.run_code import run_code",toolNames:["run_code"],env:[{key:"AGENTKIT_TOOL_ID",required:!0,placeholder:"t-xxxx",get comment(){return Jt("traditional.catalog.env.agentKitToolId.comment")}},{key:"AGENTKIT_TOOL_REGION",required:!1,placeholder:"cn-beijing",get comment(){return Jt("traditional.catalog.env.agentKitToolRegion.comment")}}]},{id:"vesearch",importLine:"from veadk.tools.builtin_tools.vesearch import vesearch",toolNames:["vesearch"],env:[{key:"TOOL_VESEARCH_ENDPOINT",required:!0,comment:"VeSearch bot_id"}]}],"traditional.catalog"),Vyt=new Set(["web_scraper","text_to_speech","vesearch"]),Hyt=new Set(["web_search","parallel_web_search"]),qyt=mT.filter(e=>!Vyt.has(e.id));function hLe(e="volcengine"){const t=e==="byteplus"?Hyt:new Set;return qyt.filter(n=>!t.has(n.id))}const yw=pT([{id:"local",env:[]},{id:"sqlite",extraArgs:'local_database_path="./short_term_memory.db"',env:[]},{id:"mysql",env:[{key:"DATABASE_MYSQL_HOST",required:!0},{key:"DATABASE_MYSQL_USER",required:!0},{key:"DATABASE_MYSQL_PASSWORD",required:!0},{key:"DATABASE_MYSQL_DATABASE",required:!0}]},{id:"postgresql",env:[{key:"DATABASE_POSTGRESQL_HOST",required:!0},{key:"DATABASE_POSTGRESQL_PORT",required:!1,placeholder:"5432"},{key:"DATABASE_POSTGRESQL_USER",required:!0},{key:"DATABASE_POSTGRESQL_PASSWORD",required:!0},{key:"DATABASE_POSTGRESQL_DATABASE",required:!0}]}],"traditional.backends.shortTerm"),HB=pT([{id:"local",env:$N,pipExtra:"extensions",needsEmbedding:!0},{id:"opensearch",env:[{key:"DATABASE_OPENSEARCH_HOST",required:!0},{key:"DATABASE_OPENSEARCH_PORT",required:!1,placeholder:"9200"},{key:"DATABASE_OPENSEARCH_USERNAME",required:!0},{key:"DATABASE_OPENSEARCH_PASSWORD",required:!0},...$N],pipExtra:"extensions",needsEmbedding:!0},{id:"redis",env:[{key:"DATABASE_REDIS_HOST",required:!0},{key:"DATABASE_REDIS_PORT",required:!1,placeholder:"6379"},{key:"DATABASE_REDIS_PASSWORD",required:!1},...$N],pipExtra:"extensions",needsEmbedding:!0},{id:"viking",env:zyt},{id:"openviking",env:[{key:"DATABASE_OPENVIKING_URL",required:!0,placeholder:dLe,get comment(){return Jt("traditional.catalog.env.openVikingUrl.comment")},link:NI},{key:"DATABASE_OPENVIKING_API_KEY",required:!0,comment:"OpenViking API Key",link:NI},{key:"DATABASE_OPENVIKING_USER_ID",required:!1,placeholder:"default",get comment(){return Jt("traditional.catalog.env.openVikingMemoryUserId.comment")},get help(){return Jt("traditional.catalog.env.openVikingMemoryUserId.help")}},{key:"DATABASE_OPENVIKING_MEMORY_POLICY",required:!1,placeholder:Uyt,get comment(){return Jt("traditional.catalog.env.openVikingMemoryPolicy.comment")},multiline:!0,format:"json",get help(){return Jt("traditional.catalog.env.openVikingMemoryPolicy.help")},link:Byt}]},{id:"mem0",env:[{key:"DATABASE_MEM0_API_KEY",required:!0},{key:"DATABASE_MEM0_BASE_URL",required:!1}],pipExtra:"database"}],"traditional.backends.longTerm"),zg="viking",qB=pT([{id:"viking",env:Qyt},{id:"opensearch",env:[{key:"DATABASE_OPENSEARCH_HOST",required:!0},{key:"DATABASE_OPENSEARCH_PORT",required:!1,placeholder:"9200"},{key:"DATABASE_OPENSEARCH_USERNAME",required:!0},{key:"DATABASE_OPENSEARCH_PASSWORD",required:!0},...$N],pipExtra:"extensions",needsEmbedding:!0},{id:"context_search",env:[...jI,{key:"DATABASE_CONTEXT_SEARCH_ENGINE_ID",required:!0},{key:"DATABASE_CONTEXT_SEARCH_ENGINE_ENDPOINT",required:!0},{key:"DATABASE_CONTEXT_SEARCH_ENGINE_APIKEY",required:!0}]},{id:"openviking",env:[{key:"DATABASE_OPENVIKING_URL",required:!0,placeholder:dLe,get comment(){return Jt("traditional.catalog.env.openVikingUrl.comment")},link:NI},{key:"DATABASE_OPENVIKING_API_KEY",required:!0,comment:"OpenViking API Key",link:NI},{key:"DATABASE_OPENVIKING_USER_ID",required:!1,placeholder:"default",get comment(){return Jt("traditional.catalog.env.openVikingKnowledgeUserId.comment")},get help(){return Jt("traditional.catalog.env.openVikingKnowledgeUserId.help")}},{key:"DATABASE_OPENVIKING_TARGET_URI",required:!1,placeholder:"viking://user/default/resources//",get comment(){return Jt("traditional.catalog.env.openVikingTargetUri.comment")},get help(){return Jt("traditional.catalog.env.openVikingTargetUri.help")}}]}],"traditional.backends.knowledge"),Wyt=pT([{id:"apmplus",enableFlag:"ENABLE_APMPLUS",env:[{key:"OBSERVABILITY_OPENTELEMETRY_APMPLUS_SERVICE_NAME",required:!1}]},{id:"cozeloop",enableFlag:"ENABLE_COZELOOP",env:[{key:"OBSERVABILITY_OPENTELEMETRY_COZELOOP_API_KEY",required:!0},{key:"OBSERVABILITY_OPENTELEMETRY_COZELOOP_SERVICE_NAME",required:!1,comment:"CozeLoop space_id"}]},{id:"tls",enableFlag:"ENABLE_TLS",env:[...jI,Ed({key:"OBSERVABILITY_OPENTELEMETRY_TLS_SERVICE_NAME",required:!1},{comment:"traditional.catalog.env.tlsServiceName.comment"})]}],"traditional.exporters");function Pd(e="volcengine"){return{name:"",description:Jt("defaults.description"),instruction:Jt("defaults.instruction"),dynamicAgentDelegation:!1,agentType:"llm",cloudProvider:e,maxIterations:3,a2aUrl:"",tools:[],skills:[],memory:{shortTerm:!1,longTerm:!1},knowledgebase:!1,tracing:!1,subAgents:[],builtinTools:[],customTools:[],mcpTools:[],a2aRegistry:{enabled:!1,registrySpaceId:"",registryTopK:"",registryRegion:"",registryEndpoint:""},modelName:nm(e),modelFallbacks:[],modelSource:"ark",modelProvider:"",modelApiBase:"",shortTermBackend:"local",longTermBackend:"local",longTermMemoryIndex:"",autoSaveSession:!1,knowledgebaseBackend:zg,knowledgebaseIndex:"",tracingExporters:[],selectedSkills:[],cloudEnvironment:{environmentId:"",environmentVersionId:""},deployment:{feishuEnabled:!1,modelApiKeyId:"",modelApiKeyName:""}}}function kS(e){return{id:e,get displayName(){return Jt(`traditional.optimization.options.${e}.label`)},get description(){return Jt(`traditional.optimization.options.${e}.description`)}}}const EH=[kS("context_engine"),kS("compressor"),kS("verifier"),kS("long_run_control"),kS("mcp_resilience")],Kyt=[{id:"quality",get displayName(){return Jt("traditional.optimization.groups.quality")},componentIds:["context_engine","verifier"]},{id:"cost",get displayName(){return Jt("traditional.optimization.groups.cost")},componentIds:["compressor"]},{id:"stability",get displayName(){return Jt("traditional.optimization.groups.stability")},componentIds:["long_run_control","mcp_resilience"]}],ck=EH.map(e=>e.id);function Gyt(e){return e==="byteplus"?Jt("traditional.optimization.bytePlusUnavailable"):null}const pLe=["context_engine","compressor","verifier","long_run_control"],Xyt=new Set(["1","true","yes","on"]),CH=[{id:"default",get displayName(){return Jt("traditional.optimization.profiles.default.label")},get description(){return Jt("traditional.optimization.profiles.default.description")},defaultComponents:[],autoAddedComponents:[]},{id:"ops",get displayName(){return Jt("traditional.optimization.profiles.ops.label")},get description(){return Jt("traditional.optimization.profiles.ops.description")},defaultComponents:["context_engine","verifier","long_run_control","mcp_resilience"],autoAddedComponents:["sql_readonly"]}];function FN(e){var t;return((t=EH.find(n=>n.id===e))==null?void 0:t.displayName)??e}function Yyt(e){var t;return((t=CH.find(n=>n.id===e))==null?void 0:t.displayName)??e}function AH(e){const t=CH.find(n=>n.id===e);return t?[...t.defaultComponents]:[]}function qy(e,t="default"){const n=new Set(e);return{enabled:n.size>0,profile:t,componentOverrides:Object.fromEntries(ck.map(r=>[r,n.has(r)]))}}function TH(e){if(!e)return;const t=e.profile==="ops"?"ops":"default",n=t==="ops"?AH(t):ck.filter(i=>{var r;return((r=e.componentOverrides)==null?void 0:r[i])===!0});return{...qy(n,t),...e.catalogVersion?{catalogVersion:e.catalogVersion}:{},...e.planHash?{planHash:e.planHash}:{}}}function x4(e){return Xyt.has((e==null?void 0:e.trim().toLowerCase())??"")}function Zyt(e){if(!e)return null;try{const t=JSON.parse(e);return t&&typeof t=="object"&&!Array.isArray(t)?t:null}catch{return null}}function Jyt(e){var o;const t=new Map((e==null?void 0:e.map(({key:l,value:c})=>[l,c]))??[]),n=t.get("HARNESS_SIDECAR_ENABLED");if(n===void 0)return null;const i=((o=t.get("HARNESS_PROFILE"))==null?void 0:o.trim())==="ops"?"ops":"default";if(!x4(n))return qy([],i);const r=Zyt(t.get("HARNESS_SIDECAR_COMPONENT_OVERRIDES"));if(r){const l={...qy(ck.filter(c=>r[c]===!0),i),enabled:!0};return i==="ops"?TH(l)??l:l}if(i==="ops")return qy(AH(i),i);const s=[...x4(t.get("HARNESS_MODEL_PROXY_ENABLED"))?pLe:[],...x4(t.get("HARNESS_MCP_GATEWAY_ENABLED"))?["mcp_resilience"]:[]];return{...qy(s,i),enabled:!0}}function evt(e,t){return{...e,modelName:t.modelName||e.modelName,description:t.description,instruction:t.instruction}}function tvt(e){var t;return((t=e.harnessSidecar)==null?void 0:t.profile)??"default"}function RI(e){var n;const t=(n=e.harnessSidecar)==null?void 0:n.componentOverrides;return t?ck.filter(i=>t[i]):[]}function nvt(e){const t=new Set(RI(e));return pLe.filter(n=>t.has(n))}function ivt(e,t){const n=i=>({...i,mcpTools:(i.mcpTools??[]).map(r=>{var o,l;const s=!!(r.authTokenEnv&&(t.has(r.authTokenEnv)||r.authToken));return{...r,credentialConfigured:s,...s?{credentialSourceUrl:((o=r.url)==null?void 0:o.trim())??"",credentialSourceAuthTokenEnv:((l=r.authTokenEnv)==null?void 0:l.trim())??""}:{}}}),subAgents:i.subAgents.map(n),...i.workflow?{workflow:{...i.workflow,nodes:i.workflow.nodes.map(r=>({...r,agent:n(r.agent)}))}}:{}});return n(e)}function uk(e){const t=(e==null?void 0:e.trim())??"",n=t.indexOf("/");return n<=0||n===t.length-1?{modelName:t,modelProvider:""}:{modelName:t.slice(n+1),modelProvider:t.slice(0,n)}}function _H(e){return uk(e).modelName}function mLe(e,t,n,i=!1){var c,u,d,f;const r=uk((t==null?void 0:t.model)||(n==null?void 0:n.model)),s=(t==null?void 0:t.children)??[],o=t==null?void 0:t.type,l=e.agentType==="a2a"&&((c=e.a2aRegistry)!=null&&c.enabled)&&o==="llm"?"a2a":o??e.agentType;return{...e,name:((u=t==null?void 0:t.name)==null?void 0:u.trim())||((d=n==null?void 0:n.name)==null?void 0:d.trim())||e.name,description:(t==null?void 0:t.description)??e.description,instruction:i?e.instruction:(t==null?void 0:t.instruction)??e.instruction,agentType:l,modelName:r.modelName||e.modelName,modelProvider:r.modelProvider||e.modelProvider,skills:((f=t==null?void 0:t.skills)==null?void 0:f.map(h=>h.name))??e.skills,subAgents:e.subAgents.map((h,m)=>mLe(h,s[m],void 0,i))}}function rvt(e,t){const n=new Map(t.map(({key:o,value:l})=>[o,l]));if(!["REGISTRY_SPACE_ID","REGISTRY_TOP_K","REGISTRY_REGION","REGISTRY_ENDPOINT"].some(o=>n.has(o)))return e;const r=(o,l)=>n.has(o)?n.get(o)??"":l??"",s=o=>{var l;return{...o,...(l=o.a2aRegistry)!=null&&l.enabled?{a2aRegistry:{...o.a2aRegistry,registrySpaceId:r("REGISTRY_SPACE_ID",o.a2aRegistry.registrySpaceId),registryTopK:r("REGISTRY_TOP_K",o.a2aRegistry.registryTopK),registryRegion:r("REGISTRY_REGION",o.a2aRegistry.registryRegion),registryEndpoint:r("REGISTRY_ENDPOINT",o.a2aRegistry.registryEndpoint)}}:{},subAgents:o.subAgents.map(s)}};return s(e)}function WB(e,t){var c,u,d;const n=e.cloudProvider??t,i=Pd(n),r=e.deployment,s=r==null?void 0:r.network,o=e.cloudEnvironment,l=e.a2aRegistry;return{...i,...e,name:e.name??i.name,description:e.description??i.description,instruction:e.instruction??i.instruction,agentType:e.agentType??i.agentType,cloudProvider:n,maxIterations:e.maxIterations??i.maxIterations,a2aUrl:e.a2aUrl??i.a2aUrl,model:e.model??void 0,modelSource:e.modelSource==="ark"||e.modelSource==="custom"?e.modelSource:void 0,modelName:e.modelName??i.modelName,modelProvider:e.modelProvider??i.modelProvider,modelApiBase:e.modelApiBase??i.modelApiBase,memory:{shortTerm:((c=e.memory)==null?void 0:c.shortTerm)??i.memory.shortTerm,longTerm:((u=e.memory)==null?void 0:u.longTerm)??i.memory.longTerm},tools:[...e.tools??[]],skills:[...e.skills??[]],knowledgebase:e.knowledgebase??i.knowledgebase,tracing:e.tracing??i.tracing,harnessSidecar:TH(e.harnessSidecar),subAgents:(e.subAgents??[]).map(f=>WB(f,n)),builtinTools:[...e.builtinTools??[]],customTools:[...e.customTools??[]],mcpTools:[...e.mcpTools??[]],a2aRegistry:{...i.a2aRegistry,...l??{},enabled:(l==null?void 0:l.enabled)??!1,registrySpaceId:(l==null?void 0:l.registrySpaceId)??"",registryTopK:(l==null?void 0:l.registryTopK)??"",registryRegion:(l==null?void 0:l.registryRegion)??"",registryEndpoint:(l==null?void 0:l.registryEndpoint)??""},shortTermBackend:e.shortTermBackend??i.shortTermBackend,longTermBackend:e.longTermBackend??i.longTermBackend,longTermMemoryIndex:e.longTermMemoryIndex??i.longTermMemoryIndex,autoSaveSession:e.autoSaveSession??i.autoSaveSession,knowledgebaseBackend:e.knowledgebaseBackend??i.knowledgebaseBackend,knowledgebaseIndex:e.knowledgebaseIndex??i.knowledgebaseIndex,tracingExporters:[...e.tracingExporters??[]],selectedSkills:[...e.selectedSkills??[]],cloudEnvironment:{...i.cloudEnvironment,...o??{},cliTools:[...(o==null?void 0:o.cliTools)??[]],dockerfile:typeof(o==null?void 0:o.dockerfile)=="string"?o.dockerfile:void 0},deployment:{...i.deployment,...r??{},feishuEnabled:(r==null?void 0:r.feishuEnabled)??!1,runtimeName:(r==null?void 0:r.runtimeName)??void 0,runtimeNameCustomized:(r==null?void 0:r.runtimeNameCustomized)??((d=i.deployment)==null?void 0:d.runtimeNameCustomized),network:s?{...s,vpcId:s.vpcId??"",subnetIds:s.subnetIds??"",enableSharedInternetAccess:s.enableSharedInternetAccess??!1}:void 0,modelApiKeyId:(r==null?void 0:r.modelApiKeyId)??"",modelApiKeyName:(r==null?void 0:r.modelApiKeyName)??"",envValues:(r==null?void 0:r.envValues)??void 0},...e.workflow?{workflow:{...e.workflow,nodes:e.workflow.nodes.map(f=>({...f,agent:WB(f.agent,n)}))}}:{}}}const svt=["动态子智能体协作规则:","Dynamic sub-agent collaboration rules:"],avt=["collect_resources","create_agents","handoff_to"];function ovt(e){return e.replace(/\\([\\`*_[\]{}()<>#+\-.!|])/g,"$1")}function lvt(e){const t=svt.flatMap(i=>{const r=[];let s=0;for(;si-r),n=t.find((i,r)=>{const s=t[r+1]??e.length,o=ovt(e.slice(i,s));return avt.every(l=>o.includes(l))});return n===void 0?e:e.slice(0,n).trimEnd()}function cvt(e){const t=n=>({...n,instruction:n.dynamicAgentDelegation===!0?lvt(n.instruction):n.instruction,subAgents:n.subAgents.map(t),...n.workflow?{workflow:{...n.workflow,nodes:n.workflow.nodes.map(i=>({...i,agent:t(i.agent)}))}}:{}});return t(e)}function gLe(e,t){var l,c;const n=Pd(t),i=[...e.tools??[]],r=mT.filter(u=>u.toolNames.some(d=>i.includes(d))),s=new Set(r.flatMap(u=>u.toolNames)),o=uk(e.model);return{...n,modelSource:void 0,name:((l=e.name)==null?void 0:l.trim())??"",description:e.description??"",instruction:e.instruction||n.instruction,agentType:e.type??"llm",modelName:o.modelName,modelProvider:o.modelProvider,tools:i.filter(u=>!s.has(u)),builtinTools:r.map(u=>u.id),skills:((c=e.skills)==null?void 0:c.map(u=>u.name))??[],subAgents:(e.children??[]).map(u=>gLe(u,t))}}function jH(e,t,n=[]){var l,c,u,d;const i=((l=e.draft)==null?void 0:l.cloudProvider)??t,r=uk(e.model),s=e.draft?WB(e.draft,i):e.graph?gLe(e.graph,i):{...Pd(i),modelSource:void 0,name:((c=e.name)==null?void 0:c.trim())||e.appName.trim(),description:e.description??"",instruction:e.instruction||Pd(i).instruction,agentType:e.type??"llm",modelName:r.modelName,modelProvider:r.modelProvider,tools:[...e.tools??[]],skills:((u=e.skills)==null?void 0:u.map(f=>f.name))??[]},o=e.draft&&s.dynamicAgentDelegation===!0?cvt(s):s;return ivt(mLe(o,e.graph,{name:((d=e.name)==null?void 0:d.trim())||e.appName.trim(),model:e.model},!!e.draft),new Set(n))}function uvt(e,t){const n=i=>{var s;const r=((s=i.modelName)==null?void 0:s.trim())??"";return{...i,modelSource:i.agentType==="llm"||!i.agentType?t.has(r)?"ark":"custom":i.modelSource,subAgents:i.subAgents.map(n),...i.workflow?{workflow:{...i.workflow,nodes:i.workflow.nodes.map(o=>({...o,agent:n(o.agent)}))}}:{}}};return n(e)}const II=[{id:"ubuntu-22.04",label:"Ubuntu 22.04",image:"ubuntu:22.04"},{id:"ubuntu-24.04",label:"Ubuntu 24.04",image:"ubuntu:24.04"}],bLe=[{id:"aio-sandbox",label:"AIO Sandbox",description:"内置 Sandbox Shell 能力 · Ubuntu 22.04"},{id:"codex-sandbox",label:"Codex Sandbox",description:"内置 Codex CLI、浏览器与代码执行环境"},{id:"ubuntu",label:"Ubuntu",description:"标准 Linux 基础镜像"}],NH={volcengine:"enterprise-public-cn-beijing.cr.volces.com/vefaas-public/agentkit-sandbox:all-in-one-1.0.2",byteplus:"enterprise-public-ap-southeast-1.cr.volces.com/vefaas-public/agentkit-sandbox:all-in-one-1.0.2"},yLe={volcengine:"enterprise-public-cn-beijing.cr.volces.com/vefaas-public/codexenv:1.1.0",byteplus:"enterprise-public-ap-southeast-1.cr.volces.com/vefaas-public/codexenv:1.1.0"},vLe=[{id:"python-3.10",label:"Python 3.10"},{id:"python-3.12",label:"Python 3.12"}],dvt={"python-3.10":"3.10.18","python-3.12":"3.12.11"},RH=[{id:"tools",label:"工具",description:"常用 CLI 与内容处理工具",options:[{id:"lark-cli",label:"lark-cli",description:"飞书开放平台命令行工具",installer:"pip",packageName:"lark-cli"},{id:"pandoc",label:"pandoc",description:"文档格式转换工具",installer:"apt",packageName:"pandoc"},{id:"opencli",label:"opencli",description:"将网站与桌面应用转换为命令行工具",installer:"npm",packageName:"@jackwener/opencli@1.8.7"}]},{id:"productivity",label:"效率",description:"加速依赖安装、检索和协作",options:[{id:"uv",label:"uv",description:"快速 Python 包与项目管理器",installer:"pip",packageName:"uv"},{id:"ripgrep",label:"ripgrep",description:"高性能文本检索工具",installer:"apt",packageName:"ripgrep"},{id:"jq",label:"jq",description:"JSON 查询与转换工具",installer:"apt",packageName:"jq"},{id:"github-cli",label:"GitHub CLI",description:"在终端中管理 GitHub 工作流",installer:"apt",packageName:"gh"}]},{id:"browser",label:"浏览器自动化",description:"网页操作、测试与内容采集",options:[{id:"playwright",label:"Playwright",description:"浏览器自动化与端到端测试",installer:"pip",packageName:"playwright"},{id:"chromium",label:"Chromium",description:"无头浏览器运行时",installer:"apt",packageName:"chromium"}]},{id:"system",label:"系统与媒体",description:"基础开发、网络和媒体处理能力",options:[{id:"git",label:"Git",description:"代码版本管理",installer:"apt",packageName:"git"},{id:"curl",label:"curl",description:"网络请求与文件下载",installer:"apt",packageName:"curl"},{id:"ffmpeg",label:"FFmpeg",description:"音视频转码与处理",installer:"apt",packageName:"ffmpeg"},{id:"imagemagick",label:"ImageMagick",description:"图片转换与批处理",installer:"apt",packageName:"imagemagick"}]}],fvt=RH.flatMap(e=>e.options),hvt=["build-essential","curl","libbz2-dev","libffi-dev","libgdbm-dev","liblzma-dev","libncursesw5-dev","libreadline-dev","libsqlite3-dev","libssl-dev","tk-dev","uuid-dev","zlib1g-dev"],pvt=["xvfb","fonts-noto-color-emoji","fonts-unifont","libfontconfig1","libfreetype6","xfonts-cyrillic","xfonts-scalable","fonts-liberation","fonts-ipafont-gothic","fonts-wqy-zenhei","fonts-tlwg-loma-otf","fonts-freefont-ttf"],mvt={"ubuntu-22.04":["libasound2","libatk-bridge2.0-0","libatk1.0-0","libatspi2.0-0","libcairo2","libcups2","libdbus-1-3","libdrm2","libgbm1","libglib2.0-0","libnspr4","libnss3","libpango-1.0-0","libwayland-client0","libx11-6","libxcb1","libxcomposite1","libxdamage1","libxext6","libxfixes3","libxkbcommon0","libxrandr2"],"ubuntu-24.04":["libasound2t64","libatk-bridge2.0-0t64","libatk1.0-0t64","libatspi2.0-0t64","libcairo2","libcups2t64","libdbus-1-3","libdrm2","libgbm1","libglib2.0-0t64","libnspr4","libnss3","libpango-1.0-0","libx11-6","libxcb1","libxcomposite1","libxdamage1","libxext6","libxfixes3","libxkbcommon0","libxrandr2"]};function SS(e,t){for(const n of t)e.includes(n)||e.push(n)}function gvt(e,t,n,i,r){const s=["ca-certificates"];r||SS(s,i?[`python${n}`,`python${n}-venv`]:hvt);for(const o of t)o.id==="playwright"||o.id==="chromium"||(o.installer==="apt"&&SS(s,[o.packageName]),o.id==="opencli"&&SS(s,["curl","xz-utils"]));return e.optionIds.some(o=>o==="playwright"||o==="chromium")&&(SS(s,pvt),SS(s,mvt[e.operatingSystem])),s}const w4={name:"",description:"",baseEnvironment:"aio-sandbox",operatingSystem:"ubuntu-22.04",language:"python-3.12",optionIds:[],selectedSkills:[]};function Vp(e){var t;return((t=vLe.find(n=>n.id===e))==null?void 0:t.label)??e}function KB(e){var t;return((t=II.find(n=>n.id===e))==null?void 0:t.label)??e}function GB(e){var t;return((t=bLe.find(n=>n.id===e))==null?void 0:t.label)??e}function bvt(e){var n;const t=((n=e.match(/^\s*FROM\s+(.+)$/im))==null?void 0:n[1])??"";return{baseEnvironment:/\/codexenv:/i.test(t)?"codex-sandbox":/aio\.sandbox/i.test(e)?"aio-sandbox":"ubuntu",operatingSystem:/ubuntu:24\.04/i.test(t)?"ubuntu-24.04":"ubuntu-22.04"}}function IH(e,t="volcengine"){const n=fvt.filter(b=>e.optionIds.includes(b.id)),i=e.baseEnvironment==="aio-sandbox",r=e.baseEnvironment==="codex-sandbox",s=i||r,o=s?"python-3.12":e.language,l=o.replace("python-",""),c=dvt[o],u=II.find(b=>b.id===e.operatingSystem)??II[0],d=e.operatingSystem==="ubuntu-22.04"&&l==="3.10"||e.operatingSystem==="ubuntu-24.04"&&l==="3.12",f=gvt(e,n,l,d,s),h=i?[`ARG AIO_BASE_IMAGE=${NH[t]}`,"ARG AIO_BASE_PLATFORM=linux/amd64","",`# Base environment: AIO Sandbox (${u.label})`,"FROM --platform=${AIO_BASE_PLATFORM} ${AIO_BASE_IMAGE}"]:r?[`ARG CODEX_BASE_IMAGE=${yLe[t]}`,"ARG CODEX_BASE_PLATFORM=linux/amd64","","# Base environment: Codex Sandbox","FROM --platform=${CODEX_BASE_PLATFORM} ${CODEX_BASE_IMAGE}"]:[`# Operating system: ${u.label}`,`FROM ${u.image}`];h.push("","ARG DEBIAN_FRONTEND=noninteractive","ARG APT_MIRROR_URL=http://archive.ubuntu.com/ubuntu","ARG PIP_INDEX_URL=https://pypi.org/simple","ARG PYTHON_SOURCE_BASE_URL=https://www.python.org/ftp/python","ARG PLAYWRIGHT_DOWNLOAD_HOST=https://cdn.playwright.dev","ARG PIP_DEFAULT_TIMEOUT=300","ARG PIP_RETRIES=10","","# Install all system dependencies in one transaction from the provider-local mirror.","RUN set -eux; \\",' mirror="${APT_MIRROR_URL%/}"; \\'," for source_file in /etc/apt/sources.list /etc/apt/sources.list.d/*.sources; do \\",' [ -f "$source_file" ] || continue; \\',' sed -i -E "s#https?://(archive|security).ubuntu.com/ubuntu/?#${mirror}#g" "$source_file"; \\'," done; \\",` printf 'Acquire::Retries "5";\\nAcquire::ForceIPv4 "true";\\nAcquire::http::Timeout "60";\\nAcquire::https::Timeout "60";\\n' > /etc/apt/apt.conf.d/80-veadk-network; \\`," apt-get update; \\"," apt-get install -y --no-install-recommends \\",...f.map(b=>" "+b+" \\")," ; rm -rf /var/lib/apt/lists/*","","ENV PYTHONDONTWRITEBYTECODE=1 \\"," PYTHONUNBUFFERED=1 \\"," PIP_NO_CACHE_DIR=1","",`# Python ${l}`),i?h.push("# Keep Studio dependencies isolated from AIO's system interpreter.","RUN /opt/python3.12/bin/python -m venv /opt/veadk-environment/.venv","","ENV VIRTUAL_ENV=/opt/veadk-environment/.venv \\"," BASH_VENV_PATH=/opt/veadk-environment/.venv \\",' PATH="/opt/veadk-environment/.venv/bin:$PATH"'):r?h.push("# Keep Studio dependencies isolated from the Codex runtime.","RUN python3 -m venv /opt/veadk-environment/.venv","","ENV VIRTUAL_ENV=/opt/veadk-environment/.venv \\",' PATH="/opt/veadk-environment/.venv/bin:$PATH"'):d?h.push(`RUN python${l} -m venv /opt/venv`):h.push(`RUN curl --retry 5 --retry-all-errors --connect-timeout 30 -fsSL "\${PYTHON_SOURCE_BASE_URL}/${c}/Python-${c}.tgz" -o /tmp/python.tgz \\`," && mkdir -p /tmp/python-source \\"," && tar -xzf /tmp/python.tgz --strip-components=1 -C /tmp/python-source \\"," && cd /tmp/python-source \\"," && ./configure --prefix=/opt/python --with-ensurepip=install \\",' && make -j"$(nproc)" \\'," && make install \\",` && /opt/python/bin/python${l} -m venv /opt/venv \\`," && rm -rf /tmp/python-source /tmp/python.tgz"),s||h.push("",'ENV PATH="/opt/venv/bin:$PATH"');const m=new Set(e.optionIds);(m.has("playwright")||m.has("chromium"))&&h.push("","ENV PLAYWRIGHT_BROWSERS_PATH=/ms-playwright \\"," PLAYWRIGHT_DOWNLOAD_CONNECTION_TIMEOUT=300000"),h.push("","WORKDIR /workspace","","# VeADK","RUN python -m pip install --upgrade veadk-python");let g=!1;for(const b of n)h.push("",`# ${b.label}`),b.id==="opencli"?h.push('RUN node_arch="$(dpkg --print-architecture)" \\',' && case "$node_arch" in amd64) node_arch=x64 ;; arm64) node_arch=arm64 ;; *) echo "Unsupported architecture: $node_arch" >&2; exit 1 ;; esac \\',' && curl --retry 5 --connect-timeout 30 -fsSL "https://nodejs.org/dist/v22.18.0/node-v22.18.0-linux-${node_arch}.tar.xz" -o /tmp/node.tar.xz \\'," && tar -xJf /tmp/node.tar.xz -C /usr/local --strip-components=1 \\",` && npm install --global ${b.packageName} \\`," && npm cache clean --force \\"," && rm -f /tmp/node.tar.xz"):b.id==="playwright"||b.id==="chromium"?g||(h.push("RUN python -m pip install --upgrade playwright"),h.push("RUN python -m playwright install chromium"),g=!0):b.installer!=="apt"&&h.push(`RUN python -m pip install --upgrade ${b.packageName}`);return i?h.push("","# Keep AIO's inherited /opt/gem/run.sh startup chain and shell API.","EXPOSE 8080"):r||h.push("",'CMD ["/bin/bash"]'),h.join(` `)}function yvt(){return a.jsx("svg",{viewBox:"0 0 24 24",fill:"none","aria-hidden":"true",children:a.jsx("path",{d:"m7 7 10 10M17 7 7 17",stroke:"currentColor",strokeWidth:"1.7",strokeLinecap:"round"})})}function vvt(){return a.jsxs("svg",{viewBox:"0 0 24 24",fill:"none","aria-hidden":"true",children:[a.jsx("circle",{cx:"10.8",cy:"10.8",r:"5.8",stroke:"currentColor",strokeWidth:"1.7"}),a.jsx("path",{d:"m15.2 15.2 4 4",stroke:"currentColor",strokeWidth:"1.7",strokeLinecap:"round"})]})}function XB(){return a.jsxs("svg",{viewBox:"0 0 24 24",fill:"none","aria-hidden":"true",children:[a.jsx("path",{d:"M5 7.25A2.25 2.25 0 0 1 7.25 5h9.5A2.25 2.25 0 0 1 19 7.25v9.5A2.25 2.25 0 0 1 16.75 19h-9.5A2.25 2.25 0 0 1 5 16.75v-9.5Z",stroke:"currentColor",strokeWidth:"1.6"}),a.jsx("path",{d:"M8.5 9.25 11 12l-2.5 2.75M12.75 14.75h2.75",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round",strokeLinejoin:"round"})]})}function xLe(){return a.jsxs("svg",{viewBox:"0 0 24 24",fill:"none","aria-hidden":"true",children:[a.jsx("path",{d:"M4.75 7.25A2.25 2.25 0 0 1 7 5h3l1.5 2h5.5a2.25 2.25 0 0 1 2.25 2.25v7.5A2.25 2.25 0 0 1 17 19H7a2.25 2.25 0 0 1-2.25-2.25v-9.5Z",stroke:"currentColor",strokeWidth:"1.6",strokeLinejoin:"round"}),a.jsx("path",{d:"M8 11.25h8M8 14.75h5.5",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round"})]})}function xvt(){return a.jsx("svg",{viewBox:"0 0 24 24",fill:"none","aria-hidden":"true",children:a.jsx("path",{d:"M12 6.5v11M6.5 12h11",stroke:"currentColor",strokeWidth:"1.7",strokeLinecap:"round"})})}function Jee(){return a.jsx("svg",{viewBox:"0 0 24 24",fill:"none","aria-hidden":"true",children:a.jsx("path",{d:"m7 7 10 10M17 7 7 17",stroke:"currentColor",strokeWidth:"1.7",strokeLinecap:"round"})})}function ete(){return a.jsx("svg",{viewBox:"0 0 16 16",fill:"none","aria-hidden":"true",children:a.jsx("path",{d:"m3.5 8.25 2.75 2.75 6.25-6.25",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round"})})}function Rc(e){return`${e.environment_id}\0${e.environment_version_id}`}function mE(e){return e.latestVersion?{environment_id:e.id,environment_version_id:e.latestVersion.versionId}:null}function BN(e,t){return e.environmentIds.flatMap(n=>{const i=t.get(n),r=i?mE(i):null;return r?[r]:[]})}function wvt({environments:e,workspaces:t,value:n,selectedWorkspaceIds:i,loading:r,error:s,onConfirm:o,onClose:l}){const{t:c}=_e("workspaceTools"),[u,d]=p.useState(""),[f,h]=p.useState(!1),[m,g]=p.useState(""),b=p.useId(),v=p.useMemo(()=>new Map(e.map(C=>[C.id,C])),[e]),[y,w]=p.useState(()=>new Set(i)),[x,k]=p.useState(()=>{const C=new Set(t.filter(N=>i.includes(N.id)).flatMap(N=>N.environmentIds));return new Set(n.filter(N=>!C.has(N.environment_id)).map(Rc))}),O=p.useMemo(()=>new Set(t.filter(C=>y.has(C.id)).flatMap(C=>C.environmentIds)),[y,t]),S=p.useMemo(()=>{const C=new Set(x);for(const N of t)if(y.has(N.id))for(const D of BN(N,v))C.add(Rc(D));return C},[x,y,v,t]),A=p.useMemo(()=>{const C=u.trim().toLocaleLowerCase();return C?e.filter(N=>`${N.name} ${N.description} ${Vp(N.language)}`.toLocaleLowerCase().includes(C)):e},[e,u]),E=p.useMemo(()=>{const C=u.trim().toLocaleLowerCase();return C?t.filter(N=>{const D=N.environmentIds.map(I=>{var P;return((P=v.get(I))==null?void 0:P.name)??""}).join(" ");return`${N.name} ${N.description} ${D}`.toLocaleLowerCase().includes(C)}):t},[v,u,t]);p.useEffect(()=>{const C=document.body.style.overflow,N=D=>{D.key==="Escape"&&!f&&l()};return document.body.style.overflow="hidden",document.addEventListener("keydown",N),()=>{document.body.style.overflow=C,document.removeEventListener("keydown",N)}},[l,f]);const j=C=>{const N=mE(C);if(!N)return;const D=Rc(N);O.has(C.id)||k(I=>{const P=new Set(I);return P.has(D)?P.delete(D):P.add(D),P})},T=C=>{const N=BN(C,v);N.length!==0&&(w(D=>{const I=new Set(D);return I.has(C.id)?I.delete(C.id):I.add(C.id),I}),k(D=>{const I=new Set(D);for(const P of N)I.delete(Rc(P));return I}))},R=async()=>{const C=new Map(n.map(D=>[Rc(D),D])),N=e.flatMap(D=>{const I=mE(D);if(!I||!S.has(Rc(I)))return[];const P=C.get(Rc(I));return[{...I,mount_instance_id:(P==null?void 0:P.mount_instance_id)||crypto.randomUUID()}]});h(!0),g("");try{await o(N,[...y]),l()}catch(D){g(D instanceof Error?D.message:c("sessionEnvironment.mountFailed"))}finally{h(!1)}};return bi.createPortal(a.jsxs("div",{className:"studio-tool-dialog-layer",children:[a.jsx("button",{type:"button",className:"studio-tool-dialog-scrim","aria-label":c("sessionEnvironment.closeDialog"),disabled:f,onClick:l}),a.jsxs("section",{className:"studio-tool-dialog session-environment-dialog",role:"dialog","aria-modal":"true","aria-labelledby":b,children:[a.jsxs("header",{className:"studio-tool-dialog-head",children:[a.jsx("span",{className:"studio-tool-dialog-mark",children:a.jsx(XB,{})}),a.jsxs("div",{children:[a.jsx("h2",{id:b,children:c("sessionEnvironment.addTitle")}),a.jsx("p",{children:c("sessionEnvironment.description")})]}),a.jsx("button",{type:"button",className:"studio-tool-dialog-close","aria-label":c("sessionEnvironment.closeAdd"),disabled:f,onClick:l,children:a.jsx(yvt,{})})]}),a.jsxs("div",{className:"studio-tool-dialog-body",children:[a.jsxs("label",{className:"studio-tool-search",children:[a.jsx(vvt,{}),a.jsx("input",{value:u,"aria-label":c("sessionEnvironment.searchAria"),placeholder:c("sessionEnvironment.searchPlaceholder"),autoFocus:!0,onChange:C=>d(C.target.value)})]}),a.jsx("div",{className:"studio-tool-picker session-environment-picker",role:"group","aria-label":c("sessionEnvironment.availableAria"),children:r?a.jsx("div",{className:"studio-tool-empty",children:c("sessionEnvironment.loading")}):s?a.jsx("div",{className:"studio-tool-empty",children:s}):A.length===0&&E.length===0?a.jsx("div",{className:"studio-tool-empty",children:c("sessionEnvironment.noMatch")}):a.jsxs(a.Fragment,{children:[E.length>0&&a.jsxs("section",{className:"session-environment-picker__group","aria-labelledby":`${b}-workspaces`,children:[a.jsx("h3",{id:`${b}-workspaces`,children:c("sessionEnvironment.workspaces")}),E.map(C=>{const N=BN(C,v),D=y.has(C.id),I=N.length===0;return a.jsxs("label",{className:`studio-tool-option session-environment-option is-workspace${D?" is-selected":""}${I?" is-disabled":""}`,children:[a.jsx("span",{className:"studio-tool-option-icon",children:a.jsx(xLe,{})}),a.jsxs("span",{className:"studio-tool-option-copy",children:[a.jsx("strong",{children:C.name}),a.jsx("span",{children:C.description||c("sessionEnvironment.reuseAll")}),a.jsx("small",{children:c("sessionEnvironment.availableEnvironmentCount",{count:N.length})})]}),a.jsx("input",{type:"checkbox",checked:D,disabled:I,"aria-label":c("sessionEnvironment.selectWorkspace",{name:C.name}),onChange:()=>T(C)}),a.jsx("span",{className:"session-environment-check","aria-hidden":"true",children:a.jsx(ete,{})})]},C.id)})]}),A.length>0&&a.jsxs("section",{className:"session-environment-picker__group","aria-labelledby":`${b}-environments`,children:[a.jsx("h3",{id:`${b}-environments`,children:c("sessionEnvironment.environments")}),A.map(C=>{const N=mE(C);if(!N)return null;const D=t.filter(M=>y.has(M.id)&&M.environmentIds.includes(C.id)),I=D.length>0,P=S.has(Rc(N));return a.jsxs("label",{className:`studio-tool-option session-environment-option${P?" is-selected":""}${I?" is-covered":""}`,children:[a.jsx("span",{className:"studio-tool-option-icon",children:a.jsx(XB,{})}),a.jsxs("span",{className:"studio-tool-option-copy",children:[a.jsx("strong",{children:C.name}),a.jsx("span",{children:I?c("sessionEnvironment.includedByWorkspaces",{names:D.map(M=>M.name).join(c("sessionEnvironment.nameSeparator"))}):C.description||Vp(C.language)}),a.jsxs("small",{children:[Vp(C.language)," · ",N.environment_version_id]})]}),a.jsx("input",{type:"checkbox",checked:P,disabled:I,"aria-label":c("sessionEnvironment.selectEnvironment",{name:C.name}),onChange:()=>j(C)}),a.jsx("span",{className:"session-environment-check","aria-hidden":"true",children:a.jsx(ete,{})})]},Rc(N))})]})]})})]}),a.jsxs("footer",{className:"session-environment-dialog__footer",children:[a.jsx("span",{className:m?"is-error":"",role:m?"alert":void 0,children:m||c("sessionEnvironment.selectionSummary",{workspaces:c("sessionEnvironment.selectedWorkspaceCount",{count:y.size}),environments:c("sessionEnvironment.coveredEnvironmentCount",{count:S.size})})}),a.jsxs("div",{children:[a.jsx("button",{type:"button",disabled:f,onClick:l,children:c("sessionEnvironment.cancel")}),a.jsx("button",{type:"button",className:"is-primary",disabled:r||f||!!s,onClick:()=>void R(),children:c(f?"sessionEnvironment.mounting":"sessionEnvironment.confirm")})]})]})]})]}),document.body)}function kvt({environments:e,workspaces:t,value:n,selectedWorkspaceIds:i,loading:r,disabled:s=!1,error:o="",onChange:l,onRefresh:c}){const{t:u}=_e("workspaceTools"),[d,f]=p.useState(!1),[h,m]=p.useState(!1),[g,b]=p.useState(""),v=p.useRef(null),y=p.useMemo(()=>new Map(e.flatMap(E=>{const j=mE(E);return j?[[Rc(j),E]]:[]})),[e]),w=p.useMemo(()=>new Map(e.map(E=>[E.id,E])),[e]),x=t.filter(E=>i.includes(E.id)),k=new Set(x.flatMap(E=>E.environmentIds)),O=n.filter(E=>!k.has(E.environment_id)),S=()=>{f(!1),requestAnimationFrame(()=>{var E;return(E=v.current)==null?void 0:E.focus()})},A=async(E,j)=>{if(l){m(!0),b("");try{await l(E,j)}catch(T){b(T instanceof Error?T.message:u("sessionEnvironment.mountFailed"))}finally{m(!1)}}};return a.jsxs("div",{className:"session-environment-select",children:[n.length>0&&a.jsxs("div",{className:"session-environment-list",role:"list","aria-label":u("sessionEnvironment.mountedAria"),children:[x.map(E=>{const j=new Set(BN(E,w).map(T=>T.environment_id));return a.jsxs("div",{className:"session-environment-item is-workspace",role:"listitem",children:[a.jsx("span",{className:"session-environment-item__icon",children:a.jsx(xLe,{})}),a.jsxs("span",{className:"session-environment-item__copy",children:[a.jsx("strong",{children:E.name}),a.jsx("small",{children:u("sessionEnvironment.environmentCount",{count:j.size})})]}),l&&a.jsx("button",{type:"button",className:"topo-remove-capability","aria-label":u("sessionEnvironment.removeWorkspace",{name:E.name}),title:u("sessionEnvironment.remove"),disabled:s||h,onClick:()=>{const T=i.filter(C=>C!==E.id),R=new Set(t.filter(C=>T.includes(C.id)).flatMap(C=>C.environmentIds));A(n.filter(C=>!j.has(C.environment_id)||R.has(C.environment_id)),T)},children:a.jsx(Jee,{})})]},`workspace:${E.id}`)}),O.map(E=>{const j=y.get(Rc(E));return a.jsxs("div",{className:"session-environment-item",role:"listitem",children:[a.jsx("span",{className:"session-environment-item__icon",children:a.jsx(XB,{})}),a.jsxs("span",{className:"session-environment-item__copy",children:[a.jsx("strong",{children:(j==null?void 0:j.name)??E.environment_id}),a.jsx("small",{children:j?Vp(j.language):E.environment_version_id})]}),l&&a.jsx("button",{type:"button",className:"topo-remove-capability","aria-label":u("sessionEnvironment.removeEnvironment",{name:(j==null?void 0:j.name)??E.environment_id}),title:u("sessionEnvironment.remove"),disabled:s||h,onClick:()=>void A(n.filter(T=>Rc(T)!==Rc(E)),[...i]),children:a.jsx(Jee,{})})]},Rc(E))})]}),l&&a.jsxs("button",{ref:v,type:"button",className:"topo-capability-add-slot","aria-label":u("sessionEnvironment.add"),disabled:s||r||h,onClick:()=>{b(""),f(!0),c==null||c()},children:[a.jsx(xvt,{}),a.jsx("span",{children:n.length>0?u("sessionEnvironment.addMore"):u("sessionEnvironment.addForSession")})]}),g&&a.jsx("p",{className:"is-error",role:"alert",children:g}),(r||o||e.length===0)&&a.jsx("p",{className:o?"is-error":void 0,role:o?"alert":void 0,children:r?u("sessionEnvironment.loadingAvailable"):o||u("sessionEnvironment.empty")}),d&&a.jsx(wvt,{environments:e,workspaces:t,value:n,selectedWorkspaceIds:i,loading:r,error:o,onConfirm:(E,j)=>l==null?void 0:l(E,j),onClose:S})]})}function Svt(e){return[...new Map(e.filter(t=>t.name.trim()).map(t=>[t.name.trim(),{...t,name:t.name.trim()}])).values()]}function k4({title:e,count:t}){const{t:n}=_e("workspaceTools");return a.jsxs("div",{className:"topo-module-title",children:[a.jsx("span",{className:"topo-module-label",title:e,children:e}),t!==void 0&&a.jsx("span",{className:"topo-section-count","aria-label":n("agentTopology.itemCount",{count:t}),children:t})]})}function Ovt({onEditAgentsMd:e,info:t,loading:n,boundSkills:i,onRefresh:r,onOpenSkill:s,variant:o="rail",selectedSessionSkills:l=[],onSessionSkillsChange:c,environments:u=[],workspaces:d=[],selectedEnvironments:f=[],selectedEnvironmentWorkspaceIds:h=[],environmentsLoading:m=!1,environmentsDisabled:g=!1,environmentsError:b="",onEnvironmentsChange:v,onEnvironmentsRefresh:y}){var C,N,D,I,P;const{t:w}=_e("workspaceTools"),[x,k]=p.useState(null);if(n&&!t)return a.jsx("aside",{className:`topo is-loading${o==="drawer"?" is-drawer":""}`,"aria-label":w("agentTopology.info"),"aria-live":"polite",children:a.jsx(Yt,{as:"span",className:"topo-loading-label",duration:2.2,children:w("agentTopology.loadingInfo")})});if(!t)return null;const O=_H(t.model),S=t.agentCategory==="mpa",A=((C=t.mpa)==null?void 0:C.agentsMdStatus)??"unsupported",E=S?((N=t.mpa)==null?void 0:N.agentsMd)??"":((D=t.graph)==null?void 0:D.instruction)??((I=t.draft)==null?void 0:I.instruction)??"",j=S?(i==null?void 0:i.skills)??[]:Svt([...t.skills,...l.map(M=>({name:M.name,description:M.description??""}))]),T=i==null?void 0:i.error,R=T==="forbidden"?"accessDenied":T==="unsupported"?"skillsUnsupported":T==="degraded"?"skillsDegraded":"loadFailed";return a.jsx(a.Fragment,{children:a.jsxs("aside",{className:`topo${o==="drawer"?" is-drawer":""}`,"aria-label":w("agentTopology.infoAndTopology"),children:[a.jsxs("section",{className:"topo-agent-card","aria-label":w("agentTopology.info"),children:[a.jsxs("div",{className:"topo-agent-heading",children:[a.jsx("h2",{title:t.name,children:t.name||w("agentTopology.unnamedAgent")}),O&&a.jsx("span",{title:O,children:O})]}),t.description&&a.jsx("p",{className:"topo-description",title:t.description,children:t.description}),r&&a.jsx("button",{type:"button",className:"topo-refresh",onClick:r,disabled:n||(i==null?void 0:i.loading),children:w("agentTopology.refresh")})]}),a.jsxs("div",{className:"topo-module-stack",children:[a.jsxs("section",{className:"topo-module-card topo-agents-md-card","aria-label":w("agentTopology.agentsMd"),children:[a.jsx(k4,{title:w("agentTopology.agentsMd")}),S&&e&&a.jsx("button",{type:"button",className:"topo-refresh",onClick:e,children:w("agentTopology.editAgentsMd")}),a.jsx("div",{className:"topo-module-scroll topo-agents-md-scroll",role:"region","aria-label":w("agentTopology.agentsMd"),tabIndex:0,children:S&&A!=="ready"?a.jsx("div",{className:"topo-data-error",role:"status",children:w(`agentTopology.${A==="forbidden"?"accessDenied":A==="unsupported"?"documentUnsupported":"loadFailed"}`)}):E.trim()?a.jsx("pre",{className:"topo-agents-md-content",children:E}):a.jsx("div",{className:"topo-empty",children:w("agentTopology.notConfigured")})})]}),a.jsxs("section",{className:"topo-module-card topo-skills-card","aria-label":w("agentTopology.skills"),children:[a.jsx(k4,{title:w("agentTopology.skills"),count:S?i!=null&&i.complete?j.length:void 0:t.skillsPreviewSupported?j.length:void 0}),a.jsxs("div",{className:"topo-module-scroll topo-skills-scroll",role:"region","aria-label":w("agentTopology.skillList"),tabIndex:0,children:[S&&(i!=null&&i.loading)&&!j.length?a.jsx(Yt,{as:"span",children:w("agentTopology.loadingSkills")}):!S&&!t.skillsPreviewSupported?a.jsx("div",{className:"topo-empty",children:w("agentTopology.previewUnsupported")}):j.length>0?a.jsx("div",{className:"topo-skill-list",children:j.map((M,_)=>{var F;return a.jsxs("div",{className:"topo-skill",title:M.description||M.name,children:[a.jsx("div",{className:"topo-skill-title",children:S&&s&&((F=i==null?void 0:i.skills[_])!=null&&F.skillId)&&!i.skills[_].lookupByName?a.jsx("button",{type:"button",className:"topo-skill-name topo-skill-open",onClick:()=>s(_),children:M.name}):a.jsx("span",{className:"topo-skill-name",children:M.name})}),M.description&&a.jsx("span",{className:"topo-skill-description",children:M.description})]},`${M.name}:${M.description}:${_}`)})}):T?null:a.jsx("div",{className:"topo-empty",children:w(S?(P=t.mpa)!=null&&P.skillSpaces.length?"agentTopology.noBoundSkills":"agentTopology.noBoundSpace":"agentTopology.notConfigured")}),T&&a.jsx("div",{className:"topo-data-error",role:"status",children:w(`agentTopology.${R}`)}),S&&(i==null?void 0:i.loading)&&j.length>0&&a.jsx("span",{role:"status",children:w("agentTopology.loadingSkills")})]}),!S&&c&&a.jsx("div",{className:"topo-capability-add-dock",children:a.jsxs("button",{type:"button",className:"topo-capability-add-slot","aria-label":w("agentTopology.addSkill"),disabled:g,onClick:()=>k("skill"),children:[a.jsx("span",{"aria-hidden":"true",children:"+"}),a.jsx("span",{children:w("agentTopology.addSkillHere")})]})})]}),(v||f.length>0)&&a.jsxs("section",{className:"topo-module-card topo-environment-card","aria-label":w("agentTopology.sessionEnvironment"),children:[a.jsx(k4,{title:w("agentTopology.environment"),count:f.length}),a.jsx(kvt,{environments:u,workspaces:d,value:f,selectedWorkspaceIds:h,loading:m,disabled:g,error:b,onChange:v,onRefresh:y})]})]}),x==="skill"&&c&&bi.createPortal(a.jsxs("div",{className:"studio-tool-dialog-layer",children:[a.jsx("button",{type:"button",className:"studio-tool-dialog-scrim","aria-label":w("agentTopology.close"),onClick:()=>k(null)}),a.jsxs("section",{className:"studio-tool-dialog",role:"dialog","aria-modal":"true",children:[a.jsxs("header",{className:"studio-tool-dialog-head is-iconless",children:[a.jsxs("div",{children:[a.jsx("h2",{children:w("agentTopology.addSkill")}),a.jsx("p",{children:w("agentTopology.skillMountNextTurn")})]}),a.jsx("button",{type:"button",className:"studio-tool-dialog-close","aria-label":w("agentTopology.close"),onClick:()=>k(null),children:a.jsx(Do,{"aria-hidden":"true"})})]}),a.jsx("div",{className:"studio-tool-dialog-body",children:a.jsx(cLe,{selected:[...l],onChange:c})})]})]}),document.body)]})})}const wLe=p.createContext(void 0);function Db(e){const t=p.useContext(wLe);if(!e&&t===void 0)throw new Error(Xc(27));return t}const Mb=p.forwardRef(function(t,n){const{render:i,className:r,style:s,forceRender:o=!1,...l}=t,c=Db(),u=c.useState("open"),d=c.useState("nested"),f=c.useState("mounted"),h=c.useState("transitionStatus");return La("div",t,{state:{open:u,transitionStatus:h},ref:[c.context.backdropRef,n],stateAttributesMapping:rPe,props:[{role:"presentation",hidden:!f,style:{userSelect:"none",WebkitUserSelect:"none"}},l],enabled:o||!d})}),NM=p.forwardRef(function(t,n){const{render:i,className:r,style:s,disabled:o=!1,nativeButton:l=!0,...c}=t,u=Db(),d=u.useState("open"),{getButtonProps:f,buttonRef:h}=lM({disabled:o,native:l}),m={disabled:o};function g(b){d&&u.setOpen(!1,ga(uIe,b.nativeEvent))}return La("button",t,{state:m,ref:[n,h],props:[{onClick:g},c,f]})});function am(e){return tT(e,"base-ui")}const gT=p.forwardRef(function(t,n){const{render:i,className:r,style:s,id:o,...l}=t,c=Db(),u=am(o);return c.useSyncedValueWithCleanup("descriptionElementId",u),La("p",t,{ref:n,props:[{id:u},l]})}),kLe=p.createContext(void 0);function Evt(){const e=p.useContext(kLe);if(e===void 0)throw new Error(Xc(26));return e}const Cvt="ArrowUp",Avt="ArrowDown",Tvt="ArrowLeft",_vt="ArrowRight",jvt="Home",Nvt="End",SLe=new Set([Cvt,Avt,Tvt,_vt,jvt,Nvt]),Rvt={...jV,...oM,nestedDialogOpen(e){return e?{"data-nested-dialog-open":""}:null}},Lb=p.forwardRef(function(t,n){const{render:i,className:r,style:s,finalFocus:o,initialFocus:l,...c}=t,u=Db(),d=u.useState("descriptionElementId"),f=u.useState("disablePointerDismissal"),h=u.useState("floatingRootContext"),m=u.useState("popupProps"),g=u.useState("modal"),b=u.useState("mounted"),v=u.useState("nested"),y=u.useState("nestedOpenDialogCount"),w=u.useState("open"),x=u.useState("openMethod"),k=u.useState("titleElementId"),O=u.useState("transitionStatus"),S=u.useState("role"),A=h.useState("floatingId");Evt(),eT({open:w,ref:u.context.popupRef,onComplete(){var N,D;w&&((D=(N=u.context).onOpenChangeComplete)==null||D.call(N,!0))}});const E=l===void 0?BIe(u.context.popupRef):l,j=y>0,T=u.useStateSetter("popupElement"),C=La("div",t,{state:{open:w,nested:v,transitionStatus:O,nestedDialogOpen:j},props:[m,{id:A,"aria-labelledby":k,"aria-describedby":d,role:S,...FIe,hidden:!b,onKeyDown(N){SLe.has(N.key)&&N.stopPropagation()},style:{"--nested-dialogs":y}},c],ref:[n,u.context.popupRef,T],stateAttributesMapping:Rvt});return a.jsx(kIe,{context:h,openInteractionType:x,disabled:!b,closeOnFocusOut:!f,initialFocus:E,returnFocus:o,modal:g!==!1,restoreFocus:"popup",children:C})}),OLe=p.forwardRef(function(t,n){const{cutout:i,...r}=t;let s;if(i){const o=i.getBoundingClientRect();s=`polygon(0% 0%,100% 0%,100% 100%,0% 100%,0% 0%,${o.left}px ${o.top}px,${o.left}px ${o.bottom}px,${o.right}px ${o.bottom}px,${o.right}px ${o.top}px,${o.left}px ${o.top}px)`}return a.jsx("div",{ref:n,role:"presentation","data-base-ui-inert":"",...r,style:{position:"fixed",inset:0,userSelect:"none",WebkitUserSelect:"none",clipPath:s}})}),$b=p.forwardRef(function(t,n){const{keepMounted:i=!1,...r}=t,s=Db(),o=s.useState("mounted"),l=s.useState("modal"),c=s.useState("open");return o||i?a.jsx(kLe.Provider,{value:i,children:a.jsxs(gIe,{ref:n,...r,children:[o&&l===!0&&a.jsx(OLe,{ref:s.context.internalBackdropRef,inert:wV(!c)}),t.children]})}):null});let tte={},nte={},ite="";function RM(e,t){return ZA(e)?e:t}function rte(e,t,n){return/hidden|clip/.test(e.getComputedStyle(RM(t,n)).overflowY)}function Ivt(e){if(typeof document>"u")return!1;const t=Ar(e);return na(t).innerWidth-t.documentElement.clientWidth>0}function Pvt(e){if(!(typeof CSS<"u"&&CSS.supports&&CSS.supports("scrollbar-gutter","stable"))||typeof document>"u")return!1;const n=Ar(e),i=n.documentElement,r=n.body,s=RM(i,r),o=s.style.overflowY,l=i.style.scrollbarGutter;i.style.scrollbarGutter="stable",s.style.overflowY="scroll";const c=s.offsetWidth;s.style.overflowY="hidden";const u=s.offsetWidth;return s.style.overflowY=o,i.style.scrollbarGutter=l,c===u}function Dvt(e){const t=Ar(e),n=t.documentElement,i=t.body,r=RM(n,i),s={overflowY:r.style.overflowY,overflowX:r.style.overflowX};return Object.assign(r.style,{overflowY:"hidden",overflowX:"hidden"}),()=>{Object.assign(r.style,s)}}function Mvt(e){var m;const t=Ar(e),n=t.documentElement,i=t.body,r=na(n);let s=0,o=0,l=!1;const c=Dc.create();if(ek&&(((m=r.visualViewport)==null?void 0:m.scale)??1)!==1)return()=>{};function u(){const g=r.getComputedStyle(n),b=r.getComputedStyle(i),w=(g.scrollbarGutter||"").includes("both-edges")?"stable both-edges":"stable";s=n.scrollTop,o=n.scrollLeft,tte={scrollbarGutter:n.style.scrollbarGutter,overflowY:n.style.overflowY,overflowX:n.style.overflowX},ite=n.style.scrollBehavior,nte={position:i.style.position,height:i.style.height,width:i.style.width,boxSizing:i.style.boxSizing,overflowY:i.style.overflowY,overflowX:i.style.overflowX,scrollBehavior:i.style.scrollBehavior};const x=n.scrollHeight>n.clientHeight,k=n.scrollWidth>n.clientWidth,O=g.overflowY==="scroll"||b.overflowY==="scroll",S=g.overflowX==="scroll"||b.overflowX==="scroll",A=Math.max(0,r.innerWidth-i.clientWidth),E=Math.max(0,r.innerHeight-i.clientHeight),j=parseFloat(b.marginTop)+parseFloat(b.marginBottom),T=parseFloat(b.marginLeft)+parseFloat(b.marginRight),R=RM(n,i);if(l=Pvt(e),l){n.style.scrollbarGutter=w,R.style.overflowY="hidden",R.style.overflowX="hidden";return}Object.assign(n.style,{scrollbarGutter:w,overflowY:"hidden",overflowX:"hidden"}),(x||O)&&(n.style.overflowY="scroll"),(k||S)&&(n.style.overflowX="scroll"),Object.assign(i.style,{position:"relative",height:j||E?`calc(100dvh - ${j+E}px)`:"100dvh",width:T||A?`calc(100vw - ${T+A}px)`:"100vw",boxSizing:"border-box",overflowY:"hidden",overflowX:"hidden",scrollBehavior:"unset"}),i.scrollTop=s,i.scrollLeft=o,n.setAttribute("data-base-ui-scroll-locked",""),n.style.scrollBehavior="unset"}function d(){Object.assign(n.style,tte),Object.assign(i.style,nte),l||(n.scrollTop=s,n.scrollLeft=o,n.removeAttribute("data-base-ui-scroll-locked"),n.style.scrollBehavior=ite)}function f(){d(),c.request(u)}u();const h=_i(r,"resize",f);return()=>{c.cancel(),d(),typeof r.removeEventListener=="function"&&h()}}class Lvt{constructor(){en(this,"lockCount",0);en(this,"restore",null);en(this,"timeoutLock",Wu.create());en(this,"timeoutUnlock",Wu.create());en(this,"release",()=>{this.lockCount-=1,this.lockCount===0&&this.restore&&this.timeoutUnlock.start(0,this.unlock)});en(this,"unlock",()=>{var t;this.lockCount===0&&this.restore&&((t=this.restore)==null||t.call(this),this.restore=null)})}acquire(t){return this.lockCount+=1,this.lockCount===1&&this.restore===null&&this.timeoutLock.start(0,()=>this.lock(t)),this.release}lock(t){if(this.lockCount===0||this.restore!==null)return;const n=Ar(t),i=n.documentElement,r=n.body,s=na(i);if(rte(s,i,r)){const l=new s.MutationObserver(()=>{rte(s,i,r)||(l.disconnect(),this.restore=null,this.lock(t))}),c={attributes:!0};l.observe(i,c),l.observe(r,c),this.restore=()=>l.disconnect();return}const o=rM||!Ivt(t);this.restore=o?Dvt(t):Mvt(t)}}const $vt=new Lvt;function ELe(e=!0,t=null){Jn(()=>{if(e)return $vt.acquire(t)},[e,t])}function Fvt({store:e,parentContext:t,isDrawer:n}){const i=e.useState("open"),r=e.useState("disablePointerDismissal"),s=e.useState("modal"),o=e.useState("popupElement"),l=e.useState("floatingRootContext"),[c,u]=p.useState(0),[d,f]=p.useState(0),h=c===0,m=OIe(l,{outsidePressEvent(){return e.context.internalBackdropRef.current||e.context.backdropRef.current?"intentional":{mouse:s==="trap-focus"?"sloppy":"intentional",touch:"sloppy"}},outsidePress(g){if(!e.context.outsidePressEnabledRef.current||"button"in g&&g.button!==0)return!1;if("touches"in g){if(g.type==="touchend"){if(g.changedTouches.length!==1||g.touches.length!==0)return!1}else if(g.touches.length!==1)return!1}const b=go(g);if(h&&!r){if(s){const v=e.context.internalBackdropRef.current,y=e.context.backdropRef.current;return v||y?v===b||y===b||ti(b,o)&&!(b!=null&&b.hasAttribute("data-base-ui-portal")):!0}return!0}return!1},escapeKey:h});return ELe(i&&s===!0,o),e.useContextCallback("onNestedDialogOpen",(g,b)=>{u(g),f(b)}),Jn(()=>(t!=null&&t.onNestedDialogOpen&&(i?t.onNestedDialogOpen(c+1,d+(n?1:0)):t.onNestedDialogOpen(0,0)),()=>{t!=null&&t.onNestedDialogOpen&&i&&t.onNestedDialogOpen(0,0)}),[n,i,c,d,t]),WIe(e,{activeTriggerProps:m.reference,inactiveTriggerProps:m.trigger,popupProps:m.floating,nestedOpenDialogCount:c,nestedOpenDrawerCount:d}),null}const Bvt={...ZIe,modal:e=>e.modal,nested:e=>e.nested,nestedOpenDialogCount:e=>e.nestedOpenDialogCount,nestedOpenDrawerCount:e=>e.nestedOpenDrawerCount,disablePointerDismissal:e=>e.disablePointerDismissal,openMethod:e=>e.openMethod,descriptionElementId:e=>e.descriptionElementId,titleElementId:e=>e.titleElementId,viewportElement:e=>e.viewportElement,role:e=>e.role};class Uvt extends JD{constructor(n,i,r){const s=new AV,o=Qvt(n,s,i,r);super(o,zvt(s),Bvt);en(this,"setOpen",(n,i)=>{var s,o;if(i.preventUnmountOnClose=()=>{this.set("preventUnmountingOnClose",!0)},!n&&i.trigger==null&&this.state.activeTriggerId!=null&&(i.trigger=this.state.activeTriggerElement??void 0),(o=(s=this.context).onOpenChange)==null||o.call(s,n,i),i.isCanceled)return;this.state.floatingRootContext.dispatchOpenChange(n,i);const r={open:n};zIe(r,n,i.trigger),this.update(r)})}}function Qvt(e,t,n,i=!1){const r={...GIe(),modal:!0,disablePointerDismissal:!1,viewportElement:null,descriptionElementId:void 0,titleElementId:void 0,openMethod:null,nested:!1,nestedOpenDialogCount:0,nestedOpenDrawerCount:0,role:"dialog",...e};return r.floatingRootContext=XIe(t,n,i),r}function zvt(e){return{popupRef:p.createRef(),backdropRef:p.createRef(),internalBackdropRef:p.createRef(),outsidePressEnabledRef:{current:!0},triggerElements:e,onOpenChange:void 0,onOpenChangeComplete:void 0}}function Vvt(e,t){const{children:n,open:i,defaultOpen:r=!1,onOpenChange:s,onOpenChangeComplete:o,disablePointerDismissal:l=!1,modal:c=!0,actionsRef:u,handle:d,triggerId:f,defaultTriggerId:h=null}=t,m=e==="drawer",g=c,b=l,v="dialog",y=Db(!0),w=y!=null,x={modal:g,disablePointerDismissal:b,nested:w,role:v},k=UIe((T,R)=>new Uvt({open:r,openProp:i,activeTriggerId:h,triggerIdProp:f,...x},T,R),!0);k.useControlledProp("openProp",i),k.useControlledProp("triggerIdProp",f),k.useSyncedValues(x),k.useContextCallback("onOpenChange",s),k.useContextCallback("onOpenChangeComplete",o);const O=k.useState("open"),S=k.useState("mounted"),A=k.useState("payload");KIe(k,O),HIe(k);const{forceUnmount:E}=qIe(O,k);p.useImperativeHandle(u,()=>({unmount:E,close:()=>k.setOpen(!1,ga(fIe))}),[E,k]);const j=O||S;return a.jsxs(wLe.Provider,{value:k,children:[d&&a.jsx(QIe,{handle:d,store:k}),j&&a.jsx(Fvt,{store:k,parentContext:y==null?void 0:y.context,isDrawer:m}),typeof n=="function"?n({payload:A}):n]})}function Fb(e){return Vvt("dialog",e)}const o0=p.forwardRef(function(t,n){const{render:i,className:r,style:s,id:o,...l}=t,c=Db(),u=am(o);return c.useSyncedValueWithCleanup("titleElementId",u),La("h2",t,{ref:n,props:[{id:u},l]})});function Hvt(e){const t=p.useRef(""),n=p.useCallback(r=>{r.defaultPrevented||(t.current=r.pointerType,e(r,r.pointerType))},[e]);return{onClick:p.useCallback(r=>{if(r.detail===0){e(r,"keyboard");return}"pointerType"in r?e(r,r.pointerType):e(r,t.current),t.current=""},[e]),onPointerDown:n}}function CLe(e,t){const n=ai((s,o)=>{(typeof e=="function"?e():e)||t(o||(rM?"touch":""))}),{onClick:i,onPointerDown:r}=Hvt(n);return p.useMemo(()=>({onClick:i,onPointerDown:r}),[i,r])}const ALe=p.forwardRef(function(t,n){const{render:i,className:r,style:s,disabled:o=!1,nativeButton:l=!0,id:c,payload:u,handle:d,...f}=t,h=Db(!0),g=JIe(d)??h;if(!g)throw new Error(Xc(79));const b=am(c),v=g.useState("floatingRootContext"),y=g.useState("isOpenedByTrigger",b),w=g.useState("triggerPopupId",b),x=p.useRef(null),{registerTrigger:k,isMountedByThisTrigger:O}=VIe(b,x,g,{payload:u}),{getButtonProps:S,buttonRef:A}=lM({disabled:o,native:l}),E=SIe(v),j=CLe(()=>g.select("open"),C=>{g.set("openMethod",C)}),T={disabled:o,open:y},R=g.useState("triggerProps",O);return La("button",t,{state:T,ref:[A,n,k,x],props:[E.reference,R,j,{[SV]:"",id:b,"aria-haspopup":"dialog","aria-expanded":y,"aria-controls":w},f,S],stateAttributesMapping:iPe})}),qvt="data:image/svg+xml,%3csvg%20preserveAspectRatio='none'%20overflow='visible'%20style='display:%20block;'%20width='20'%20height='20'%20viewBox='0%200%2020%2020'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cg%20id='Icon%20Frame'%3e%3cpath%20id='Vector%208798'%20d='M5%205L15%2015'%20stroke='white'%20stroke-opacity='0.15'%20stroke-width='1.25'%20stroke-linecap='round'/%3e%3cpath%20id='Vector%208800'%20d='M15%205L5%2015'%20stroke='white'%20stroke-opacity='0.15'%20stroke-width='1.25'%20stroke-linecap='round'/%3e%3c/g%3e%3c/svg%3e";function PH({title:e,topGlow:t=!0,children:n,footer:i,cancelLabel:r="Cancel",confirmLabel:s="Confirm",closeLabel:o="Close",onClose:l,onCancel:c,onConfirm:u,className:d="",...f}){const h=p.useId();return a.jsxs("div",{role:"dialog","aria-labelledby":h,...f,className:`studio-modal-layout ${t?"studio-modal-layout--glow":""} ${d}`.trim(),children:[a.jsxs("header",{className:"studio-modal-layout__header",children:[a.jsx("h3",{id:h,children:e}),a.jsx(sn,{variant:"ghost",size:"compact",iconOnly:!0,className:"studio-modal-layout__close","aria-label":o,onClick:l,startIcon:a.jsx("img",{src:qvt,alt:""})})]}),a.jsx("div",{className:"studio-modal-layout__body",children:n}),i!==null&&a.jsx("footer",{className:"studio-modal-layout__footer",children:i===void 0?a.jsxs(a.Fragment,{children:[a.jsx(sn,{variant:"outline",className:"studio-modal-layout__cancel",onClick:c,children:r}),a.jsx(sn,{className:"studio-modal-layout__confirm",onClick:u,children:s})]}):i})]})}class DH extends Error{constructor(t){super(`AGENTS.md request failed: ${t}`),this.status=t}}async function ste(e,t,n){const i=await gRe(e.runtimeId,e.region,{signal:t,...n?{method:"POST",body:JSON.stringify(n)}:{}});if(!i.ok)throw new DH(i.status);const r=await i.json();if(typeof r!="object"||r===null||!("content"in r)||!("revision"in r)||typeof r.content!="string"||typeof r.revision!="number"||!Number.isSafeInteger(r.revision)||r.revision<0)throw new Error("Invalid AGENTS.md response");return{content:r.content,revision:r.revision}}function Wvt({target:e,onClose:t,onSaved:n}){const{t:i}=_e("workspaceTools"),[r,s]=p.useState(null),[o,l]=p.useState(""),[c,u]=p.useState(!0),[d,f]=p.useState(!1),[h,m]=p.useState(""),[g,b]=p.useState(0),[v,y]=p.useState(!1),[w,x]=p.useState(null),k=p.useRef(null),O=p.useRef(!1),S=r!==null&&o!==r.content;p.useEffect(()=>{const T=new AbortController;return u(!0),m(""),ste(e,T.signal).then(R=>{T.signal.aborted||(s(R),l(R.content),y(!1))}).catch(R=>{T.signal.aborted||m(ate(R,!1))}).finally(()=>{T.signal.aborted||u(!1)}),()=>T.abort()},[e.runtimeId,e.region,g]),p.useEffect(()=>()=>{var T;return(T=k.current)==null?void 0:T.abort()},[]);function A(){k.current||O.current||(S?x("close"):t())}async function E(T=!1){if(k.current||O.current||!r||!S||v||c||o.length>4e4)return;if(!o&&!T){x("clear");return}const R=new AbortController;k.current=R,f(!0),m("");try{await ste(e,R.signal,{content:o,revision:r.revision}),R.signal.aborted||(n(),t())}catch(C){if(!R.signal.aborted){const N=!(C instanceof DH)||C.status>=500;y(N),m(N?"agentsMdSaveUncertain":ate(C,!0))}}finally{k.current===R&&(k.current=null),R.signal.aborted||f(!1)}}function j(){const T=w;x(null),T==="close"?t():T==="reload"?b(R=>R+1):T==="clear"&&E(!0)}return a.jsx(Fb,{open:!0,onOpenChange:T=>{T||A()},children:a.jsxs($b,{children:[a.jsx(Mb,{className:"studio-modal-button__backdrop"}),a.jsx(Lb,{className:"studio-modal-button__popup",render:a.jsx(PH,{title:a.jsx(o0,{render:a.jsx("span",{}),children:"AGENTS.md"}),topGlow:!1,onClose:A,closeLabel:i("agentTopology.close"),footer:a.jsxs(a.Fragment,{children:[h&&a.jsx(sn,{variant:"outline",disabled:d||c,onClick:()=>S?x("reload"):b(T=>T+1),children:i("agentTopology.refresh")}),a.jsx(sn,{variant:"outline",disabled:d,onClick:A,children:i("agentTopology.close")}),a.jsx(sn,{loading:d,disabled:!r||!S||c||v||o.length>4e4,onClick:()=>void E(),children:i("agentTopology.saveAgentsMd")})]}),children:a.jsx(Fd,{className:"studio-modal-button__body",children:a.jsxs("div",{className:"mpa-agents-md-editor-body",children:[a.jsx("p",{children:i("agentTopology.agentsMdEditHint")}),c?a.jsx(Yt,{as:"p",children:i("agentTopology.agentsMdLoading")}):r&&a.jsx(_M,{"aria-label":"AGENTS.md",value:o,disabled:d,rows:9,spellCheck:!1,maxLength:4e4,onCompositionStart:()=>{O.current=!0},onCompositionEnd:()=>{O.current=!1},onChange:T=>{l(T.currentTarget.value),x(null)}}),o.length>4e4&&a.jsx("p",{role:"alert",children:i("agentTopology.agentsMdTooLong")}),h&&a.jsx("p",{role:"alert",children:i(`agentTopology.${h}`)}),w&&a.jsxs("div",{role:"alert",children:[a.jsx("p",{children:i(`agentTopology.${w==="clear"?"agentsMdClearConfirm":"discardDocument"}`)}),a.jsxs("div",{className:"mpa-agents-md-confirm-actions",children:[a.jsx(sn,{variant:"outline",onClick:()=>x(null),children:i("agentTopology.keepEditing")}),a.jsx(sn,{onClick:j,children:i("agentTopology.confirmDocument")})]})]})]})})})})]})})}function ate(e,t){if(e instanceof DH){if([401,403].includes(e.status))return"accessDenied";if([404,405,501].includes(e.status))return"agentsMdEditUnsupported";if(e.status===409)return"agentsMdConflict";if(e.status===422)return"agentsMdTooLong"}return t?"documentSaveFailed":"agentsMdLoadFailed"}function Kvt(e){var i;if(((i=e.info)==null?void 0:i.agentCategory)!=="mpa")return null;const t=e.info.mpa,n=JSON.stringify([e.agentsMdTarget,t==null?void 0:t.skillSpacesStatus,t==null?void 0:t.skillSpaces]);return a.jsx(Gvt,{...e,info:e.info},n)}function Gvt(e){const[t,n]=p.useState(!1),[i,r]=p.useState(null),[s,o]=p.useState(0),[l,c]=p.useState({skills:[],loading:!0,complete:!1}),u=e.info.mpa;return p.useEffect(()=>{const d=new AbortController;if((u==null?void 0:u.skillSpacesStatus)!=="ready")return c({skills:[],loading:!1,complete:!1,error:(u==null?void 0:u.skillSpacesStatus)??"unsupported"}),()=>d.abort();c(h=>({...h,loading:!0,error:void 0}));const f=new Map;return(async()=>{let h=!1;for(const m of u.skillSpaces){let g=0;for(let b=1;;b++){if(b>100)throw new Error("Skill pagination limit reached");const v=await oLe(m.id,{region:m.region,page:b,pageSize:100,signal:d.signal});if(d.signal.aborted)return;if(!Array.isArray(v.items)||!Number.isInteger(v.totalCount)||v.totalCount<0)throw new Error("Invalid SkillSpace page");const y=f.size;for(const w of v.items){if(typeof w.skillName!="string"||!w.skillName.trim())throw new Error("Invalid skill name");f.set(`${m.region}:${m.id}:${w.skillId||w.skillName}`,{spaceId:m.id,region:m.region,skillId:w.skillId,version:w.version,lookupByName:w.lookupByName,name:w.skillName,description:w.skillDescription||""})}if(g+=v.items.length,h||(h=v.degraded===!0),c({skills:[...f.values()],loading:!0,complete:!1}),g>=v.totalCount)break;if(!v.items.length||f.size===y)throw new Error("Skill pagination made no progress")}}d.signal.aborted||c({skills:[...f.values()],loading:!1,complete:!h,error:h?"degraded":void 0})})().catch(h=>{if(d.signal.aborted)return;const m=h instanceof c1&&[401,403].includes(h.status);c(g=>({skills:m?[]:f.size?[...f.values()]:g.skills,loading:!1,complete:!1,error:m?"forbidden":"error"}))}),()=>d.abort()},[u,s]),a.jsxs(a.Fragment,{children:[a.jsx(Ovt,{...e,boundSkills:l,onEditAgentsMd:e.agentsMdTarget?()=>n(!0):void 0,onOpenSkill:d=>r(l.skills[d]),onRefresh:()=>{e.onRefresh?e.onRefresh():o(d=>d+1)}}),t&&e.agentsMdTarget&&a.jsx(Wvt,{target:e.agentsMdTarget,onClose:()=>n(!1),onSaved:()=>{var d;return(d=e.onRefresh)==null?void 0:d.call(e)}}),i&&a.jsx(Fyt,{target:i,onClose:()=>r(null),onSaved:()=>o(d=>d+1)})]})}const bT={viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:1.75,strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":!0};function ote(e){return a.jsxs("svg",{...bT,...e,children:[a.jsx("rect",{x:"3.75",y:"5.25",width:"16.5",height:"13.5",rx:"2"}),a.jsx("path",{d:"m10.25 9 4.8 3-4.8 3V9Z"})]})}function Xvt(e){return a.jsxs("svg",{...bT,...e,children:[a.jsx("path",{d:"M12 3.75v10.5M8.4 10.8 12 14.4l3.6-3.6"}),a.jsx("path",{d:"M5 17.25v2h14v-2"})]})}function Yvt(e){return a.jsxs("svg",{...bT,...e,children:[a.jsx("path",{d:"M8.75 8.75 6.9 10.6a3.4 3.4 0 0 0 4.8 4.8l1.85-1.85"}),a.jsx("path",{d:"m15.25 15.25 1.85-1.85a3.4 3.4 0 0 0-4.8-4.8l-1.85 1.85"}),a.jsx("path",{d:"m9.4 14.6 5.2-5.2"})]})}function PI(e){return a.jsxs("svg",{...bT,...e,children:[a.jsx("path",{d:"M5 19h3.2L18.6 8.6a1.7 1.7 0 0 0 0-2.4l-.8-.8a1.7 1.7 0 0 0-2.4 0L5 15.8V19Z"}),a.jsx("path",{d:"m13.9 6.9 3.2 3.2M5 15.8 8.2 19"})]})}function TLe(e){return a.jsx("svg",{...bT,...e,children:a.jsx("path",{d:"m6.5 6.5 11 11M17.5 6.5l-11 11"})})}const Zvt=180,lte=500,S4=10,cte=32;function Jvt(e){return Array.from(new Set(e.split(/[,,]/).map(t=>t.trim()).filter(Boolean)))}function e0t({artifact:e,busy:t,error:n,onClose:i,onSave:r}){const{t:s}=_e("workspaceTools"),[o,l]=p.useState(e.name),[c,u]=p.useState(e.description??""),[d,f]=p.useState((e.tags??[]).join(",")),[h,m]=p.useState(""),g=p.useId(),b=p.useId(),v=p.useRef(null),y=p.useRef(null),w=p.useRef(t),x=p.useRef(i);p.useEffect(()=>{w.current=t,x.current=i},[t,i]),p.useEffect(()=>{var j,T;const S=document.body.style.overflow,A=document.activeElement instanceof HTMLElement?document.activeElement:null;document.body.style.overflow="hidden",(j=y.current)==null||j.focus(),(T=y.current)==null||T.select();const E=R=>{if(R.key==="Escape"&&!w.current){R.preventDefault(),x.current();return}if(R.key!=="Tab")return;const C=v.current;if(!C)return;const N=Array.from(C.querySelectorAll('button:not([disabled]), input:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex="-1"])')).filter(P=>P.getClientRects().length>0);if(N.length===0){R.preventDefault();return}const D=N[0],I=N[N.length-1];R.shiftKey&&document.activeElement===D?(R.preventDefault(),I.focus()):!R.shiftKey&&document.activeElement===I&&(R.preventDefault(),D.focus())};return window.addEventListener("keydown",E),()=>{window.removeEventListener("keydown",E),document.body.style.overflow=S,A!=null&&A.isConnected&&A.focus()}},[]);const k=S=>{var j;S.preventDefault();const A=o.trim(),E=Jvt(d);if(!A){m(s("artifactEdit.nameRequired")),(j=y.current)==null||j.focus();return}if(E.length>S4){m(s("artifactEdit.tooManyTags",{max:S4}));return}if(E.some(T=>T.length>cte)){m(s("artifactEdit.tagTooLong",{max:cte}));return}m(""),r({name:A,description:c.trim(),tags:E})},O=h||n;return bi.createPortal(a.jsx("div",{className:"artifact-edit-backdrop",onMouseDown:S=>{S.target===S.currentTarget&&!t&&i()},children:a.jsxs("section",{ref:v,className:"artifact-edit-dialog",role:"dialog","aria-modal":"true","aria-labelledby":g,"aria-describedby":b,"aria-busy":t||void 0,children:[a.jsxs("header",{className:"artifact-edit-dialog__header",children:[a.jsxs("div",{children:[a.jsx("h2",{id:g,children:s("artifactEdit.title")}),a.jsx("p",{id:b,children:s("artifactEdit.subtitle")})]}),a.jsx("button",{type:"button",onClick:i,disabled:t,"aria-label":s("artifactEdit.close"),children:a.jsx(TLe,{})})]}),a.jsxs("form",{onSubmit:k,children:[a.jsxs("div",{className:"artifact-edit-dialog__body",children:[a.jsxs("label",{className:"artifact-edit-field",children:[a.jsx("span",{children:s("artifactEdit.name")}),a.jsx("input",{ref:y,value:o,maxLength:Zvt,disabled:t,"aria-invalid":!!O||void 0,onChange:S=>{l(S.target.value),m("")}})]}),a.jsxs("label",{className:"artifact-edit-field",children:[a.jsx("span",{children:s("artifactEdit.description")}),a.jsx("textarea",{value:c,maxLength:lte,disabled:t,rows:4,placeholder:s("artifactEdit.descriptionPlaceholder"),onChange:S=>u(S.target.value)}),a.jsxs("small",{children:[c.length,"/",lte]})]}),a.jsxs("label",{className:"artifact-edit-field",children:[a.jsx("span",{children:s("artifactEdit.tags")}),a.jsx("input",{value:d,disabled:t,placeholder:s("artifactEdit.tagsPlaceholder",{max:S4}),onChange:S=>{f(S.target.value),m("")}})]}),O?a.jsx("div",{className:"artifact-edit-error",role:"alert",children:O}):null]}),a.jsxs("footer",{className:"artifact-edit-dialog__actions",children:[a.jsx("button",{type:"button",onClick:i,disabled:t,children:s("artifactEdit.cancel")}),a.jsx("button",{type:"submit",className:"is-primary",disabled:t,children:s(t?"artifactEdit.saving":"artifactEdit.save")})]})]})]})}),document.body)}function _Le({label:e,menuLabel:t,items:n,placement:i="bottom-end"}){return a.jsxs(tr,{children:[a.jsx(tr.Trigger,{children:a.jsx(Tt,{type:"button",color:"secondary",variant:"ghost",size:"md",iconSize:"sm",uniform:!0,"aria-label":e,title:e,disabled:n.length===0,children:a.jsx(Hct,{"aria-hidden":"true"})})}),a.jsxs(tr.Content,{side:i==="top-end"?"top":"bottom",align:"end",minWidth:148,children:[a.jsx("span",{className:"sr-only",children:t}),n.map(r=>a.jsx(tr.Item,{disabled:r.disabled,onSelect:r.onSelect,children:a.jsx("span",{title:r.title,children:r.label})},r.label))]})]})}const t0t="_Alert_1tr02_1",n0t="_Content_1tr02_145",i0t="_Indicator_1tr02_156",r0t="_Message_1tr02_159",s0t="_Title_1tr02_162",a0t="_Description_1tr02_168",o0t="_Actions_1tr02_173",fy={Alert:t0t,Content:n0t,Indicator:i0t,Message:r0t,Title:s0t,Description:a0t,Actions:o0t},Eh=({color:e="primary",variant:t="outline",title:n,description:i,actions:r,actionsPlacement:s,indicator:o,className:l,actionsClassName:c,ref:u,...d})=>{const f=p.useRef(null),h=p.useRef(null),[m,g]=p.useState("end"),{width:b}=FPe({ref:f});return p.useEffect(()=>{var y;const v=((y=h.current)==null?void 0:y.clientWidth)??0;if(v&&b){const w=v>b/3?"bottom":"end";g(w)}},[b]),a.jsxs("div",{ref:dT([u,f]),className:Ui(fy.Alert,l),"data-variant":t,"data-color":e,role:e==="danger"?"alert":void 0,"data-actions-placement":s??m,...d,children:[o===!1?null:a.jsx("div",{className:fy.Indicator,children:o??a.jsx(l0t,{color:e})}),a.jsxs("div",{className:fy.Content,children:[a.jsxs("div",{className:fy.Message,children:[n&&a.jsx("div",{className:fy.Title,children:n}),i&&a.jsx("div",{className:fy.Description,children:i})]}),r&&a.jsx("div",{className:Ui(fy.Actions,c),ref:h,children:r})]})]})},l0t=({color:e})=>{switch(e){case"warning":case"caution":case"danger":return a.jsx(gPe,{});case"success":return a.jsx(dPe,{});default:return a.jsx(hPe,{})}};function Bd({title:e,description:t,error:n,confirmLabel:i,cancelLabel:r,closeLabel:s,variant:o="warning",busy:l=!1,confirmDisabled:c=!1,onCancel:u,onConfirm:d}){const{t:f}=_e("shell"),h=r??f("confirm.cancel"),m=s??f("confirm.close"),g=p.useId(),b=p.useId(),v=p.useRef(null),y=p.useRef(l),w=p.useRef(u);return p.useEffect(()=>{y.current=l,w.current=u},[l,u]),p.useEffect(()=>{var S;const x=document.body.style.overflow,k=document.activeElement instanceof HTMLElement?document.activeElement:null;document.body.style.overflow="hidden",(S=v.current)==null||S.focus();const O=A=>{A.key==="Escape"&&!y.current&&w.current()};return window.addEventListener("keydown",O),()=>{document.body.style.overflow=x,window.removeEventListener("keydown",O),k!=null&&k.isConnected&&k.focus()}},[]),bi.createPortal(a.jsx("div",{className:"studio-confirm-backdrop",onMouseDown:x=>{x.target===x.currentTarget&&!l&&u()},children:a.jsxs("section",{className:`studio-confirm-dialog studio-confirm-dialog--${o}`,role:"alertdialog","aria-modal":"true","aria-labelledby":g,"aria-describedby":b,"aria-busy":l||void 0,children:[a.jsxs("header",{className:"studio-confirm-head",children:[a.jsxs("div",{className:"studio-confirm-title-wrap",children:[a.jsx("span",{className:"studio-confirm-title-icon","aria-hidden":"true",children:a.jsx(gPe,{})}),a.jsx("h2",{id:g,children:e})]}),a.jsx(Tt,{type:"button",className:"studio-confirm-close",color:"secondary",variant:"ghost",size:"lg",uniform:!0,pill:!1,onClick:u,disabled:l,"aria-label":m,children:a.jsx(RV,{})})]}),a.jsxs("div",{className:"studio-confirm-body",children:[a.jsx("div",{id:b,children:t}),n?a.jsx(Eh,{className:"studio-confirm-error",color:"danger",variant:"soft",description:n}):null]}),a.jsxs("footer",{className:"studio-confirm-actions",children:[a.jsx(Tt,{ref:v,type:"button",color:"secondary",variant:"ghost",size:"lg",pill:!1,onClick:u,disabled:l,children:h}),a.jsx(Tt,{type:"button",className:"studio-confirm-primary",color:o==="danger"?"danger":"primary",size:"lg",pill:!1,loading:l,onClick:d,disabled:l||c,children:i})]})]})}),document.body)}const c0t="_Container_1a6nz_1",u0t="_Input_1a6nz_229",ute={Container:c0t,Input:u0t},Ts=e=>{const t=p.useRef(null),i=`search-ui-input-${p.useId()}`,{id:r,name:s,type:o="text",variant:l="outline",size:c="md",gutterSize:u,className:d,autoComplete:f,disabled:h=!1,readOnly:m=!1,invalid:g=!1,allowAutofillExtensions:b=o==="password"||!!s||!!f&&f!=="off",onFocus:v,onBlur:y,onAnimationStart:w,onAutofill:x,autoSelect:k,startAdornment:O,endAdornment:S,pill:A,opticallyAlign:E,ref:j,...T}=e,R=I=>{const P=t.current;if(!I.target||!(I.target instanceof Element)||!P||P.contains(I.target)||I.target.closest("button, [type='button'], [role='button'], [role='menuitem']"))return;I.preventDefault(),document.activeElement!==P&&P.focus();const{left:M,top:_}=P.getBoundingClientRect(),{clientX:F,clientY:L}=I,H=L<_||F{var I;k&&((I=t.current)==null||I.select())},[k]);const D=I=>{w==null||w(I),I.animationName==="native-autofill-in"&&(x==null||x())};return a.jsxs("div",{className:Ui(ute.Container,d),"data-variant":l,"data-size":c,"data-gutter-size":u,"data-focused":C,"data-disabled":h?"":void 0,"data-readonly":m?"":void 0,"data-invalid":g?"":void 0,"data-pill":A?"":void 0,"data-optically-align":E,"data-has-start-adornment":O?"":void 0,"data-has-end-adornment":S?"":void 0,onMouseDown:R,children:[O,a.jsx("input",{...T,ref:dT([j,t]),id:r||(b?void 0:i),className:ute.Input,type:o,name:s,autoComplete:f,readOnly:m,disabled:h,onFocus:I=>{N(!0),v==null||v(I)},onBlur:I=>{N(!1),y==null||y(I)},onAnimationStart:D,"data-lpignore":b?void 0:!0,"data-1p-ignore":b?void 0:!0}),S]})},d0t="_SelectControl_1tyi7_1",f0t="_Clear_1tyi7_436",h0t="_DropdownIcon_1tyi7_437",p0t="_TriggerText_1tyi7_468",m0t="_IndicatorWrapper_1tyi7_476",g0t="_StartIcon_1tyi7_482",b0t="_DropdownIconChevron_1tyi7_534",y0t="_LoadingIndicator_1tyi7_537",wp={SelectControl:d0t,Clear:f0t,DropdownIcon:h0t,TriggerText:p0t,IndicatorWrapper:m0t,StartIcon:g0t,DropdownIconChevron:b0t,LoadingIndicator:y0t},v0t=({ref:e,onPointerDown:t,onKeyDown:n,onPointerEnter:i,onInteract:r,invalid:s,disabled:o,children:l,className:c,variant:u="outline",size:d="md",block:f,opticallyAlign:h,pill:m=!0,loading:g,onClearClick:b,selected:v=!1,StartIcon:y,dropdownIconType:w="dropdown",...x})=>{const k=p.useRef(null),S=!!b&&v&&!g&&!o,A=w&&w!=="none"&&!g,E=S||g||A,j=!g&&!o,T=C=>{var N;switch(C.key){case"ArrowDown":case"ArrowUp":case" ":C.stopPropagation(),C.preventDefault(),r?r():(N=k.current)==null||N.dispatchEvent(new PointerEvent("pointerdown",{bubbles:!0,cancelable:!0,pointerType:"mouse"}));break;case"Enter":break;default:n==null||n(C)}},R=C=>{var N;C.button!==2&&(C.stopPropagation(),r?(C.preventDefault(),r()):(t==null||t(C),(N=x.onClick)==null||N.call(x,C)))};return a.jsxs("span",{ref:dT([k,e]),className:Ui(wp.SelectControl,c),role:"button",tabIndex:o?-1:0,onPointerEnter:C=>{UV(C),i==null||i(C)},onPointerDown:j?R:void 0,onKeyDown:j?T:void 0,"data-variant":u,"data-block":f?"":void 0,"data-pill":m?"":void 0,"data-size":d,"data-optically-align":h,"aria-busy":g?"true":void 0,"data-selected":v,"data-loading":g?"":void 0,"data-invalid":s?"":void 0,"data-disabled":o?"":void 0,"aria-disabled":o,...x,onClick:void 0,children:[y&&a.jsx(y,{className:wp.StartIcon}),a.jsx("span",{className:wp.TriggerText,children:l}),E&&a.jsxs("div",{className:wp.IndicatorWrapper,children:[S&&a.jsx(Tt,{"aria-label":"Clear current value",className:wp.Clear,onPointerDown:C=>{C.stopPropagation()},onClick:C=>{C.stopPropagation(),C.preventDefault(),b()},color:"secondary",variant:A?"ghost":"solid",size:"3xs",uniform:!0,pill:m,"data-only-child":A?void 0:"",children:a.jsx(RV,{})}),g&&a.jsx(rT,{className:wp.LoadingIndicator}),A&&a.jsx(x0t,{iconType:w})]})]})},x0t=({iconType:e})=>e==="chevronDown"?a.jsx(Bct,{className:Ui(wp.DropdownIcon,wp.DropdownIconChevron)}):a.jsx(qct,{className:wp.DropdownIcon}),w0t="_Menu_n4tw6_3",k0t="_MenuList_n4tw6_5",S0t="_MenuInner_n4tw6_50",O0t="_OptionsList_n4tw6_64",E0t="_Option_n4tw6_64",C0t="_PressableInner_n4tw6_111",A0t="_OptionInner_n4tw6_113",T0t="_OptionCheck_n4tw6_118",_0t="_OptionIndicatorSlot_n4tw6_123",j0t="_OptionGroupHeading_n4tw6_128",N0t="_OptionHardLimitHeading_n4tw6_140",R0t="_OptionsLimit_n4tw6_147",I0t="_Action_n4tw6_152",P0t="_ActionInner_n4tw6_218",D0t="_ActionsContainer_n4tw6_224",M0t="_Search_n4tw6_244",L0t="_SearchEmpty_n4tw6_247",ms={Menu:w0t,MenuList:k0t,MenuInner:S0t,OptionsList:O0t,Option:E0t,PressableInner:C0t,OptionInner:A0t,OptionCheck:T0t,OptionIndicatorSlot:_0t,OptionGroupHeading:j0t,OptionHardLimitHeading:N0t,OptionsLimit:R0t,Action:I0t,ActionInner:P0t,ActionsContainer:D0t,Search:M0t,SearchEmpty:L0t},jLe=p.createContext(null),Bb=()=>{const e=p.use(jLe);if(!e)throw new Error("Select components must be wrapped in