@@ -4451,6 +4451,7 @@ async def _agentkit_proxy(request: Request, path: str):
44514451 debug_runtime_env_from_draft,
44524452 generate_project_from_draft,
44534453 normalize_and_validate_draft,
4454+ prepare_mcp_auth,
44544455 )
44554456 from veadk.cli.generated_agent_security import (
44564457 DebugPolicyError,
@@ -5077,10 +5078,15 @@ async def _generate_project_and_draft_from_request(
50775078 *,
50785079 debug: bool,
50795080 owner_id: str = "local",
5081+ validated_test_request: GeneratedAgentTestRunRequest | None = None,
5082+ debug_mcp_env_values: Mapping[str, str] | None = None,
50805083 ) -> tuple[GeneratedProject, AgentDraft]:
50815084 try:
50825085 if debug:
5083- req = GeneratedAgentTestRunRequest.model_validate(data)
5086+ req = (
5087+ validated_test_request
5088+ or GeneratedAgentTestRunRequest.model_validate(data)
5089+ )
50845090 else:
50855091 req = GeneratedAgentProjectRequest.model_validate(data)
50865092 draft = normalize_and_validate_draft(req.draft)
@@ -5099,7 +5105,18 @@ async def _generate_project_and_draft_from_request(
50995105 else _cloud_studio_private_networks
51005106 ),
51015107 )
5102- draft = await resolve_debug_mcp_endpoints(draft)
5108+ if debug_mcp_env_values:
5109+ draft = prepare_mcp_auth(draft)
5110+ mcp_env_values = dict(draft.deployment.envValues)
5111+ for key, value in debug_mcp_env_values.items():
5112+ if value and not mcp_env_values.get(key):
5113+ mcp_env_values[key] = value
5114+ draft = await resolve_debug_mcp_endpoints(
5115+ draft,
5116+ mcp_env_values,
5117+ )
5118+ else:
5119+ draft = await resolve_debug_mcp_endpoints(draft)
51035120 else:
51045121 validate_project_policy(draft)
51055122 project = generate_project_from_draft(draft)
@@ -5658,10 +5675,99 @@ async def _create_generated_agent_test_run(request: Request):
56585675 temp_dir = ""
56595676 proc = None
56605677 try:
5678+ try:
5679+ test_request = GeneratedAgentTestRunRequest.model_validate(data)
5680+ except ValidationError as error:
5681+ raise HTTPException(status_code=422, detail=error.errors()) from error
5682+
5683+ runtime_envs: dict[str, str] = {}
5684+ debug_mcp_env_values: dict[str, str] = {}
5685+ runtime_id = test_request.runtimeId.strip()
5686+ runtime_region = _coerce_cloud_region(test_request.runtimeRegion)
5687+ if runtime_id:
5688+ edited_draft = test_request.draft.model_dump(
5689+ mode="json",
5690+ by_alias=True,
5691+ exclude_none=True,
5692+ )
5693+ requested_references = mcp_auth_environment_keys(edited_draft)
5694+ requested_env_values = test_request.draft.deployment.envValues
5695+ stored_references = tuple(
5696+ reference
5697+ for reference in requested_references
5698+ if not requested_env_values.get(reference)
5699+ )
5700+ if stored_references:
5701+ (
5702+ update_capability,
5703+ runtime,
5704+ ) = await _runtime_update_capability_details(
5705+ request,
5706+ runtime_id=runtime_id,
5707+ region=runtime_region,
5708+ )
5709+ else:
5710+ update_capability = {}
5711+ runtime = await asyncio.to_thread(
5712+ _authorized_runtime,
5713+ request,
5714+ runtime_id,
5715+ runtime_region,
5716+ coded_access_error=True,
5717+ )
5718+ runtime_envs = {
5719+ str(item.key): str(item.value or "")
5720+ for item in (getattr(runtime, "envs", None) or [])
5721+ if getattr(item, "key", None)
5722+ and not _is_debug_protected_model_env(str(item.key))
5723+ }
5724+ published_agent = update_capability.get("agent")
5725+ published_draft = (
5726+ published_agent.get("draft")
5727+ if isinstance(published_agent, Mapping)
5728+ else None
5729+ )
5730+ if stored_references and isinstance(published_draft, Mapping):
5731+ published_environment = _legacy_runtime_environment(runtime)
5732+ published_references = mcp_auth_environment_keys(published_draft)
5733+ published_reference_values = {
5734+ reference: published_environment[reference]
5735+ for reference in published_references
5736+ if published_environment.get(reference)
5737+ }
5738+ if set(published_references).difference(published_reference_values):
5739+ try:
5740+ recovery, recovered_values = _legacy_mcp_state(
5741+ runtime,
5742+ runtime_region,
5743+ )
5744+ published_reference_values.update(
5745+ mcp_secret_values_for_draft_references(
5746+ draft=published_draft,
5747+ recovery=recovery,
5748+ recovered_values=recovered_values,
5749+ )
5750+ )
5751+ except LegacyRecoveryError as error:
5752+ logger.info(
5753+ "debug MCP credential recovery unavailable "
5754+ "runtime_id=%s region=%s code=%s",
5755+ runtime_id,
5756+ runtime_region,
5757+ error.code,
5758+ )
5759+ debug_mcp_env_values = retained_mcp_secret_values(
5760+ published_draft=published_draft,
5761+ edited_draft=edited_draft,
5762+ published_reference_values=published_reference_values,
5763+ )
5764+
56615765 project, draft = await _generate_project_and_draft_from_request(
56625766 data,
56635767 debug=True,
56645768 owner_id=owner_id or "local",
5769+ validated_test_request=test_request,
5770+ debug_mcp_env_values=debug_mcp_env_values,
56655771 )
56665772 sidecar_env: dict[str, str] = {}
56675773 sidecar_plan: dict[str, Any] | None = None
@@ -5698,25 +5804,6 @@ async def _create_generated_agent_test_run(request: Request):
56985804 status_code=409,
56995805 detail="Harness Sidecar 配置已更新,请重新解析后再启动调试。",
57005806 )
5701- runtime_envs: dict[str, str] = {}
5702- runtime_id = str(data.get("runtimeId") or "").strip()
5703- if runtime_id:
5704- runtime_region = (
5705- str(data.get("runtimeRegion") or "cn-beijing").strip()
5706- or "cn-beijing"
5707- )
5708- runtime = _authorized_runtime(
5709- request,
5710- runtime_id,
5711- runtime_region,
5712- coded_access_error=True,
5713- )
5714- runtime_envs = {
5715- str(item.key): str(item.value or "")
5716- for item in (getattr(runtime, "envs", None) or [])
5717- if getattr(item, "key", None)
5718- and not _is_debug_protected_model_env(str(item.key))
5719- }
57205807 temp_dir = tempfile.mkdtemp(prefix="veadk_generated_agent_test_")
57215808 app_name = _write_generated_project(project, temp_dir)
57225809 staged_environment_skills = ""
0 commit comments