Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
39 commits
Select commit Hold shift + click to select a range
d5cc433
feat: publish traced AppKit agent templates
Aug 12, 2026
95c7f92
chore: regenerate traced agent templates
Aug 12, 2026
be3150f
feat: provision UC tracing for agent templates
Aug 12, 2026
117b052
fix: harden UC quickstart verification
Aug 12, 2026
c5bc8f3
feat: complete LangGraph MLflow tracing
Aug 12, 2026
628f50f
fix: harden LangGraph tracing
Aug 12, 2026
b6cafd0
fix: redact quoted trace credentials
Aug 12, 2026
a162994
feat: complete OpenAI agent tracing
Aug 12, 2026
9d48018
fix: harden OpenAI tracing contracts
Aug 12, 2026
f7e4efa
fix: isolate streamed trace capture
Aug 12, 2026
d3b96f9
feat: enforce tracing in migration and batch agents
Aug 12, 2026
8d4052a
fix: harden migration and batch tracing
Aug 12, 2026
acaa5cc
fix: close tracing sanitization gaps
Aug 12, 2026
738a3c0
fix: redact escaped trace secrets
Aug 12, 2026
d4e5091
feat: migrate TypeScript agent tracing to MLflow core
Aug 12, 2026
cb24e52
fix: correct TypeScript LangChain trace lifecycle
Aug 12, 2026
a1007b9
test: isolate TypeScript endpoint tracing
Aug 13, 2026
9d8820c
feat: trace agent clients and RAG workflows
Aug 13, 2026
29b044e
fix: close Task 15 tracing review gaps
Aug 13, 2026
063c9c2
fix: enforce truthful tracing and feedback ownership
Aug 13, 2026
e826688
fix: distinguish unavailable RAG usage
Aug 13, 2026
18d94a0
fix: preserve RAG cost without token usage
Aug 13, 2026
58ee3b1
feat: continue MLflow traces through MCP servers
Aug 13, 2026
8fa5717
fix: complete MCP request tracing lifecycle
Aug 13, 2026
20cfc02
fix: bound MCP response trace capture
Aug 13, 2026
5b8cc1b
fix: retain oversized MCP error status
Aug 13, 2026
9177642
test: enforce agent trace conformance
Aug 13, 2026
dc53255
fix: satisfy agent trace conformance
Aug 13, 2026
1f9ba58
test: admit all executable trace surfaces
Aug 13, 2026
e70d47b
test: complete behavior trace conformance
Aug 13, 2026
24ec916
fix: close trace conformance false greens
Aug 13, 2026
6172b06
fix: sanitize remote trace manifests
Aug 13, 2026
c5c71b6
fix: restore terminal chatbot finish event
Aug 13, 2026
2895781
fix: redact TypeScript SDK error logs
Aug 13, 2026
1697904
fix: harden TypeScript credential redaction
Aug 13, 2026
975c721
test: prove TypeScript error non-traversal
Aug 13, 2026
7793d4c
fix: preserve migration preflight during sync
Aug 13, 2026
650367c
fix: enforce final template trace conformance
Aug 13, 2026
af40aec
fix: validate agent trace boundaries
Aug 13, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
492 changes: 465 additions & 27 deletions .scripts/agent-integration-tests/helpers.py

Large diffs are not rendered by default.

107 changes: 66 additions & 41 deletions .scripts/agent-integration-tests/template_config.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import re
import sys
from dataclasses import dataclass, field
from dataclasses import dataclass, field, replace
from pathlib import Path

# ---------------------------------------------------------------------------
Expand All @@ -17,6 +17,12 @@
# sets this to a persistent app in the workspace to exercise the
# feature end-to-end.
DEFAULT_TARGET_APP_NAME = ""
DEFAULT_MLFLOW_UC_CATALOG = "main"
DEFAULT_MLFLOW_UC_SCHEMA = "agent_traces"
DEFAULT_MLFLOW_UC_TABLE_PREFIX = "agents_on_apps"
DEFAULT_MLFLOW_OTEL_SPANS_TABLE = (
"main.agent_traces.agents_on_apps_otel_spans"
)


# ---------------------------------------------------------------------------
Expand Down Expand Up @@ -177,49 +183,40 @@ def build_templates(
serving_endpoint: str = DEFAULT_SERVING_ENDPOINT,
target_app_name: str = DEFAULT_TARGET_APP_NAME,
) -> list[TemplateConfig]:
# (name, needs_lakebase, overrides)
configs: list[tuple[str, bool, dict]] = [
("agent-langgraph", False, {}),
("agent-langgraph-advanced", True, {"is_advanced": True}),
("agent-openai-agents-sdk", False, {}),
("agent-openai-advanced", True, {"is_advanced": True}),
(
"agent-openai-agents-sdk-multiagent",
False,
{
"pre_test_edits": _multiagent_edits(
"agent-openai-agents-sdk-multiagent",
genie_space_id,
serving_endpoint,
target_app_name,
),
"validate_time": False,
},
),
("agent-non-conversational", False, {"is_conversational": False, "has_evaluate": False}),
("agent-migration-from-model-serving", False, {}),
]

# Templates to skip in tests (still listed above for registry validation)
skip_templates = {"agent-migration-from-model-serving"}

# Validate that all templates from the canonical registry are covered
sys.path.insert(0, str(REPO_ROOT / ".scripts"))
from templates import TEMPLATES as CANONICAL_TEMPLATES

config_names = {name for name, _, _ in configs}
canonical_names = set(CANONICAL_TEMPLATES.keys())
missing = canonical_names - config_names
if missing:
raise ValueError(
f"Templates in .scripts/templates.py but not in template_config.py: {missing}. "
"Add them to the configs list or explicitly exclude them."
)
policy_templates = build_trace_policy_templates()
configs: list[tuple[str, bool, dict]] = []
for policy in policy_templates:
# The Python E2E runner requires the MLflow AgentServer layout. Other
# discovered surfaces (currently standalone TypeScript) retain their
# own documented local/deployed commands and stay in the policy gate.
if not (policy.path / "agent_server" / "start_server.py").exists():
continue
if policy.name == "agent-migration-from-model-serving":
# Migration is a reference template without a runnable Apps target.
continue
deployment = (policy.path / "databricks.yml").read_text()
needs_lakebase = bool(re.search(r"\bpostgres:\s*$", deployment, re.MULTILINE))
overrides: dict = {}
if "advanced" in policy.name:
overrides["is_advanced"] = True
if "multiagent" in policy.name:
overrides.update(
{
"pre_test_edits": _multiagent_edits(
policy.name,
genie_space_id,
serving_endpoint,
target_app_name,
),
"validate_time": False,
}
)
if "non-conversational" in policy.name:
overrides.update({"is_conversational": False, "has_evaluate": False})
configs.append((policy.name, needs_lakebase, overrides))

templates = []
for name, needs_lakebase, overrides in configs:
if name in skip_templates:
continue
dev_app_name, app_resource_key = _parse_databricks_yml(name)
if needs_lakebase:
templates.append(
Expand All @@ -242,3 +239,31 @@ def build_templates(
)
)
return templates


def build_trace_policy_templates(
root: Path = REPO_ROOT,
deployed_template_names: set[str] | None = None,
):
"""Discover primary agent templates and attach per-template deployed proof.

Candidate selection is a repository convention plus source behavior, not a
hand-maintained list: any new ``agent-*`` directory detected by the shared
discovery engine enters this gate automatically.
"""
conformance_dir = REPO_ROOT / ".scripts" / "trace-conformance"
sys.path.insert(0, str(conformance_dir))
from discovery import discover_agentic_templates, is_trace_policy_candidate

deployed_template_names = deployed_template_names or set()
return [
replace(
template,
has_deployed_verification=(
template.has_deployed_verification
or template.name in deployed_template_names
),
)
for template in discover_agentic_templates(root)
if is_trace_policy_candidate(template)
]
9 changes: 9 additions & 0 deletions .scripts/agent-integration-tests/test_e2e.py
Original file line number Diff line number Diff line change
Expand Up @@ -394,6 +394,15 @@ def _run_deploy(
for attempt in range(3):
try:
_query_endpoints(template, app_url, token)
from test_quickstart_e2e import _verify_uc_trace_smoke

_verify_uc_trace_smoke(
template_dir,
template.dev_app_name,
app_url,
token,
profile,
)
last_exc = None
break
except Exception as exc:
Expand Down
Loading